在dsp上实现fir数字滤波器.doc

上传人:飞****2 文档编号:60093688 上传时间:2022-11-13 格式:DOC 页数:18 大小:544KB
返回 下载 相关 举报
在dsp上实现fir数字滤波器.doc_第1页
第1页 / 共18页
在dsp上实现fir数字滤波器.doc_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《在dsp上实现fir数字滤波器.doc》由会员分享,可在线阅读,更多相关《在dsp上实现fir数字滤波器.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、DSP课程设计 学院:昆仑学院 班级:10级电气(2)班 姓名:柴智博FIR数字滤波器的MATLAB设计与DSP实现摘要:针对有限长冲激响应(FIR)数字滤波器的原理,讨论了窗函数法设计线性相位FIR数字滤波器的基本思路,介绍了用MATLAB工具来设计数字滤波器的方法及在定点DSP上的实现。通过CCS5000开发工具和在DES3200实验箱上运行,实现了达到目标要求的滤波器。关键词: matlab;fir;dsp;ccs开发环境 1、引言随着信息和数字技术的发展,数字信号处理已成为当今极其重要的学科和技术领域之一通信语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛

2、的应用。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中,滤波是应用非常广泛的一个环节,数字滤波器的理论与相关设计也一直都是人们研究的重点之一。数字滤波器根据其冲激响应函数的时域特性,可分为无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。其中FIR滤波器具有严格的相位特性,同时系统函数的极点固定在原点上,因而该类型的滤波器是稳定的。滤波器的设计方法主要有窗函数法、频率取样法和最优线性相位设计法。其中窗函数设计方法由于其运算简便、物理意义直观,已成为工程实际中应用最广泛的方法,本文从FIR数字滤波器的原理与基本设计步骤出发,对FIR数字

3、滤波器在MATLAB中的仿真与设计的基本思路做了阐述,并在定点DSP上实现了满足要求的FIR滤波器。目 录1、滤波器基本原理311 数字滤波器的基本概念312 FIR滤波器的基本结构313 FIR滤波器的主要特点414开发环境CCS简介42、数字滤波器的设计621数字滤波器MATLAB设计的基本步骤622 FIR数字滤波器的DSP实现823结论93心得体会104附录10参考文献161、滤波器基本原理11数字滤波器的基本概念数字滤波器的设计问题就是寻找一组系数 和,使得其性能在某种意义上逼近所要求的特性。如果在s平面上去逼近,就得到模拟滤波器,如果在z平面上去逼近,则得到数字滤波器。数字滤波是将

4、输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程: 其中x(n)为输入序列,y(n)为输出序列, 和为滤波器系数,N为滤波器的阶数。12 FIR滤波器的基本结构在式(1)中,若所有的均为0,则得FIR滤波器的差分方程: 对(2)式是 滤波器的差分方程,其一般形式为 对(3)式进行 变换,整理后可得FIR滤波器的传递函数 FIR数字滤波器的设计方法主要有窗函数法和频率抽样设计法,其中窗函数法是基本而有效的计方法。由此可得到FIR滤波器的结构如图1所示。FIR滤波器的单位冲击响应h(n)是一

5、个有限长序列。若h(n)为实数,且满足偶对称或奇对称的条件,即h(n)=h(N-1-n)或h(n)=-h(N-1-n),则FIR滤波器具有线性相位特性。1.3、FIR滤波器的主要特点1)单位冲击响应只有有限项;2)FIR滤波器无反馈回路,是一种无条件稳定系统;3)FIR滤波器可以设计成具有线性相位特性。1.4、开发环境CCS简介CCS是TI公 司 推 出 的 为 开 发TMS320系列DSP软件的集成开发环境(IDE)。CCS工作在Windows操作系统下类似于vc+的集成开发环境采用图形接口界面提供编辑工具和工程管理工具的软件。CCS开发流程图如图所示图2 开发流程对于CCS的使用先应建立工

