基于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)