
自适应滤波器设计与实现Matlab程序含GUI界面:显示原始信号与滤波后频谱比较及
巴特沃兹滤波器对比
最近在捣鼓信号处理实验,发现自适应滤波器真是个好玩的东西。和传统固定参数的滤波器不同,
这玩意儿能像变色龙一样实时调整特性。今天咱们用Matlab手搓一个带GUI的自适应滤波器,顺便跟经典
巴特沃兹滤波器掰掰手腕。
先看效果:界面左边是原始信号和它的频谱跳舞图,右边实时展示滤波后的频谱变化。滑动条可以
随时调整滤波器阶数和学习步长,就像调节汽车变速箱一样直观(图1界面示意图)。
生成测试信号咱们玩点刺激的——来个扫频信号加白噪声:
```matlab
fs = 1000;
t = 0:1/fs:1;
signal = chirp(t, 0, 1, 250) + 0.5*randn(size(t)); % 啾啾声+噪声
noise = 0.3*sin(2*pi*100*t); % 故意加个100Hz干扰
mixed_signal = signal + noise;
```
频谱显示用这个骚操作:
```matlab
f = (-fs/2:fs/length(signal):fs/2-1);
spectrum = fftshift(fft(mixed_signal));
plot(handles.axes1, f, abs(spectrum)); % 原始信号频谱
```
核心的自适应滤波算法采用LMS实现,这个20行的函数暗藏玄机:
```matlab
function [output, error] = adaptive_lms(input, order, mu)
w = zeros(1,order); % 滤波器系数
output = zeros(size(input));
for n = order:length(input)
x = input(n:-1:n-order+1); % 滑动窗口
y = w * x';