6、程文件*.mak根据需要添加C语言源程序*.c汇编源程序*.asm链配置件文件*.cmd等可能需要的文件完成整个工程的建立然后对源文件编辑修改后进行汇编连接以生成目标文件*.out。对源文件每作一次修改都必须全部重新建立生成新的目标文件*.out接下来就可用CCS调试先让系统复位再载入*.out。调试的方式是多种多样的有单步执行多步执行单步跳出单步进入等还有断点 设置和探测点设置在CCS环境下实现FIR滤波器的程序框图如图所示保存滤波结果到输出单元待滤波的样本点数(256点)处理完成?结束读入数据并存放到栈顶滤波处理产生输入数据初始化DSP否是图3 用循环寻址的方法FIR实现滤波器的程序框图从

7、图3可知FIR滤波器DS实现包括4个部分:模拟输入数据的生成DSP初始化程序滤波系数以及输入数据的调入及滤波子程序其中模拟输入数据的生成可利用C语言编程实现 用.COPY汇编命令将生成的数据文件拷贝到汇编程序中作为FIR滤波器的输入数据文中C语 言程序运行后所生成的数据文件名为初始化程序包括了对堆栈指针(SP)软件等待状态寄存器(SWWSR)中断寄存器(IFR)中断屏蔽寄存器(IMR)以及处理器工作状态寄存器(PMST)的初始 化另外还对各变量赋值由于滤波器系数一开始是存在程序存储器中输入数据则是存在程序外的文件中程序对这两组数据进行处理时需要把两者都调到数据存储器中这是滤波系数以及输入数据的

8、调入部分的任务滤波子程序重复执行的次数一般等同于输入序列的长度实现对数据的读入处理输出等功能。2、数字滤波器的设计2.1数字滤波器matlab设计的基本步骤(1)确定指标在设计一个滤波器之前,必须首先根据工程实际需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度响应和相位响应。幅度指标主要以两种方式给出。第一是绝对指标,它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。它以分贝值的形式给出要求,在工程实际中,比较受到欢迎。对于相位响应指标形式,通常希望系统在通频带中仍然有线性相位。运用线性相位响应的指

9、标进行滤波器设计具有如下优点只包含实数算法,不涉及复数运算不存在延迟失真,只有固定数量的延迟 长度为N的滤波器(阶数为N-1),计算量为N/2数量级。(2)逼近确定了技术指标后,就可以建立一个目标的数字滤波器模型。通常采用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。(3)性能分析和计算机仿真上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求,或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。(4)窗函数法设计FIR滤波器的MATLAB仿真matlab是一

