滤波器的使用(一)
滤波器主要是在frequency domain 上对信号进行变换
1、滤波器的响应类型
(1)Response Type(响应类型):有低通、高通、带通、带阻等设计。
- 低通:低于截止频率的信号通过, 主要是对高频信号的过滤
- 高通:高于某一频率的信号通过, 主要是对低频信号的过滤
- 带通:某一频率范围内的信号可以通过, 主要是对某一频带范围内的信号过滤
- 带阻:与带通滤波器相对, 主要是移除给定频带上的信号,又叫做陷波。例如去除50HZ的工频干扰
(2)Design Method(设计方法):有IIR和FIR两大类。
-
IIR产生的是无限长的脉冲响应;输出不仅与当前的输入有关,也跟当前的输出相关;即前面的输出会影响后面信号,有反馈
-
FIR产生有限长的脉冲响应;输出仅和当前的输入有关
(3)Filter Order(滤波器阶次):阶次可以根据自己的需要设定,也可以直接选择最小阶次。
(4)Frequency Specifications(频率参数):截止频率和通过频率
2、Matlab中滤波器的使用
- 低通滤波器:lowpass
- 高通滤波器:highpass
- 带通滤波器:bandpass
- 带阻滤波器:bandstop
% 输入参数为:data,[fpass1, fpass2], fs
% 示例
[myFilteredData, bpdf] = bandpass(df, [0.5 40], 250);
% 返回参数说明
% 滤波之后的数据、bpdf返回数字滤波器的参数
3、滤波器的设计
3.1 滤波器设计的一般方式
Matlab中设计滤波器件可通过designfilt函数实现。参数输入以及详细解释见以下链接:https://www.mathworks.com/help/signal/ref/designfilt.html#bt61003-4
应用示例:
Fs = 44100;
Fp = 1e3; % bandpass frequency
Fst = 1.4e3; % stoppass frequency
Ap = 1; % pass ripple in db
Ast = 95; % stopband attenstion in db
df = designfilt('lowpassfir', 'PassbandFrequency', Fp,...
'StopbandFrequency', Fst, 'PassbandRipple', Ap,...
'StopbandAttenuation', Ast, 'SampleRate', Fs);
% 绘制滤波器的幅频特性
fvtool(df)
dataIn = rand(1000, 1);
dataout = filter(df, dataIn);
plot(dataIn, 'r')
hold on
plot(dataout, 'b')
legend('raw signal', 'filter signal')
参数解释:
- 返回的df为滤波器的参数设置
- 使用时需要配合
filter
或者filtfilt
将设计的滤波器的参数输入,同时将待滤波的信号输入,最终得到的返回值即为滤波之后的信号 filter
和filtfilt
的差异体现在前者(filter
)会改变原始信号的相位,使信号在时间上出现延时;后者(filtfilt
)很好的保留信号的原始特征,不改变原始信号的波形特征。因此该方法又称为零相位滤波。
示例
rng default
x = wform' + 0.25*randn(500,1);
d = designfilt('lowpassfir', ...
'PassbandFrequency',0.15,'StopbandFrequency',0.2, ...
'PassbandRipple',1,'StopbandAttenuation',60, ...
'DesignMethod','equiripple');
y = filtfilt(d,x);
y1 = filter(d,x);
subplot(2,1,1)
plot([y y1])
title('Filtered Waveforms')
legend('Zero-phase Filtering','Conventional Filtering')
subplot(2,1,2)
plot(wform)
title('Original Waveform')
上述示例滤波后的结果对比:
3.2 滤波器可视化
通过fvtool可视化滤波器的幅频响应图像。带通滤波器幅频响应
终得到的返回值即为滤波之后的信号