1DSP课程设计学院:昆仑学院班级:10级电气(2)班姓名:柴智博2FIR数字滤波器的MATLAB设计与DSP实现摘要:针对有限长冲激响应(FIR)数字滤波器的原理,讨论了窗函数法设计线性相位FIR数字滤波器的基本思路,介绍了用MATLAB工具来设计数字滤波器的方法及在定点DSP上的实现。通过CCS5000开发工具和在DES3200实验箱上运行,实现了达到目标要求的滤波器。关键词:matlab;fir;dsp;ccs开发环境1、引言随着信息和数字技术的发展,数字信号处理已成为当今极其重要的学科和技术领域之一通信语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中,滤波是应用非常广泛的一个环节,数字滤波器的理论与相关设计也一直都是人们研究的重点之一。数字滤波器根据其冲激响应函数的时域特性,可分为无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。其中FIR滤波器具有严格的相位特性,同时系统函数的极点固定在原点上,因而该类型的滤波器是稳定的。滤波器的设计方法主要有窗函数法、频率取样法和最优线性相位设计法。其中窗函数设计方法由于其运算简便、物理意义直观,已成为工程实际中应用最广泛的方法,本文从FIR数字滤波器的原理与基本设计步骤出发,对FIR数字滤波器在MATLAB中的仿真与设计的基本思路做了阐述,并在定点DSP上实现了满足要求的FIR滤波器。3目录1、滤波器基本原理..........................................................31.1数字滤波器的基本概念..................................................31.2FIR滤波器的基本结构..................................................31.3FIR滤波器的主要特点..................................................41.4开发环境CCS简介......................................................42、数字滤波器的设计........................................................62.1数字滤波器MATLAB设计的基本步骤.......................................62.2FIR数字滤波器的DSP实现..............................................82.3结论..................................................................93.心得体会...............................................................104.附录...................................................................10参考文献..................................................................1641、滤波器基本原理1.1数字滤波器的基本概念数字滤波器的设计问题就是寻找一组系数和,使得其性能在某种意义上逼近所要求的特性。如果在s平面上去逼近,就得到模拟滤波器,如果在z平面上去逼近,则得到数字滤波器。数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:其中x(n)为输入序列,y(n)为输出序列,和为滤波器系数,N为滤波器的阶数。1.2FIR滤波器的基本结构在式(1)中,若所有的均为0,则得FIR滤波器的差分方程:对(2)式是滤波器的差分方程,其一般形式为对(3)式进行变换,整理后可得FIR滤波器的传递函数FIR数字滤波器的设计方法主要有窗函数法和频率抽样设计法,其中窗函数法是基本而有效的计方法。由此可得到FIR滤波器的结构如图1所示。FIR滤波器的单位冲击响应h(n)是一个有限长序列。若h(n)为实数,且满足偶对称或奇对称的条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n),则FIR滤波器具有线性相位特性。51.3、FIR滤波器的主要特点1)单位冲击响应只有有限项;2)FIR滤波器无反馈回路,是一种无条件稳定系统;3)FIR滤波器可以设计成具有线性相位特性。1.4、开发环境CCS简介CCS是TI公司推出的为开发TMS320系列DSP软件的集成开发环境(IDE)。CCS工作在Windows操作系统下类似于vc++的集成开发环境采用图形接口界面提供编辑工具和工程管理工具的软件。CCS开发流程图如图所示应用设计编写代码调试分析与调整图2开发流程对于CCS的使用先应建立工程文件*.mak根据需要添加C语言源程序*.c汇编源程序*.asm链配置件文件*.cmd等可能需要的文件完成整个工程的建立然后对源文件编辑修改后进行汇编连接以生成目标文件*.out。对源文件每作一次修改都必须全部重新建立生成新的目标文件*.out接下来就可用CCS调试先让系统复位再载入*.out。调试的方式是多种多样的有单步执行多步执行单步跳出单步进入等还有断点设置和探测点设置在CCS环境下实现FIR滤波器的程序框图如图所示保存滤波结果到输出单元待滤波的样本点数(256点)处理完成?读入数据并存放到栈顶滤波处理产生输入数据初始化DSP6否是图3用循环寻址的方法FIR实现滤波器的程序框图从图3可知FIR滤波器DS实现包括4个部分:模拟输入数据的生成DSP初始化程序滤波系数以及输入数据的调入及滤波子程序其中模拟输入数据的生成可利用C语言编程实现用.COPY汇编命令将生成的数据文件拷贝到汇编程序中作为FIR滤波器的输入数据文中C语言程序运行后所生成的数据文件名为初始化程序包括了对堆栈指针(SP)软件等待状态寄存器(SWWSR)中断寄存器(IFR)中断屏蔽寄存器(IMR)以及处理器工作状态寄存器(PMST)的初始化另外还对各变量赋值由于滤波器系数一开始是存在程序存储器中输入数据则是存在程序外的文件中程序对这两组数据进行处理时需要把两者都调到数据存储器中这是滤波系数以及输入数据的调入部分的任务滤波子程序重复执行的次数一般等同于输入序列的长度实现对数据的读入处理输出等功能。2、数字滤波器的设计2.1数字滤波器matlab设计的基本步骤(1)确定指标在设计一个滤波器之前,必须首先根据工程实际需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度响应和相位响应。幅度指标主要以两种方式给出。第一是绝对指标,它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。它以分贝值的形式给出要求,在工程实际中,比较受到欢迎。对于相位响应指标形式,通常希望系统在通频带中仍然有线性相位。运用线性相位响应的指标进行滤波器设计具有如下优点①只包含实数算法,不涉及复数运算②不存在延迟失真,只有固定数量的延迟③长度为N的滤波器(阶数为N-1),计算7量为N/2数量级。(2)逼近确定了技术指标后,就可以建立一个目标的数字滤波器模型。通常采用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。(3)性能分析和计算机仿真上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求,或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。(4)窗函数法设计FIR滤波器的MATLAB仿真matlab是一套用于科学计算的可视化高性能语言与软件环境。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个界面友好的用户环境。它的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个优秀的算法研究与辅助设计的工具对于线性相位FIR滤波器通常采用窗函数法设计。窗函数设计滤波器的基本思想(1),就是从时域出发,把理想的无限长的hd(n)用一定形状的窗函数截取成有限长的h(n),以此h(n)来逼近hd(n),从而使所得到的频率响应与所要求的理想频率响应相接近。理想的数字滤波器Hd()频率特性是无法实现的,FIR的设计就是要寻找一个可以得到的频率特性来逼近Hd(,这相当于用一个可实现的单位脉冲响应h(n)去逼近一个理想单位脉冲响应hd(n)。要想用一个有限长的因果序列去逼近它,最简单的方法是截取n从0~N-1的一段来表示它,即h(n)=hd(n)(0≤n≤N-1);当n为其他的数时,h(n)=0。同时,为了保证线性相位,还要满足偶对称:h(n)=h(N-1-n),这就好像通过一个窗口观看到一段hd(n),因此h(n)就表示成hd(n)和一个“窗口函数”的乘积。这样,对h(n)的求解就变为:,这里的W(n)就称为窗口函数。窗口函数相当于对hd(n)在时域上截取一段,势必造成频域的矩形窗口的失真,结果就是截取出的信号也相应失真。为了补偿这种失真,只有改变原来窗口的形状,修正经过时域截取后的窗口失真。改善窗口函数的标准:(1)尽量减少窗口频谱的旁瓣,使能量集中在主瓣中,以减少波动的幅度和次数,提高阻带衰减。这样,主瓣就不能太窄;(2)主瓣的宽度应尽量窄,以得到尽量窄的过渡带。工程中常用的窗函数有以下六种(2):矩形窗,三角形窗(BartlettWindow),汉宁(Hanning)窗,汉明窗,布莱克曼(Blackman)窗,凯泽(Kaiser)窗。表1为六种窗函数的性能指标。图1和图2分别为64点的矩形窗函数的时频特性曲线和64的三角窗函数的时频特性曲线。①计算出64点的矩形窗函数并利用wvtool函数绘制出其时频特性。程序如下:N=64;y=rectwin(N);wvtool(y);8图4矩形窗函数时域和频域特性②计算出点的三角窗函数并利用函数wvtool绘制出其时频特性程序如下:N=64;y=triang(N);Wvtool(y);图5三角窗函数时域、频域特性③比如设计一个低通数字滤波器,采样频率Fs=8000HZ,要求:通带范围:0~1000HZ;带内波动:5%;阻带范围:1500HZ~4000HZ;带内最小衰减:Rs=40dB;9采用Kasier窗进行设计,程序如下:Fs=8000;Fctus=[10001500];Mags[10];Devs=[0.050.01];%给定频率点上幅度允许波动值利用Kaiser窗设计FIR滤波器前,需要先用函数kaiserord记进行有关参数计算[n,Wn,deta,ftype]=Kaiserord(fcuts,mags,devs,Fs);H=fir1(n,Wn,ftype,Kaiser(n+1,deta));Freqz(h);2.2FIR数字滤波器的DSP实现数字滤波器的实现方法一般有以下几种:①用加法器、乘法器、延时器设计专用的滤波电路。②在通用计算机系统中加上专用的加速处理机设计实现。③用通用的可编程DSP芯片实现。④用专用的DSP芯片实现在一些特殊的场合要求的信号处理速度极高,用通用DSP芯片很难实现。这种芯片将相应的滤波算法在芯片内部用硬件实现,无需进行编程。采用FPGA/CPLD设计实现。在上述几种方法中,第②种方法的缺点是速度较慢,一般可用于DSP算法的模拟。第①、④种方法专用性强,应用受到很大的限制。第③、⑤种方法都可以通过编程来实现各种数字滤波,但是,第③种因有专用的指令来实现滤波运算编程实现容易,而第⑤种方法编程实现较为困难,因此,本文选用了可编程DSP