第27卷第3期 长春工业大学学报(自然科学版) Vol.27,No.3 2006年9月 JournalofChangchunUniversityofTechonology(NaturalScienceEdition) Sep.2006 文章编号:1006-2939(2006)03-0254-04
基于Matlab的FIR数字滤波器的设计
丁 吉, 姜 涛
1
2
(1.吉林大学机械科学与工程学院,吉林长春 130022;2.长春工业大学机电工程学院,吉林长春 130012)
摘 要:介绍了应用Matlab语言设计FIR数字滤波器时采用的两种方法直接程序设计法和使用FDA-
tool界面的设计法,同时介绍了FIR数字滤波器几种设计方法的函数调用格式;通过实例,给出了程序设计法和使用信号处理工具箱中的FDAtool界面进行设计的详细步骤,并在Matlab的Simulink环境下,对所设计的滤波器进行了仿真。
关键词:数字滤波器;Matlab;有限长冲击响应;FDAtool中图分类号:TP311.11 文献标识码:A
0 引 言
随着计算机技术和集成电路技术的发展,数字信号处理以其方便、灵活的特点,越来越引起人们的重视。数字滤波器是数字信号处理的重要内容,数字滤波器的设计已成为数字信号处理研究中的热点之一。
应用Matlab语言可以快捷地设计出由软件组成的数字滤波器,很容易通过对参数的修改进行性能的优化。FIR滤波器(即有限长冲击响应滤波器,FiniteImpulseResponseDigitalFilter)最大的优点就是在满足幅频特性的同时,还可以获得严格的线性相位特性,这使它在语音处理、图像处理等要求高保真的数字信号处理中显得十分重要。
[1]
FIR数字滤波器系统的传递函数为:
H(z)=Y(z)=∑b(n)z-n
X(z)n=0
由此得到系统的差分方程:
y(n)=b(0)x(n)+b(1)x(n-1)+…+
b(N-1)x[n-(N-1)]
若FIR数字滤波器的单位脉冲响应序列为h(n),它就是滤波器系数向量b(n)。
应用Matlab设计FIR滤波器的主要任务就是根据给定的性能指标,设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。
[2]
N-1
1 FIR数字滤波器的设计原理
滤波器就是在时间域或频域内,对已知激励,产生规定响应的网络,使其能够从信号中提取并放大有用的信号,抑制并衰减不需要的信号。数字滤波器的设计,实质上就是对提出的设计要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性,逼近给出的频率响应特性。设计完成后,可根据计算结果在FPGA或DSP上实现。
2 FIR数字滤波器的直接程序设计法
FIR滤波器的主要设计方法有窗函数法、最优化设计法及约束最小二乘逼近法。在滤波器传统设计中,要得到其幅频和相频响应特性,需要根据这些方法进行大量的计算,这使得滤波器的设计缓慢,周期变长,不利于设计的优化。Matlab信号处理工具箱中提供了基于滤波器设计方法的工具函数,编程中可根据设计要求直接调用相应的函数,方便快捷,见表1。
[3]
收稿日期:2006-04-21
作者简介:丁 吉(1978-),男,吉林长岭人,中国人民空军航空大学助教,吉林大学硕士研究生,主要从事
微型电液一体化系统研究.
第3期 丁 吉,等:基于Matlab的FIR数字滤波器的设计
表1 FIR数字滤波器设计方法及函数调用格式
设计方法窗函数法
调用函数fir1fir2firlsremezremezordfircls
约束最小二乘法
fircls1
b=fircls1(n,wo,dp,ds)
调用格式
b=fir1(n,Wn)b=fir2(n,f,m)b=firls(n,f,a)
b=remez(n,f,a,w)[n,fo,ao,w]=remezord(f,a,dev)b=fircls(n,f,a,up,lo)
说 明
n为阶数;Wn为截止频率。
f,m为期望幅频响应的频率向量和幅值向量。
255
最优化设计法
两者仅算法不同,f为频率点向量,n为指定频率点幅度响应,w为权系数。
fo为归一化频率边界,ao为频带内幅值,w为权向量。
up,lo为每个频带上边界和下边界频率,f,a为期望幅频特性的频率向量和幅值向量。
wo为截止频率,dp为离幅值1的最大偏差,ds为阻带离幅值0的最大偏差。
下面通过一个实例来说明如何用程序法设计滤波器。
例1 要求设计一个最小阶数的低通滤波器,采样频率fs=2000Hz,通带截止频率为500Hz,阻带的截至频率为600Hz,阻带最小衰减为40dB,通带的最大衰减为3dB。
在设计之前,首先要确定使用什么样的方法进行设计,本例选用等波纹的最优化设计法。在Matlab命令窗口直接键入程序代码,即可得到所设计的滤波器。程序代码
rp=3;rs=40;f=[500600];a=[10];20)];
[n,fo,ao,w]=remezord(f,a,dev,fs);
b=remez(n,fo,ao,w);%调用最优设计法中remez函数freqz(b,1,1024,fs)
[4]
在设计中,如果该滤波器的特性不满足要求,
那么,原有参数必须作适当调整。这在程序中很容易实现,只需对参数进行重新设定,就可以得到新条件下滤波器的特性。
在实际应用中,如果需要对某一信号源进行特定的滤波,并要检验滤波效果,应用传统方法实施起来比较繁琐。在Matlab环境下,可先用软件模拟产生信号源,再设计滤波器对其进行滤波,如下面的实例。
例2 有一个采样频率为1000Hz的信号源,sin(30πt)+0.5*sin(180πt)+0.2*sin(600πt),应用约束最小二乘法设计一个带通滤波器,通带为[0.20.4],对该信号进行滤波。 该问题的解决,可先在Matlab中直接输入波型函数产生信号源,再用约束最小二乘法的fircls函数设计滤波器,对其滤波。Fircls函数的设置参照表1。程序如下:
t=0:1/1000:1;
sig=sin(2*pi*15*t)+0.5*sin(2*pi*90*t)+0.2*sin(2*pi*300*t);plot(t,sig); %输出信号源
n=50; %设计滤波器,阶数定为50f=[00.20.41];a=[010];
up=[0.021.020.01];lo=[-0.020.98-0.01]b=fircls(n,f,a,up,lo);newsig=fftfilt(b,sig);figure
ft=t(301:350);ns=newsig(301:350);zns=interp(ns,12);znt=interp(ft,12);
及注释如下:
fs=2000; %采样频率
%通带波纹%阻带波纹%截止频率%期望的幅度
dev=[(10^(rp/20)-1)/(10^(rp/20)+1)10^(-rs/
程序运行后,计算机输出该滤波器的幅频及相频响应特性,如图1所示。
图1 滤波器输出的幅频及相频响应特性plot(znt,zns)256
长春工业大学学报(自然科学版) 第27卷
程序运行后,计算机将输出信号源的波形图及滤波后的效果图,这两个图将在后面给出。下面给出该程序中滤波器的幅频及相频响应特性,如图2所示。
器;接着在FIR中选择Equiripple(等波纹)法。然后在FilterOrder中选择MinimumOrder(最小阶数),这时,Matlab程序会根据所选择的滤波器类型自动使用最小阶数。在FrenquencySpec-ification(频率设定)选项中,将fs(采样频率)、fpass(通带截止频率)、fstop(阻带截止频率)中分别键入2000Hz,500Hz,600Hz。再对MagnitudeSpecification(幅度设定)进行设定,使Apass(通带波纹)=3dB;Astop(阻带衰减)=40dB,最后点击下方的DesignFilter(滤波器设计)即可得到所设计的FIR滤波器。设计完成后,可以通过菜单选项Analysis来分析滤波器的幅频响应、相频响应特性。点击Analysis中的MagnitudeResponse和PhaseResponse对幅频和相频响应进行分析,其输出的幅频及相频响应特性结果与图1相同。
例2的设置方法与上面基本相同,滤波器类型选择Bandpass(带通),FIR选择constr-least,阶数定为50,fc1=0.2,fc2=0.4,这里不再详述。
图2 滤波器输出的幅频及相频响应特性性
3 利用FDATool界面的设计法
3.1 FDAtool界面简介
FDAtool(FilterDesign&AnalysisTool)是Matlab中专门用于滤波器设计和分析的工具。界面的上半部分为特性区,用来显示滤波器的各
种特性。下半部分为参数设定区。
FilterType(滤波器类型):选项包括Low-pass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和Differentiator(特殊)。
DesignMethod(设计方法):可选择IIR滤波器或FIR滤波器,其中FIR中包括Equiripple(等波纹)、Least-Squares(最小二乘)及Window(窗函数)法等。
FilterOrder(滤波器阶数):选项包括Speci-fyOrder(指定阶数)和MinimumOrder(最小阶数)。
FrenquencySpecification(频率设定):用于设定频带的各个参数,其具体选项由前面所设计的滤波器类型和设计方法决定。
MagnitudeSpecification(幅值设定):可以具体定义幅值的衰减情况。
3.2 利用FDAtool界面设计FIR数字滤波器方法 采用FDAtool界面对图1中的实例进行设计,步骤如下:
首先在命令窗口键入FDAtool命令,调出FDAtool界面,在FilterType选项中选择Low-pass(低通);在DesignMethod中选择FIR滤波4 基于信号处理的Simulink仿真
Matlab中提供了功能强大的Simulink仿真软件。在Simulink环境下,可以对所设计的滤波
器性能进行仿真,实时观测滤波效果。Simulink中包含大量数字信号处理的功能模块,可先调用相应模块组成仿真框图。由于篇幅所限,文中以与实际应用较接近的(例2)为例,对其进行性能仿真,如图3所示。
图3 Simulink环境下的滤波仿真图
从图3可以看出,先调用三个正弦波模块,产生sin(30πt),0.5*sin(180πt),0.2*sin(600πt)三个基本波型,经过加法器(add)混合后产生波源,将图3中所设计的滤波器(例2)导入FDA-tool中,信号经滤波后输送到Scope1中显示。点击Simulink的start按钮,开始仿真。可以双击Scope1,Scope图框,打开示波器界面放于屏幕左上角,实时观测信号源波型及滤波后的效果。示波器输出的波形如图4和图5所示。第3期 丁 吉,等:基于Matlab的FIR数字滤波器的设计
257
计时,采用直接程序设计法和利用FDAtool界面的设计法都可以快捷有效地完成滤波器的设计。通过实例可以看出,这两种方法最大的优点是都可以通过改变参数来得到新条件下滤波器的特性,便于对比,进而能达到设计的最优化。但比较起来,应用FDAtool避免了相对复杂的编程,较为直观、方便,还可以直接调入到Simulink仿真
图4 输入信号波形图(scope)
模块中进行实时仿真,具有更强的交互性。在对数字滤波器的设计中,Matlab显示了其强大的计算功能,必然在以后的数字信号处理中,展现更为广阔的应用前景。参考文献:
[1] 丁玉美,高西全.数字信号处理[M].西安:西安电
子科技大学出版社,2005.
[2] 黄文梅.信号分析与处理[M].长沙:国防科技大
学出版社,2000.
[3] 楼顺天,李伯菡.基于MATLAB的系统分析与设
计[M].西安:西安电子科技大学出版社,1999.[4] 罗军辉,罗勇江.MATLAB在数字信号处理中的应
用[M].北京:机械工业出版社,2005.
图5 滤波后输出信号波形图(scope1)
从图5可以看出,有正弦波叠加所产生的信号源,经带通滤波器滤波后,其它波形得到了有效
滤除,达到了期望的效果。
5 结 论
应用Matlab语言进行FIR数字滤波器的设
DesignofFIRdigitalfilterbasedonMatlab
DINGJi1, JIANGTao2
(1.CollegeofMechanicalScienceandEngineering,JilinUniversity,Changchun130022,China;2.SchoolofMechatronicEngineering,ChangchunUniversityofTechnology,Changchun130012,China)
Abstract:TwomethodsfordesigningtheFIRdigitalfilterbasedonMatlabareintroducedheredirectprogrammingandtheoneusingFDAtoolinterface.TheformsofthefunctioncalledfromMatlabaredemonstrated.ThedetailedstepsforboththeprogrammethodandtheonewithFDAtoolinterfaceinsignalprocessingtoolbox,withanexample,aregivenalso.ThedigitalfilterissimulatedunderSimulink/Matlab.
Keywords:digitalfilter;Matlab;FIR;FDAtool.