数字信号处理课程设计窗函数法设计FIR数字滤波器.docx
《数字信号处理课程设计窗函数法设计FIR数字滤波器.docx》由会员分享,可在线阅读,更多相关《数字信号处理课程设计窗函数法设计FIR数字滤波器.docx(10页珍藏版)》请在冰豆网上搜索。
数字信号处理课程设计窗函数法设计FIR数字滤波器
摘要:
实现数字化是控制系统的重要发展方向,而数字信号处理已在通信、语音、图像、自动控制、雷达、军事、航空航天等领域广泛应用。
数字信号处理方法通常涉及变换、滤波、频谱分析、编码解码等处理。
数字滤波是重要环节,它能满足滤波器对幅度和相位特性的严格要求,克服模拟滤波器所无法解决的电压和温度漂移以及噪声等问题。
而有限冲激响应FIR滤波器在设计任意幅频特性的同时能够保证严格的线性相位特性。
利用FPGA可以重复配置高精度的FIR滤波器,使用VHDL硬件描述语言改变滤波器的系数和阶数,并能实现大量的卷积运算算法。
结合MATLAB工具软件的辅助设计,使得FIR滤波器具有快速、灵活、适用性强,硬件资源耗费少等特点。
关键字:
FIR;滤波器;窗函数法;等波纹最佳逼近法
一、绪论
在许多数字信号处理系统中,FIR滤波器是最常用的组件之一,它完成信号预调、频带选择和滤波等功能。
FIR滤波器在截止频率的边沿陡峭性能虽然不及IIR滤波器,但是,考虑到FIR滤波器严格的线性相位特性和不像IIR滤波器存在稳定性的问题,FIR滤波器能够在数字信号处理领域得到广泛的应用。
FIR是有限冲激响应(FiniteImpulseResponse)的简称。
由线性系统理论可知,在某种适度条件下,输入到线性系统的一个冲击完全可以表征系统。
当我们处理有限的离散数据时,线形系统的响应(包括对冲击的响应)也是有限的。
若线性系统仅是一个空间滤波器,则通过简单地观察它对冲击的响应,我们就可以完全确定该滤波器。
通过这种方式确定的滤波器称为有限冲击响应(FIR)滤波器。
FIR滤波器是在数字信号处理(DSP)中经常使用的两种基本的滤波器之一,另一个为IIR滤波器。
IIR滤波器是无限冲激响应滤波器。
二、FIR滤波器设计原理
FIR低通数字滤波器的设计原理是:
如果系统的冲激响应
为已知,则系统的输入/输出关系为:
对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。
假设所希望的数字滤波器的频率响应为
,它是频域的周期函数,周期为2
,那么它与
相对应的傅立叶系数为
以
为冲激响应的数字滤波器将具有频域响
。
但是将
作为滤波器脉冲响应有两个问题:
(1)它是无限长的,与FIP滤波器脉冲响应有限长这一前提不一致
(2)它是非因果的,
对此,要采取以下的措施:
(1)将
截短;
(2)将其往右平移,由此得到
的实际频域响应
,与理想频域响应
相近,但不完全一致。
理论证明上述现象是对
进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对
进行加窗截取,即以
作为FIR滤波器的系数。
三、FIR滤波器的设计及仿真
3.1信号X(t)的产生
(1)调用信号产生函数xtg产生混有高频噪声的抑制载波单频调幅信号x(t),该函数还会自动绘图显示x(t)的时域波形和幅频特性曲线,如下图所示。
由图可见,有用信号与噪声在时域混叠无法在时域分离。
但频域是分离的,所以,可以通过滤波的方法在频域分离。
抑制载波单频调幅信号的数学表示式为
其中,
称为载波,fc为载波频率,
称为单频调制信号,f0为调制正弦波信号频率,且满足
。
由上式可见,所谓抑制载波单频调幅信号,就是2个正弦信号相乘,它有2个频率成分:
和频
和差频
,这2个频率成分关于载波频率fc对称。
(1)程序
functionxt=xtg(N)
%信号x(t)产生函数,并显示信号的时域波形和幅频特性曲线
%xt=xtg(N),产生长度为N,有加性高频噪声的单频调幅信号
%采用频率Fs=1000Hz,载波频率fc=Fs/10=100Hz,调制余弦信号的频率%f0=fc/10=10Hz
%N=2000;
Fs=1000;T=1/Fs;Tp=N*T;
t=0:
T:
(N-1)*T;
fc=Fs/10;f0=fc/10;
mt=cos(2*pi*f0*t);
ct=cos(2*pi*fc*t);
xt=mt.*ct;
nt=2*rand(1,N)-1;%产生均匀分布噪声
%设计高通滤波器hn用于滤除噪声nt中的低频成分,产生高频噪声
fp=150;fs=120;Rp=0.1;As=70;
fb=[fs,fp];m=[0,1];
dev=[10^(-As/20),(10^(Rp/20)-1)/(10^(Rp/20)+1)];
[n,f0,m0,W]=remezord(fb,m,dev,Fs);
hn=remez(n,f0,m0,W);
yt=filter(hn,1,10*nt);
%加噪声
xt=xt+yt;
%求FFT
fst=fft(xt,N);
%绘图
k=0:
N-1;f=k/Tp;
subplot(3,1,1);
plot(t,xt);
grid;xlabel('t/s');
ylabel('x(t)');
axis([0,Tp/5,min(xt),max(xt)]);
title('信号加噪声波形')
subplot(3,1,2);
plot(f,abs(fst)/max(abs(fst)));
grid;title('信号加噪声的频谱')
axis([0,Fs/2,0,1.2]);
xlabel('f/Hz');
ylabel('幅度')
(2)波形
3.2窗函数及等波纹最佳逼近法设计
根据滤波器技术指标选择合适的窗函数,计算窗函数长度N,编程序调用MATLAB滤波器设计函数设计FIR低通滤波器,并利用设计出的低通滤波器对x(t)进行滤波处理,绘制滤波器频率响应特性曲线和滤波器输出信号的幅频特性曲线和时域波形。
滤波器技术指标不变,改用等波纹最佳逼近法设计FIR数字滤波器,并比较两种设计方法设计的滤波器的阶数。
(1)程序
clearall;closeall;
N=1000;xt=xtg(N);
fp=120;fs=150;
Rp=0.1;As=70;Fs=1000;
%窗函数设计法
wc=(fp+fs)/Fs;
B=2*pi*(fs-fp)/Fs;
Nb=ceil(11*pi/B);
hn=fir1(Nb-1,wc,blackman(Nb));
%Hw=abs(fft(hn,1024));
[Hw,f]=freqz(hn,1,1024,Fs);
ywt=fftfilt(hn,xt,N);
disp('Nb=')
Nb
T=1/Fs;Tp=N*T;
t=0:
T:
(N-1)*T;
figure;
subplot(2,1,1);plot(t,ywt);
grid;xlabel('t/s');
ylabel('yw(t)');
axis([0,Tp,min(ywt),max(ywt)]);
title('滤除噪声后的信号波形----ywt')
%k=0:
1024-1;f=k/Tp;
subplot(2,1,2);
plot(f(1:
1024),20*log10(abs(Hw(1:
1024))));
grid;title('信号加噪声的频谱---窗函数设计法')
axis([0,Fs/2,-120,5]);
xlabel('f/Hz');
ylabel('幅度')
%等波纹最佳逼近法
fb=[fp,fs];m=[1,0];
dev=[(10^(Rp/20)-1)/(10^(Rp/20)+1),10^(-As/20)]
%[Ne,f0,m0,W]=remezord(fb,m,dev,Fs);
%Ne=Ne+1;
%hn=remez(Ne,f0,m0,W);
[Ne,fo,mo,w]=firpmord(fb,m,dev,Fs);
hn=firpm(Ne,fo,mo,w);
yet=fftfilt(hn,xt,N);
[Hw,f]=freqz(hn,1,1024,Fs);
disp('Ne=')
Ne
%Hw=abs(fft(hn,1024));
T=1/Fs;Tp=N*T;
t=0:
T:
(N-1)*T;
figure;
subplot(2,1,1);
plot(t,yet);
grid;xlabel('t/s');
ylabel('yw(t)');
axis([0,Tp,min(yet),max(yet)]);
title('滤除噪声后的信号波形--yet')
%k=0:
1024-1;f=k/Tp;
subplot(2,1,2);
plot(f(1:
1024),20*log10(abs(Hw(1:
1024))));
grid;title('信号加噪声的频谱----等波纹最佳逼近法')
axis([0,Fs/2,-120,5]);
xlabel('f/Hz');
ylabel('幅度')
(2)波形
如下图
(1)为窗函数法设计滤波器仿真出的波形,图
(2)为等波纹最佳逼近法设计滤波器仿真出的波形。
图
(1)
图
(2)
四、结果分析
通过观察上述两种方法所仿真出来的FIR滤波器的波形及比较两种设计方法设计的滤波器的阶数,我们可以看到窗函数法设计的阶数为184,而等波纹最佳逼近法设计的阶数为58。
因此,等波纹最佳逼近法设计FIR滤波器比窗函数法设计FIR滤波器要好。
致谢
在这次课程设计中,感谢杨亚东老师给我的帮助与指导,使得我进一步了解到了实践与理论相结合的重要性,这对我以后的学习和工作都是一种巨大的帮助。
通过老师的帮助,使我看到了自己的缺点并及时的发现并改正错误,使自己获得了很多的技巧和经验,更好的培养了我的动手能力和理论分析能力。
在这里再次感谢老师的指导!
参考文献
[1]周耀华,汪凯仁.数字信号处理[M].上海:
复旦大学出版社.1992.
[2]赵琳,王树伟,邢帆,基于MATLAB的数字滤波器设计方法研究[J].产业与科技论坛,2008.
[3]楼顺天,李博涵,基于MATLAB的系统分析与设计-信号处理[M].西安:
西安电子科技大学出版社,1998.
[4]阎晓艳,傅丰林等.FIR数字滤波器的设计及其在MATLAB中的仿真实现[J].西安,西安电子科技大学出版社,2004.