Matlab 原型低通为巴特沃斯型的IIR带通滤波器及滤波验证成品。 验证添加的噪声为低频、高频余弦噪声。 仿真出图如下。先说说这滤波器的脾气。巴特沃斯这老爷子设计的滤波器特点就是通带里平坦得像块钢板过渡带嘛...嗯只能说比懒人起床的曲线稍微陡一点。咱们要做的是把低通原型变形为带通相当于给滤波器加了两个轮子。% 设计参数走起 fs 1000; % 采样率够用就行 order 6; % 六阶够劲过渡带能看 f_low 50; % 通带下限 f_high 150; % 通带上限这里有个坑Matlab的butter函数要的是归一化频率。别傻乎乎直接拿50Hz往里怼得这么算wn [f_low f_high]/(fs/2); % 归一化操作 [b,a] butter(order/2, wn, bandpass); % 原型低通往带通变形为什么order要除以2因为带通滤波器其实是两个低通拼起来的阶数自动翻倍。不信你试试不除出来的阶数能吓死你。现在造个测试信号玩真的。主信号在80Hz低频捣乱分子20Hz高频噪音250Hzt 0:1/fs:1; signal cos(2*pi*80*t); % 正经信号 noise_low 0.5*cos(2*pi*20*t); % 低频混混 noise_high 0.3*cos(2*pi*250*t); % 高频刺客 mixed signal noise_low noise_high;滤波操作别用普通的filter那玩意儿会有相位偏移。咱们上零相位绝招clean_signal filtfilt(b, a, mixed);filtfilt这货正反各滤一次相位曲线被掰直了。代价嘛...计算量翻倍但对现代电脑来说跟玩儿似的。Matlab 原型低通为巴特沃斯型的IIR带通滤波器及滤波验证成品。 验证添加的噪声为低频、高频余弦噪声。 仿真出图如下。重点来了上频谱验证% FFT走你 N length(mixed); f (-fs/2:fs/N:fs/2-fs/N); mixed_fft fftshift(fft(mixed)); clean_fft fftshift(fft(clean_signal)); figure; subplot(211) plot(f, abs(mixed_fft)) title(混频信号频谱) subplot(212) plot(f, abs(clean_fft)) title(滤波后频谱) xlabel(频率(Hz))看频谱图的时候注意20Hz和250Hz那两个尖峰应该被拍扁了80Hz的主峰巍然不动。要是发现主信号也萎了赶紧回去查通带设置——八成是归一化算错了。时域对比也别落下figure; plot(t, mixed, b:, t, clean_signal, r-, LineWidth,1.2) legend(带噪信号,滤波结果) title(时域效果检验)原信号的波形应该像被狗啃过滤波后的曲线得回归光滑。要是看到高频毛刺还在检查滤波器的上限截止频率是不是设低了。最后友情提示巴特沃斯这哥们设计的滤波器过渡带不够陡别硬刚要么加阶数要么换椭圆。但阶数太高小心系统稳定性搞不好会自激振荡那就真成电子琴了。
深夜调参最怕啥?不是咖啡喝完了,是滤波器参数算错了还不知道。今儿咱们用Matlab整点实在的——基于巴特沃斯的IIR带通滤波器,专治各种频段不纯
Matlab 原型低通为巴特沃斯型的IIR带通滤波器及滤波验证成品。 验证添加的噪声为低频、高频余弦噪声。 仿真出图如下。先说说这滤波器的脾气。巴特沃斯这老爷子设计的滤波器特点就是通带里平坦得像块钢板过渡带嘛...嗯只能说比懒人起床的曲线稍微陡一点。咱们要做的是把低通原型变形为带通相当于给滤波器加了两个轮子。% 设计参数走起 fs 1000; % 采样率够用就行 order 6; % 六阶够劲过渡带能看 f_low 50; % 通带下限 f_high 150; % 通带上限这里有个坑Matlab的butter函数要的是归一化频率。别傻乎乎直接拿50Hz往里怼得这么算wn [f_low f_high]/(fs/2); % 归一化操作 [b,a] butter(order/2, wn, bandpass); % 原型低通往带通变形为什么order要除以2因为带通滤波器其实是两个低通拼起来的阶数自动翻倍。不信你试试不除出来的阶数能吓死你。现在造个测试信号玩真的。主信号在80Hz低频捣乱分子20Hz高频噪音250Hzt 0:1/fs:1; signal cos(2*pi*80*t); % 正经信号 noise_low 0.5*cos(2*pi*20*t); % 低频混混 noise_high 0.3*cos(2*pi*250*t); % 高频刺客 mixed signal noise_low noise_high;滤波操作别用普通的filter那玩意儿会有相位偏移。咱们上零相位绝招clean_signal filtfilt(b, a, mixed);filtfilt这货正反各滤一次相位曲线被掰直了。代价嘛...计算量翻倍但对现代电脑来说跟玩儿似的。Matlab 原型低通为巴特沃斯型的IIR带通滤波器及滤波验证成品。 验证添加的噪声为低频、高频余弦噪声。 仿真出图如下。重点来了上频谱验证% FFT走你 N length(mixed); f (-fs/2:fs/N:fs/2-fs/N); mixed_fft fftshift(fft(mixed)); clean_fft fftshift(fft(clean_signal)); figure; subplot(211) plot(f, abs(mixed_fft)) title(混频信号频谱) subplot(212) plot(f, abs(clean_fft)) title(滤波后频谱) xlabel(频率(Hz))看频谱图的时候注意20Hz和250Hz那两个尖峰应该被拍扁了80Hz的主峰巍然不动。要是发现主信号也萎了赶紧回去查通带设置——八成是归一化算错了。时域对比也别落下figure; plot(t, mixed, b:, t, clean_signal, r-, LineWidth,1.2) legend(带噪信号,滤波结果) title(时域效果检验)原信号的波形应该像被狗啃过滤波后的曲线得回归光滑。要是看到高频毛刺还在检查滤波器的上限截止频率是不是设低了。最后友情提示巴特沃斯这哥们设计的滤波器过渡带不够陡别硬刚要么加阶数要么换椭圆。但阶数太高小心系统稳定性搞不好会自激振荡那就真成电子琴了。