ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:489.37KB ,
资源ID:5214080      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5214080.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(在dsp上实现fir数字滤波器.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

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

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

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

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

5、所示。FIR滤波器的单位冲击响应h(n)是一个有限长序列。若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开发流程图如图

6、所示图2 开发流程对于CCS的使用先应建立工程文件*.mak根据需要添加C语言源程序*.c汇编源程序*.asm链配置件文件*.cmd等可能需要的文件完成整个工程的建立然后对源文件编辑修改后进行汇编连接以生成目标文件*.out。对源文件每作一次修改都必须全部重新建立生成新的目标文件*.out接下来就可用CCS调试先让系统复位再载入*.out。调试的方式是多种多样的有单步执行多步执行单步跳出单步进入等还有断点 设置和探测点设置 在CCS环境下实现FIR滤波器的程序框图如图所示 否 是图3 用循环寻址的方法FIR实现滤波器的程序框图从图3可知FIR滤波器DS实现包括4个部分:模拟输入数据的生成DSP

7、初始化程序滤波系数以及输入数据的调入及滤波子程序其中模拟输入数据的生成可利用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(,这相当于用一个可实现的单位脉冲响应h(n)去逼近一个理想单位脉冲响应hd(n)。要想用一个有限

11、长的因果序列去逼近它,最简单的方法是截取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) 在时域上截取一段,势必造成频域的矩形窗口的失真,结果就是截取出的信号也相应失真。为了补偿这种失真,只有改变原来窗口的形状,修正经过时域截取后的窗口失真。改善窗口函数的标准:(1)尽量减少窗口频谱的旁瓣

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

13、三角窗函数并利用函数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滤波器前,需要先用函数kaiserord记进行有关参数计算n,Wn,deta

14、,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设计实现。 在上述几种方法中,第种方法的缺点是速度较慢,一般可用于DSP算

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

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

17、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软件的一些相关的窗口函数以及相关功能的调用,如怎样实现窗函数的调用,怎样实现滤波,等等。 第二,增进了和同学的交流。平常除了上课,大家也比较少接触。而每次做课程设计的时候,大家总会互相探讨,发表自己的看法,帮忙解决遇到的问题,分享自己的心得,于是交流也就不由自主的变得相对频繁些了,感觉也就更亲切了。 第三,对FIR的滤波器性能和作用有了更深一层的了解。FIR滤波器的使用十分广泛,当

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

21、hspcr10 .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 coef bufferfir_data .set 200h ; FIR windows dat

22、a 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 !;-_c_int00: stm #2020h,pmst ; vector table start

23、: 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 !;-*/ stm #0,58hwait_pll: ldm 58h,a and #1,a b

24、c 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_wave_buf,out_wave_ptr ; save out wave bufferptr,

25、 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 used to initalize McBSP0 !;* stm #0,spsa0 ; choose

26、 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 ; reset two AC01 by software ! ld #600h,a idle 1 ; w

27、ait 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,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 again;*; The following codes are serived fo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1