10、套用于科学计算的可视化高性能语言与软件环境。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个界面友好的用户环境。它的信号处理工具箱包含了各种经典的和现代的数字信号处理技术,是一个优秀的算法研究与辅助设计的工具对于线性相位FIR滤波器通常采用窗函数法设计。窗函数设计 滤波器的基本思想(1),就是从时域出发,把理想的无限长的hd(n)用一定形状的窗函数截取成有限长的h(n),以此h(n)来逼近hd(n),从而使所得到的频率响应与所要求的理想频率响应相接近。理想的数字滤波器Hd()频率特性是无法实现的,FIR的设计就是要寻找一个可以得到的频率特性来逼近Hd(,这相当于用一个可实现的单位脉

11、冲响应h(n)去逼近一个理想单位脉冲响应hd(n)。要想用一个有限长的因果序列去逼近它,最简单的方法是截取n从0N-1的一段来表示它,即h(n)= hd(n)(0nN-1);当n为其他的数时,h(n)=0。同时,为了保证线性相位,还要满足偶对称:h(n)=h(N-1-n),这就好像通过一个窗口观看到一段hd(n),因此h(n)就表示成hd(n) 和一个“窗口函数”的乘积。这样,对h(n)的求解就变为:, 这里的W(n)就称为窗口函数。窗口函数相当于对hd(n) 在时域上截取一段,势必造成频域的矩形窗口的失真,结果就是截取出的信号也相应失真。为了补偿这种失真,只有改变原来窗口的形状,修正经过时域

12、截取后的窗口失真。改善窗口函数的标准:(1)尽量减少窗口频谱的旁瓣,使能量集中在主瓣中,以减少波动的幅度和次数,提高阻带衰减。这样,主瓣就不能太窄;(2)主瓣的宽度应尽量窄,以得到尽量窄的过渡带。工程中常用的窗函数有以下六种(2):矩形窗,三角形窗(Bartlett Window),汉宁(Hanning)窗,汉明窗,布莱克曼(Blackman)窗,凯泽(Kaiser)窗。表1为六种窗函数的性能指标。图1和图2分别为64点的矩形窗函数的时频特性曲线和64的三角窗函数的时频特性曲线。计算出64点的矩形窗函数并利用wvtool函数绘制出其时频特性。程序如下:N=64; y=rectwin(N); w

13、vtool(y);图4 矩形窗函数时域和频域特性计算出 点的三角窗函数并利用函数wvtool绘制出其时频特性程序如下:N=64; y=triang(N); Wvtool(y) ;图5 三角窗函数时域、频域特性比如设计一个低通 数字滤波器,采样频率Fs=8000HZ, 要求:通带范围:01000HZ; 带内波动:5%; 阻带范围:1500HZ4000HZ;带内最小衰减:Rs=40dB;采用Kasier窗进行设计,程序如下:Fs=8000;Fctus=1000 1500;Mags1 0;Devs=0.05 0.01; %给定频率点上幅度允许波动值利用Kaiser窗设计FIR滤波器前,需要先用函数k

14、aiserord记进行有关参数计算n,Wn,deta,ftype=Kaiserord(fcuts,mags,devs,Fs);H=fir1(n,Wn,ftype,Kaiser(n+1,deta);Freqz(h);2.2 FIR数字滤波器的DSP实现数字滤波器的实现方法一般有以下几种:用加法器、乘法器、延时器设计专用的滤波电路。在通用计算机系统中加上专用的加速处理机设计实现。用通用的可编程DSP芯片实现。用专用的DSP芯片实现在一些特殊的场合要求的信号处理速度极高,用通用DSP芯片很难实现。这种芯片将相应的滤波算法在芯片内部用硬件实现,无需进行编程。采用FPGA/CPLD设计实现。 在上述几种

15、方法中,第种方法的缺点是速度较慢,一般可用于DSP算法的模拟。第、种方法专用性强,应用受到很大的限制。第、种方法都可以通过编程来实现各种数字滤波,但是,第种因有专用的指令来实现滤波运算编程实现容易,而第种方法编程实现较为困难,因此,本文选用了可编程DSP芯片来实现。DSP是一种实时、快速、特别适合于实现各种数字信号处理运算的微处理器。由于它由具有丰富的硬件资源、改进的哈佛结构、高速数据处理能力和强大的指令系统,而在通信、航空、航天、雷达、工业控制、网络及家用电器等各个领域得到广泛应用。在滤波器的实现方面,定点DSP芯片显示出强大的优势,比较合适于滤波器的实现,本文选用含TMS320C5402的

16、实验箱作为硬件平台。下图为FIR滤波器DSP实现的电路方框图,其核心部分为TI公司生产的DSP芯片TMS320C5402 ,EP2ROM和RAM是其外围电路。DSP送给A/D抽样时钟,对输入的模拟信号抽样,即将模拟信号转换成数字信号,然后读取每一次的抽样值,并对抽样值进行卷积运算(FIR数字滤波),最后将运算结果(滤波后的数字信号)送至D/A ,转换成模拟信号进行输出。A/DDSPC500系列D/ AEP2ROMRAMINOUT图6电路框图FIR滤波器程序设计的具体流程如下先对主程序进行初始化,包括数据段的初始化和数据缓冲区的清零等,再将从A/D获得的采样点样值送到数据缓冲区中,执行FIR滤波

17、程序,最后将滤波结果输出。同时,在CCS的图形显示界面中显示出输人波形与输出波形。滤波器算法在TMS320C5416开发板上可用汇编,也可用C语言实现。但汇编执行效率高。(实现FIR滤波器功能的程序见附录)汇编程序调试可先在CCS中建立新的工程fir.pjt, 再将汇编语言源文件( asm或c)文件及中断向文件(.asm)、位文件(.cmd)添加到工程中。若为C语言程序则还需添加“stdio.h”、“math.h”, “rts.lib”编译后生成.out文件,可下载到基于DES3200的系统板上。编译并将整个FIR项目成功地下载到目标系统板后,程序就可以在所设计的目标板上运行。 实际在CCS中

18、通过加人时域内一个低频正弦波与一个高频正弦波的叠加输人波形信号,对所设计的数字滤波器进行仿真,高频部分被滤除,其输人及结果见图4和图5。仿真结果表明,高频部分被滤除,达到设计要求。图7 低频正弦波与高频正弦波的叠加图8 通过低频滤波器后的波形2.3结论用MATLAB语言可方便、快捷地设计具有严格线性相位的FIR系统,且参数的修改也十分方便,用DSP芯片实现低通FIR数字滤波。除了具有准确度高、不受环境影响等优点外,由于DSP芯片具有可编程特性。程序的可移植性好,具有较好的灵活性在实际应用串,其需按要求修改摅渡器参数,并对程序作较少的改动,即可实现不同截止频率的低通Fm滤波器,实用性较强。三、心

19、得体会 从复习课本,再到复习实验,相互探讨编程思路,上网搜索资料,调试实验等,我们都在努力的自学着。通过这次FIR滤波器的设计,我们都有不同程度的收获。 首先,是学习上的巩固。一方面,通过复习课本和实验,对DSP的基础知识又有了很大的巩固。其次,通过对用Mathlab实现FIR滤波器的设计,熟悉了matlab软件的一些相关的窗口函数以及相关功能的调用,如怎样实现窗函数的调用,怎样实现滤波,等等。 第二,增进了与同学的交流。平常除了上课,大家也比较少接触。而每次做课程设计的时候,大家总会互相探讨,发表自己的看法,帮忙解决遇到的问题,分享自己的心得,于是交流也就不由自主的变得相对频繁些了,感觉也就

20、更亲切了。 第三,对FIR的滤波器性能和作用有了更深一层的了解。FIR滤波器的应用十分广泛,当今许多信号处理系统和图像处理系统等都要求信号具有线性相位特性。在这方面,FIR滤波器有十分独特的优点,运用mathlab语言,我们能够很容易的设计出具有严格线性相位的FIR滤波系统,以及比较容易的实现。此外,我们还知道了FIR滤波器是永远稳定的,因为FIR滤波器的冲激响应是有限长序列,其系统函数为一个多项式,它所含的的极点多为原点。四、附录实验汇编程序 .title test vc5402bootloader. .def _c_int00 .mmregsgpiocr .set 3chgpiosr .s

21、et 3dhdxr10 .set 23hdrr10 .set 21hspsa0 .set 38hspcr10 .set 39hdxr11 .set 43hspsa1 .set 48hspcr11 .set 49hswcr .set 2bhtimer_count .set 060hnew_ad .set 064hout_wave_ptr .set 065ht_ar2 .set 066htemp .set 068hwave_buf .set 0900h out_wave_buf .set 01000hN .set 38 ; FIR tapsfir_coef_buf .set 100h ; FIR

22、coef bufferfir_data .set 200h ; FIR windows data buffer ! .text;-; interrupte vector table !;-rs b _c_int00 nopnmi b _ret nopsint17 b _ret nopint0 b _ret nop tint b timer nopbrint0 b receive nopbxint0 bd transmittrint b _retint3 b _rethpint b _retq26 .word 0ff80h;-; end of interrupte vector table !;

23、-_c_int00: stm #2020h,pmst ; vector table start: 0x2000 ssbx intm ; close all int ! (ssbx intm) ssbx sxm ; extend sign ! ssbx frct ; faction multiply stm #10h,26h ; stop TIMER0 ! stm #0ffh,sp ; sp= 0x0ff ld #0,dp ; dp=0 stm #0ffffh,ifr ; clear all int !;/*-; The following codes switch to 90MHz clock

24、 !;-*/ stm #0,58hwait_pll: ldm 58h,a and #1,a bc wait_pll,aneq stm #87ffh,58h ; switch pll*9 - 90M clk rpt #1000 nop;*; initalize RAM, Variable.;* stm #wave_buf,ar6 stm #1,ar0 rpt #24 mvpd wave_data,*ar6+0 ; move wave data to wave_buf - 0x6000h stm #wave_buf,wave_ptr ; save wave bufferptr stm #out_w

25、ave_buf,out_wave_ptr ; save out wave bufferptr, because use ; circular address, so when save out_wave ; date,must + ! stm #fir_coef_buf,ar6 rpt #N-1 mvpd fir_coef,*ar6+ ; move fir coef to fir_coef_buf(in data mem) stm #fir_coef_buf,t_ar2 ; stm #fir_data,t_ar3 ld *ar0,t;*; The following codes are use

26、d to initalize McBSP0 !;* stm #0,spsa0 ; choose SPCR10 stm #2000h,spcr10 ; receive sign_extend in DR stm #00h,dxr10 ldm 22h,a stm #1,38h stm #0c1h,39h ; start McBSP0 send ! ld #603h,a rsbx intm ; enable all int !;-; The following codes are initalized AC01, ALL AC01 setup same !;- idle 1 idle 1 ; res

27、et two AC01 by software ! ld #600h,a idle 1 ; wait for int . ld #3,a idle 1 ; send #3 ld #00105h,a ; fs=10M/2/A/B= 25k ; flp=10M/2/40/A= 25k (all pass) ; fhp=fs/200= 125Hz (not use !) ; A=05,B=40(0x28) idle 1 ; send 1th regs - 05h ld #3,a idle 1 ; send #3 ld #800h,a idle 1 ; send 8th regs - 0 ld #0h

28、,a stm #0,38h stm #2001h,39h ; start MCbsp0 receive ! stm #30h,imr ; bit5-BXINT0, bit4-BRINT0, enable BXINT0;*; The following codes are used to initalize TIMER !;* stm #10h,tcr ; stop TIMER ! bitf is_new_data,#1 ; test is_new_data = 1 ? cc fir,tc ; =1, then call fir ! new AD data in new_ad(0x64) b a

29、gain;*; The following codes are serived for McBSP0 transmit !;*transmit: pshm st1 stm #25,bk ; each AC01 has 25 dots to D/A ! stlm a,dxr10 ; send wave data ! Master AC01 make source wave, ; Slave AC01 make filter result wave ! bd wave_make_end mvmd ar7,#wave_ptr ; save wave buffer ptr !init: stlm a,

30、dxr10 bitf dxr10,#800h ; if setup last reg of AC01, set mcbsp_init=0 ! bc wave_make_end,ntc ; not equal ,jump ! stm #0,mcbsp_init ; when mcbsp=0 or 1, transmit for make wave !wave_make_end: popm al_ret: rete;*; The following codes are serived for McBSP0 receive ! use AR5,BK!;*receive: pshm st1 pshm

31、st0 ld #0,dp mvkd drr10,*ar5 ; save AD data pshd *ar5+% ; save AD data in AD_buffer(0x1800-0x1c00) popd new_ad stm #1,is_new_data ; has new AD data popm st0 popm st1 rete;*; The following codes are serived for vc5402 TIMER !;*timer: pshm ah pshm al ldm timer_count,a sub #1,a bc not_show_led,aneq ; i

32、f a != 0 ,jump ! bitf st1,#2000h ; test XF? bc show_led,tc ssbx xf ; set xf=1 b show_conshow_led: rsbx xf ; set xf=0show_con: ld #5,a ; not_show_led: stlm a,timer_count popm al popm ah rete;*; The following codes is used to FIR, new AD DATA in new_ad(0x64); FIR buffer coff- 0x100(ar2), FIR window bu

33、ffer - 0x200(ar3);*fir: pshm st1 mvdm #t_ar2,ar2 ; restore ar2 mvdm #t_ar3,ar3 ; restore ar3 ld new_ad,-2,a ; new AD data - a, remove two LSBs stm #1,ar0 stm #N,bk ; set circular addressing size stl a,*ar3+% rptz a,#(N-1) ; 0 - a, then repeat 34 times mac *ar2+0%,*ar3+0%,a ; done FIR filter, result

34、in ah mvmd ar3,#t_ar3 ; save ar3 mvmd ar2,#t_ar2 ; save ar2 stm #1,ar0 ld #0,dp cmpm out_wave_ptr, 1000h bc con_fir,ntcccs_show: nop ; if out_wave_ptr = 0xc00, may show out_wave in CCS ! show 128 dots ! ; input buffer - 0x1800; output buffer - 0x1000 (show from 0x1020) con_fir: popm ar3 ret;*; The following data is used by make wave ! when using, must copy to; wave buffer - 0x6000;*wave_data: ; freq about 1k Hz .word 03ffch ; +2 volt .word 0c000h ; -2 volt;*fir_coef: .word 34 ;C037 .word 235 ;C036 .word 500 ;C035 .word 735 ;C034 .word 808

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