1、窗函数设计FIR滤波器 (式3.2.1)由于是矩形频率响应特性,故一定是无限长序列,且是非因果的,而FIR滤波器的必然是有限长的,所以要用有限长的来逼近无限长的,最有效的方法是截断或者说用一个有限长度的窗口函数序列来截取,即 (式3.2.2)因而窗函数序列的形状及长度的选择就是关键。我们以一个截止频率为的线性相位的理想矩形幅度特性的低通滤波器为例来讨论。设低通特性的群延时为,即 (式3.2.3)这表明,在通带范围内,的幅度是均匀的,其值为1,相位是。利用(1)式可得 (式3.2.4)是中心点在的偶对称无限长非因果序列,要得到有限长的,一种最简单的方法就是取矩形窗,即 但是按照线形相位滤波器的约
2、束,必须是偶对称的,对称中心应为长度的一半(N-1)/2,因而必须=(N-1)/2,所以有 (式3.2.5)将(式3.2.4)代入(式3.25),可得 (式3.2.6)此时,一定满足这一线性相位的条件。下面求的傅里叶变换,也就是找出待求FIR滤波器的频率特性,以便能看出加窗处理后究竟对频率响应有何影响。按照复卷积公式,在时域是相乘、频域上是周期性卷积关系,即 (式3.2.7)因而逼近的好坏,完全取决于窗函数的频率特性。窗函数的频率特性为 (式3.2.8)对矩形窗,则有 (式3.2.9)也可表示成幅度函数与相位函数 (式3.2.10)其中 (式3.2.11)就是频域抽样内插函数,其幅度函数在之内
3、为一个主瓣,两侧形成许多衰减振荡的旁瓣,如果将理想频率响应也写成 (式3.2.12)则其幅度函数为 (式3.2.13)波器; 调用格式:b = fir1(N,Wn); b = fir1(N,Wn,high); b = fir1(N,Wn, stop); 参数说明:N:阶次,滤波器长度为N1; Wn:通带截止频率,其值在01之间,1对应Fs/2; b:滤波器系数。 在上述所有格式中,若不指定窗函数的类型,fir1自动选择Hamming窗。2)fir2 : 用来设计具有任意幅度响应的FIR滤波器。 调用格式:b = fir2(N, F, M); 参数说明:F是频率向量,其值在01之间; M是和F相
4、对应的所希望的幅频相应。 如同fir1, 缺省时自动选用Hamming窗。3)为了观测到设计出来的滤波器的特性,用freqz得到频率响应。 其中在画频率响应的时候我们分为幅度和相位画出。 又因为我们要观测的是衰减的大小程度,以dB为单位,所以我们在画幅度的时候纵坐标应该转换成dB。4)为了观测是否滤除已知频率,用filte(b,1,a)函数来实现,对信号的滤波实验。3.6实验所用MATLAB函数说数1H,w=freqz(b,a,N) b和a分别为离散系统的系统函数分子、分母多项式的系数向量,返回量H则包含了离散系统频响在 0pi范围内N个频率等分点的值(其中N为正整数),w则包含了范围内N个频
5、率等分点。调用默认的N时,其值是512。可以先调用freqz()函数计算系统的频率响应,然后利用abs()和angle()函数及plot()函数,绘制出系统的频响曲线。 2 Wn=kaiser(N,beta) 列向量wn中返回长度为N的凯塞贝塞尔窗函数w(n)。3 ceil(x) 是取大于等于x的最小整数。 4 fir1使用窗函数法设计线性相位FIR数字滤波器的工具箱函数。本函数在3.5中有详细介绍。 4.设计内容4.1用MATLAB设计程序如下clear;fs=500;t=(1:250)/fs;x=10*cos(2*pi*20*t)+cos(2*pi*80*t)+10*cos(2*pi*12
6、0*t);L=length(x);N=2(nextpow2(L);Hw=fft(x,N);figure(2);subplot(2,1,1);plot(t,x);grid on;title(滤波前信号x);xlabel(时间/s);% 原始信号subplot(2,1,2);plot(0:N-1)*fs/L,abs(Hw);% 查看信号频谱grid on;title(滤波前信号频谱图);xlabel(频率/Hz);ylabel(振幅|H(ejw)|);Ap=0.25;As=20;% 定义通带及阻带衰减dev=10(-As/20),(10(Ap/20)-1)/(10(Ap/20)+1),10(-As
7、/20);% 计算偏移量mags=0,1,0;% 带通fcuts=30,50,90,110;% 边界频率N,Wn,beta,ftype=kaiserord(fcuts,mags,dev,fs);% 估算FIR滤波器阶数hh2=fir1(N,Wn,ftype,kaiser(N+1,beta);% FIR滤波器设计hn,w1=freqz(hh2,1,512);%求解数字滤波器的频率响应figure(5)stem(hh2)title(hh2波形)figure(1) %绘图subplot(2,1,1)plot(w1/pi,20*log10(abs(hn)gridxlabel(频率w);ylabel(幅
8、度/db);subplot(2,1,2)plot(w1/pi,angle(hn)gridxlabel(频率w);ylabel(相位/rad);y=cos(2*pi*80*t)y=filter(hh2,1,x);% 滤波y(1:ceil(N/2)=;% 群延时N/2,删除无用信号部分L=length(y);N=2(nextpow2(L);Hw_2=fft(y,N);figure(3);subplot(2,1,1);plot(t(1:L),y);grid on;title(y=cos(2*pi*80*t);xlabel(时间/s);subplot(2,1,2);plot(0:N-1)*fs/L,a
9、bs(Hw_2);% 查看信号频谱grid on;title(滤波后信号y频谱图);xlabel(频率/Hz);ylabel(振幅|H(ejw)|);4.2结果分析 实验的第一幅图是滤波器的频率、相位图,第二幅是产生的原始信号的图,后一幅图是滤波后的图,从图上的信号变化可以看出,基本以达到滤波的要求,达到实验目的。结果的不理想可能是在选取参数上有些不同。5总结 本次课程设计对我的收获是很大的,经过两天的自我学习及设计滤波器,让我对滤波器有了更深刻的了解,编程中的错误也为我敲响了我的失误点,让我及时改正,编程的不断修改和完善,是对知识了解的一种透彻表现。对不懂得函数查资料,也是一种对知识了解得渴望。本次课题的顺利完成对我的学习起到了很大的推进作用。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2