窗函数设计FIR滤波器.docx
《窗函数设计FIR滤波器.docx》由会员分享,可在线阅读,更多相关《窗函数设计FIR滤波器.docx(11页珍藏版)》请在冰点文库上搜索。
窗函数设计FIR滤波器
(式3.2.1)
由于
是矩形频率响应特性,故
一定是无限长序列,且是非因果的,而FIR滤波器的
必然是有限长的,所以要用有限长的
来逼近无限长的
,最有效的方法是截断
或者说用一个有限长度的窗口函数序列
来截取
,即
(式3.2.2)
因而窗函数序列的形状及长度的选择就是关键。
我们以一个截止频率为
的线性相位的理想矩形幅度特性的低通滤波器为例来讨论。
设低通特性的群延时为
,即
(式3.2.3)
这表明,在通带
≤
范围内,
的幅度是均匀的,其值为1,相位是
。
利用
(1)式可得
(式3.2.4)
是中心点在
的偶对称无限长非因果序列,要得到有限长的
,一种最简单的方法就是取矩形窗
,即
但是按照线形相位滤波器的约束,
必须是偶对称的,对称中心应为长度的一半(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.2.12)
则其幅度函数为
(式3.2.13)
波器;
调用格式:
b=fir1(N,Wn);
b=fir1(N,Wn,‘high’);
b=fir1(N,Wn,‘stop’);
参数说明:
N:
阶次,滤波器长度为N+1;
Wn:
通带截止频率,其值在0~1之间,1对应Fs/2;
b:
滤波器系数。
在上述所有格式中,若不指定窗函数的类型,fir1自动选择Hamming窗。
2)fir2:
用来设计具有任意幅度响应的FIR滤波器。
调用格式:
b=fir2(N,F,M);
参数说明:
F是频率向量,其值在0~1之间;
M是和F相对应的所希望的幅频相应。
如同fir1,缺省时自动选用Hamming窗。
3)为了观测到设计出来的滤波器的特性,用freqz得到频率响应。
其中在画频率响应的时候我们分为幅度和相位画出。
又因为我们要观测的是衰减的大小程度,以dB为单位,所以我们在画幅度的时候纵坐标应该转换成dB。
4)为了观测是否滤除已知频率,用filte(b,1,a)函数来实现,对信号的滤波实验。
3.6实验所用MATLAB函数说数
1[H,w]=freqz(b,a,N)
b和a分别为离散系统的系统函数分子、分母多项式的系数向量,返回量H则包含了离散系统频响在0~pi范围内N个频率等分点的值(其中N为正整数),w则包含了范围内N个频率等分点。
调用默认的N时,其值是512。
可以先调用freqz()函数计算系统的频率响应,然后利用abs()和angle()函数及plot()函数,绘制出系统的频响曲线。
2Wn=kaiser(N,beta)
列向量wn中返回长度为N的凯塞——贝塞尔窗函数w(n)。
3ceil(x)
是取大于等于x的最小整数。
4fir1
使用窗函数法设计线性相位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*120*t);
L=length(x);N=2^(nextpow2(L));Hw=fft(x,N);
figure
(2);subplot(2,1,1);plot(t,x);
gridon;title('滤波前信号x');xlabel('时间/s');%原始信号
subplot(2,1,2);plot((0:
N-1)*fs/L,abs(Hw));%查看信号频谱
gridon;title('滤波前信号频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
Ap=0.25;As=20;%定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/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)))
grid
xlabel('频率w');ylabel('幅度/db');
subplot(2,1,2)
plot(w1/pi,angle(hn))
grid
xlabel('频率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);
gridon;title('y=cos(2*pi*80*t)');xlabel('时间/s');
subplot(2,1,2);plot((0:
N-1)*fs/L,abs(Hw_2));%查看信号频谱
gridon;title('滤波后信号y频谱图');xlabel('频率/Hz');ylabel('振幅|H(e^jw)|');
4.2结果分析
实验的第一幅图是滤波器的频率、相位图,第二幅是产生的原始信号的图,后一幅图是滤波后的图,从图上的信号变化可以看出,基本以达到滤波的要求,达到实验目的。
结果的不理想可能是在选取参数上有些不同。
5总结
本次课程设计对我的收获是很大的,经过两天的自我学习及设计滤波器,让我对滤波器有了更深刻的了解,编程中的错误也为我敲响了我的失误点,让我及时改正,编程的不断修改和完善,是对知识了解的一种透彻表现。
对不懂得函数查资料,也是一种对知识了解得渴望。
本次课题的顺利完成对我的学习起到了很大的推进作用。