《DSP课程设计--FIR滤波器设计.doc》由会员分享,可在线阅读,更多相关《DSP课程设计--FIR滤波器设计.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-作者xxxx-日期xxxxDSP课程设计-FIR滤波器设计【精品文档】DSP课程设计 学院: 专业年级: 姓名: 学号: 课题: FIR滤波器设计 指导老师: 日期:2016年7月2日一、设计目标功能描述: FIR低通滤波器是滤除掉高于截至频率的信号,容许低于截止频率的信号通过的电子滤波装置,故称低通滤波器。 内容: 1)设计FIR低通滤波器 2)使用CCS的simulator进行滤波特性测试参数: FIR低通滤波器通带频率为5000Hz,采样频率为20000Hz。二、算法研究数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列,FIR滤波器的差分方程为: 对上式进行Z
2、变换得到FIR滤波器的传递函数为: 由上式可以看出,H(z)是的N-1次多项式,它在z平面内有N-1个零点,同时在原点处有N-1个重极点。N阶滤波器通常采用N个延迟单元、N个加法器与N+1个乘法器,取图中(a)、(b)两种结构。图 FIR滤波器的一般结构 因为FIR滤波器的单位抽样响应是有限长的,所以它永远是稳定的。另外,若对 h(n)提出一些约束条件,那么可以很容易地使 H(z)具有线性相位,这在信号处理的很多领域是非常重要的。FIR滤波器的设计任务,是要决定一个转移函数H(z),使它的频率响应满足给定的要求。这里所说的要求,除了通带频率、阻带频率及两个带上的最大和最小衰减和外,很重要的一条
3、是保证H(z)具有线性相位。三、相应参数的计算1、FIR滤波器的MATLAB实现 MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。 MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。 用fir1函数设计FIR滤波器 fir1函数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。具体语法如下: b=fir1(n,Wn) b=fir1(n,Wn,ftype) b=fir1(n,Wn,Window) b=fir
4、1(n,Wn,ftype,Window) 其中n为滤波器的阶数;Wn为滤波器的截止频率; ftype为用来决定滤波器的类型,当ftype=high时,可设计高通滤波器;当ftype=stop时,可设计带阻滤波器。Window为用来指定滤波器采用的窗函数类型,Window参数可采用的窗口函数有: Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗,从而得到滤波器的系数。 本课程设计设计低通滤波器,采用 b=fir1(n,Wn)。2、利用MATLAB计算滤波器系数1)生成.inc文件,通带频率为5000HZ2)生成.dat文
5、件,输入信号频率分别为2000Hz和8000Hz四、编写源程序1).asm程序.globalstart,fir.mmregsCOFF_FIR_START: .sect coff_fir.include02050205.incK_FIR_BFFR.set64d_data_buffer.usectfir_bfr,64FIR_DP.usectfir_vars,0d_filin.usectfir_vars,1output.usectfir_vars,1input.usect fir_vars,1d_filout .usectfir_vars,100hstacksize .set 256stack .u
6、sect fir_vars,stacksize.asgAR4,FIR_DATA_P.asgAR6,INBUF_P.asgAR7,OUTBUF_P.asgAR3,OUTBUF.asgAR2,INBUF.sectfir_prog nopstart:stm #stack+stacksize,SPLD#FIR_DP,DPSTM#d_data_buffer,FIR_DATA_PRPTZ A,#K_FIR_BFFR-1STLA,*FIR_DATA_P+STM#d_filin,INBUF_PSTM#d_filout,OUTBUF_P STM#output,OUTBUFSTM#input,INBUFSTM#1
7、00h,BKfir_loop: NOP ;Add Breakpoint & porbe pointLD*INBUF_P,ASTLA,*INBUFCALLfirSTHA,*OUTBUF_P+%STHA,*OUTBUFmain_end:bfir_loop fir:;SSBXSXM ; SSBX FRCT STM#d_data_buffer,FIR_DATA_PSTLA,*FIR_DATA_PSTM#(d_data_buffer+K_FIR_BFFR-1),FIR_DATA_P fir_task: RPTZA,#K_FIR_BFFR-1MACD*FIR_DATA_P-,COFF_FIR_START,
8、ARET.end2).cmd程序MEMORYPAGE 0:PROG:o= 100h,l= 2000h PAGE 1:DATA1:o= 2600h, l= 1000hDATA2:o= 2100h, l= 100hDATA3:o= 2200h,l= 100hDATA4:o= 2300h,l= 100hDATA5:o= 2400h,l= 100hDATA6:o= 2500h,l= 100hSECTIONScoff_fir : PROGPAGE 0fir_prog : PROGPAGE 0fir_vars : DATA1PAGE 1 fir_coff : DATA2PAGE 1 fir_bfr : D
9、ATA3PAGE 1五、调试过程1.调试前的准备 1)启动SETUP并选择芯片c5402,关闭启动CCS。 2)在CCS的安装目录myproject子目录下创建一个文件夹0205。 3)使用MATLAB工具编写滤波器系数测试程序,生成0205.inc文件并保存在上述文件夹0205中。 4)使用MATLAB工具编写输入信号生成程序,并生成0205.dat文件保存在上述文件夹0205中。 2.编写及编译程序:CCS中 1)选中Project菜单中New命令新建一个工程并命名为0205。 2)选中File菜单中New-Source File命令,将编写的源程序以.asm格式保存在0205文件夹中。
10、3) 再选中File菜单中New-Source File命令,将编写的链接程序以.cmd格式保存在0205文件夹中。 4) 选中Project菜单中Add File to Project命令,将以上程序加载到工程目录下。 5) 编译并链接程序,如果有错就修改,然后再编译链接直到无误为止。 3.观察点设置 1) 设置断点:在标号fir_loop下面的Nop语句设置软件断点(Toggle breakpoint)探针(ToggleProbe point)。2)选中File菜单中loadprogram命令,选择Debug中的0205.out。3)选中File菜单中FileI/O命令,将会看到FileI
11、/O对话框按照下图操作然后选中AddProbePoint,继续操作。4)打开观察窗口选择菜单“View”、“Graph”、“Time/Frequency”按照下面所示操作:地址分别为:input和output,buffersize:1,displaydatasize:200DSPDataType:16-bitsignedinteger5)选择菜单栏Debug 中 点击Animate可观察到此滤波器的滤波效果。五、实验结果及分析通过观察实验结果,可看出高频信号被滤去,低频信号通过(2000Hz信号通过,8000Hz信号被滤去),此滤波器性能良好,设计成功。六、总结与体会通过这几天的课程设计,我对MATLAB软件和CCS软件的使用有了很大的进步,在课堂上我也使用过CCS进行实验仿真等,但那时极为的不熟悉,步骤条理也不熟悉,一些文件都不知道它的作用,使用中也出现了很多的错误:1对MATLAB编程不熟练,为了能够体现出滤波效果,.dat中的两个输入信号的频率一个要大于通带截至频率,一个要小于它。2在生成.inc文件时,程序中.word前的空格会影响CCS测试时链接文件产生错误。3CCS测试时程序中的.inc链接文件名要与其原文件名相同。4在进行FileI/O设置时,要先加断点和探针。【精品文档】