FIR滤波器设计(Matlab代码)

之前已经提过了,IIR级数低,元器件少,成本低,但起不到线性相位的作用。而FIR滤波器由于没有反馈,比较不稳定,消耗资源比较多,但是却可以产生线性相位。
线性相位有什么用,请看这篇
然后我简单说一下FIR滤波器原理(图是搬来的),原理很简单,我们设计一个低通滤波器,就是用一个窗函数去截频谱,频域上就是信号和一个抽样函数卷积。
FIR滤波器设计(Matlab代码)_第1张图片

抽样函数是无限长的,但是离y轴越远衰减越厉害,我们计算机只能先对它进行截断。截断完傅里叶回去,窗函数就不是理想窗函数了。
FIR滤波器设计(Matlab代码)_第2张图片
但是我们不能直接使用截断的抽样函数进行卷积,我们对窗函数还是有要求的,比如截止频率,衰减速度啥的。根据不同的窗函数,我们就有了不同的方法。什么汉明窗、海宁窗啥的。

窗函数法设计的滤波器有如下结论:

1)旁瓣积分决定阻带和通带内的纹波;

2)主瓣积分决定过渡带的宽度。

3)通带的幅度取决于主、旁瓣积分。

瓣值抽样函数的一个个峰,主瓣就是最中间的。

clc;clear;
% 矩形窗,N=15
b = fir1(15,0.25*pi,'low',boxcar(16));
freqz(b,1,512);
title('矩形窗,N=15')
pause(3);
% 矩形窗,N=33
b = fir1(33,0.25*pi,'low',boxcar(34));
freqz(b,1,512);
title('矩形窗,N=33')
pause(3);

% 汉宁窗,N=15
b = fir1(15,0.25*pi,'low',hanning(16));
freqz(b,1,512);
title('汉宁窗,N=15')
pause(3);
% 汉宁窗,N=33
b = fir1(33,0.25*pi,'low',hanning(34));
freqz(b,1,512);
title('汉宁窗,N=33')
pause(3);

% 汉明窗,N=15
b = fir1(15,0.25*pi,'low',hamming(16));
freqz(b,1,512);
title('汉明窗,N=15')
pause(3);
% 汉明窗,N=33
b = fir1(33,0.25*pi,'low',hamming(34));
freqz(b,1,512);
title('汉明窗,N=33')
pause(3);

% 布莱克曼窗,N=15
b = fir1(15,0.25*pi,'low',blackman(16));
freqz(b,1,512);
title('布莱克曼窗,N=15')
pause(3);
% 布莱克曼窗,N=33
b = fir1(33,0.25*pi,'low',blackman(34));
freqz(b,1,512);
title('布莱克曼窗,N=33')
pause(3);

窗函数对比:

矩形窗:矩形窗使用最多,习惯上不加窗就是使信号通过了矩形窗。这种窗的优点是主瓣比较集中,缺点是旁瓣较高,并有负旁瓣, 导致变换中带进了高频干扰和泄漏,甚至出现负频现象。频率识别精度最高,幅值识别精度最低,所以矩形窗不是一个理想的窗。

汉宁窗:主瓣加宽并降低,旁瓣则显著碱小,从减小泄漏观点岀发,汉宁窗优于矩形窗。但汉宁窗主瓣加宽,相当于分析带宽加宽,频率分辨力下降。它与矩形窗相比,泄漏、波动都碱小了,并且选择性也提高。

海明窗:与汉宁窗都是余弦窗,又称改进的升余弦窗,只是加权系数不同,使旁瓣达到更小。 但其旁瓣衰减速度比汉宁窗慢。

布莱克曼窗:二阶升余弦窗,主瓣宽,旁瓣比较低,但等效噪声带宽比汉宁窗大一点,波动却小一点。频率识别精度最低,但幅值识别 精度最高,有更好的选择性。

你可能感兴趣的:(数字信号处理,dsp,数字信号处理,matlab)