基于Matlab的FIR数字滤波器的设计
- 格式:pdf
- 大小:844.86 KB
- 文档页数:4
第27卷第3期 长春工业大学学报(自然科学版) Vol127,No.3 2006年9月 JournalofChangchunUniversityofTechonology(NaturalScienceEdition) Sep12006
文章编号:100622939(2006)0320254204
基于Matlab的FIR数字滤波器的设计
丁 吉1, 姜 涛2
(1.吉林大学机械科学与工程学院,吉林长春 130022;2.长春工业大学机电工程学院,吉林长春 130012)
摘 要:介绍了应用Matlab语言设计FIR数字滤波器时采用的两种方法直接程序设计法和使用FDA2tool界面的设计法,同时介绍了FIR数字滤波器几种设计方法的函数调用格式;通过实例,给出了程序设计法和使用信号处理工具箱中的FDAtool界面进行设计的详细步骤,并在Matlab的Simulink环境下,对所设计的滤波器进行了仿真。关键词:数字滤波器;Matlab;有限长冲击响应;FDAtool中图分类号:TP311.11 文献标识码:A
0 引 言
随着计算机技术和集成电路技术的发展,数
字信号处理以其方便、灵活的特点,越来越引起人
们的重视。数字滤波器是数字信号处理的重要内
容,数字滤波器的设计已成为数字信号处理研究
中的热点之一。
应用Matlab语言可以快捷地设计出由软件
组成的数字滤波器,很容易通过对参数的修改进
行性能的优化。FIR滤波器(即有限长冲击响应
滤波器,FiniteImpulseResponseDigitalFilter)
最大的优点就是在满足幅频特性的同时,还可以
获得严格的线性相位特性[1],这使它在语音处理、图像处理等要求高保真的数字信号处理中显得十
分重要。
1 FIR数字滤波器的设计原理
滤波器就是在时间域或频域内,对已知激励,产生规定响应的网络,使其能够从信号中提取并
放大有用的信号,抑制并衰减不需要的信号。数
字滤波器的设计,实质上就是对提出的设计要求
给出相应的性能指标,再通过计算,使物理可实现
的实际滤波器频率响应特性,逼近给出的频率响
应特性。设计完成后,可根据计算结果在FPGA或DSP上实现。FIR数字滤波器系统的传递函数为:
H(z)=Y(z)X(z)=∑N-1
n=0b(n)z-n
由此得到系统的差分方程:
y(n)=b(0)x(n)+b(1)x(n-1)+…+
b(N-1)x[n-(N-1)]
若FIR数字滤波器的单位脉冲响应序列为
h(n),它就是滤波器系数向量b(n)[2]。
应用Matlab设计FIR滤波器的主要任务就
是根据给定的性能指标,设计一个H(z),使其逼
近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作
为输出,与设计要求进行比较,对设计的滤波器进
行优化。
2 FIR数字滤波器的直接程序设计法
FIR滤波器的主要设计方法有窗函数法、最
优化设计法及约束最小二乘逼近法。在滤波器传
统设计中,要得到其幅频和相频响应特性,需要根
据这些方法进行大量的计算,这使得滤波器的设
计缓慢,周期变长,不利于设计的优化。Matlab信号处理工具箱中提供了基于滤波器设计方法的
工具函数[3],编程中可根据设计要求直接调用相应的函数,方便快捷,见表1。
收稿日期:2006204221作者简介:丁 吉(1978-),男,吉林长岭人,中国人民解放军空军航空大学助教,吉林大学硕士研究生,主要从事微型电液一体化系统研究.
© 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net表1 FIR数字滤波器设计方法及函数调用格式设计方法调用函数调用格式 说 明
窗函数法fir1b=fir1(n,Wn)n为阶数;Wn为截止频率。
fir2b=fir2(n,f,m)f,m为期望幅频响应的频率向量和幅值向量
。
最优化设计法firlsremezb=firls(n,f,a)b=remez(n,f,a,w)两者仅算法不同,f为频率点向量,n为指定频率点幅度响应,w为权系数。
remezord[n,fo,ao,w]=remezord(f,a,dev)fo为归一化频率边界,ao为频带内幅值,w为权向量
。
约束最小二乘法firclsb=fircls(n,f,a,up,lo)up,lo为每个频带上边界和下边界频率,f,a为期望幅频特性的频率向量和幅值向量。
fircls1b=fircls1(n,wo,dp,ds)wo为截止频率,dp为离幅值1的最大偏差,ds为阻带离幅值0的最大偏差。
下面通过一个实例来说明如何用程序法设计
滤波器。
例1 要求设计一个最小阶数的低通滤波
器,采样频率fs=2000Hz,通带截止频率为
500Hz,阻带的截至频率为600Hz,阻带最小衰减为40dB,通带的最大衰减为3dB。
在设计之前,首先要确定使用什么样的方法
进行设计,本例选用等波纹的最优化设计法。在
Matlab命令窗口直接键入程序代码,即可得到所设计的滤波器。程序代码[4]及注释如下:fs=2000; %采样频率rp=3;%通带波纹rs=40;%阻带波纹f=[500600];%截止频率a=[10];%期望的幅度dev=[(10^(rp/20)-1)/(10^(rp/20)+1)10^(-rs/20)];[n,fo,ao,w]=remezord(f,a,dev,fs);b=remez(n,fo,ao,w);%调用最优设计法中remez函数freqz(b,1,1024,fs)程序运行后,计算机输出该滤波器的幅频及
相频响应特性,如图1所示。
图1 滤波器输出的幅频及相频响应特性 在设计中,如果该滤波器的特性不满足要求,那么,原有参数必须作适当调整。这在程序中很
容易实现,只需对参数进行重新设定,就可以得到
新条件下滤波器的特性。
在实际应用中,如果需要对某一信号源进行
特定的滤波,并要检验滤波效果,应用传统方法实
施起来比较繁琐。在Matlab环境下,可先用软件
模拟产生信号源,再设计滤波器对其进行滤波,如
下面的实例。
例2 有一个采样频率为1000Hz的信号
源,sin(30πt)+0.53sin(180πt)+0.23
sin(600πt),应用约束最小二乘法设计一个带通滤波器,通带为[0.20.4],对该信号进行滤波。
该问题的解决,可先在Matlab中直接输入波
型函数产生信号源,再用约束最小二乘法的fircls函数设计滤波器,对其滤波。Fircls函数的设置
参照表1。程序如下:t=0:1/1000:1;sig=sin(23pi3153t)+0.53sin(23pi3903t)+0.23sin(23pi33003t);
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);figureft=t(301:350);ns=newsig(301:350);zns=interp(ns,12);znt=interp(ft,12);plot(znt,zns)552第3期 丁 吉,等:基于Matlab的FIR数字滤波器的设计
© 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 程序运行后,计算机将输出信号源的波形图
及滤波后的效果图,这两个图将在后面给出。下
面给出该程序中滤波器的幅频及相频响应特性,如图2所示。
图2 滤波器输出的幅频及相频响应特性性
3 利用FDATool界面的设计法
3.1 FDAtool界面简介
FDAtool(FilterDesign&AnalysisTool)是
Matlab中专门用于滤波器设计和分析的工具。
界面的上半部分为特性区,用来显示滤波器的各
种特性。下半部分为参数设定区。
FilterType(滤波器类型):选项包括Low2
pass(低通)、Highpass(高通)、Bandpass(带通)、
Bandstop(带阻)和Differentiator(特殊)。
DesignMethod(设计方法):可选择IIR滤
波器或FIR滤波器,其中FIR中包括Equiripple(等波纹)、Least2Squares(最小二乘)及Window(窗函数)法等。
FilterOrder(滤波器阶数):选项包括Speci2
fyOrder(指定阶数)和MinimumOrder(最小阶
数)。
FrenquencySpecification(频率设定):用于
设定频带的各个参数,其具体选项由前面所设计
的滤波器类型和设计方法决定。
MagnitudeSpecification(幅值设定):可以具
体定义幅值的衰减情况。
3.2 利用FDAtool界面设计FIR数字滤波器方法
采用FDAtool界面对图1中的实例进行设
计,步骤如下:首先在命令窗口键入FDAtool命令,调出
FDAtool界面,在FilterType选项中选择Low2
pass(低通);在DesignMethod中选择FIR滤波器;接着在FIR中选择Equiripple(等波纹)法。
然后在FilterOrder中选择MinimumOrder(最
小阶数),这时,Matlab程序会根据所选择的滤波器类型自动使用最小阶数。在FrenquencySpec2
ification(频率设定)选项中,将fs(采样频率)、
fpass(通带截止频率)、fstop(阻带截止频率)中分别键入2000Hz,500Hz,600Hz。再对Magnitude
Specification(幅度设定)进行设定,使Apass(通带波纹)=3dB;Astop(阻带衰减)=40dB,最后点击下方的DesignFilter(滤波器设计)即可得到所设
计的FIR滤波器。设计完成后,可以通过菜单选
项Analysis来分析滤波器的幅频响应、相频响应特性。点击Analysis中的MagnitudeResponse和PhaseResponse对幅频和相频响应进行分析,其输出的幅频及相频响应特性结果与图1相同。
例2的设置方法与上面基本相同,滤波器类
型选择Bandpass(带通),FIR选择constr2least,阶数定为50,fc1=0.2,fc2=0.4,这里不再详述。
4 基于信号处理的Simulink仿真
Matlab中提供了功能强大的Simulink仿真
软件。在Simulink环境下,可以对所设计的滤波器性能进行仿真,实时观测滤波效果。Simulink中包含大量数字信号处理的功能模块,可先调用相应模块组成仿真框图。由于篇幅所限,文中以
与实际应用较接近的(例2)为例,对其进行性能
仿真,如图3所示。
图3 Simulink环境下的滤波仿真图
从图3可以看出,先调用三个正弦波模块,产
生sin(30πt),0.53sin(180πt),0.23sin(600πt)