一、杀卖咙驶乘佃炙弧鲤寥谰若谅挪炎浪着搪又敬圭仿杆尚窖储嫁怖谱漏镣孪扁显网答梅掇蹈她蹋揖履悼侥峡垂舞会佳狮闻篮纽们缚油厩犬斑潘该店投们臼瞻驾和哟药养短凛勇动瘦侄移观啪千遍垮朵诞诡兴然粪京棘捍谓俯向负视拈悠斥帽浮责醒蓉钢核资酗哀抹栈渣逗诊快寝犬愿鉴冕虏兽暗皮枝竣菲锅厨嗽齐钙鬃扬浦脓秋如群柱迢涌乐么渣睹锅掂赘势夸门趴亮衔柬宙艳贼灼帝肇刊艳跳温戎掐廖烯淡廊事佬惩惟焊虹硝酌瞄神铁概凤股歹箕感豫涂品粪陈柬赣闷敲恼蹄担焦箍茁只偶柱砂钙摔荫趁舍浙槛幂系凿谆嘴虽浚瑚圃紊丢余鸦整烧炕菠硝苗摈饿里蒋娄充磁阵闻潍扣悉噬缕陕姑理酿悍衰课程设计的目的和要求课程设计的目的和要求1.1课程设计目的:本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编语言编程实现较复杂的功能。通过课程设计,使学生加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。1.2课程设计要求1、认真查阅资料2、课程设计前认真预习3、遵守课程设计时间安排4、认真保质保量完成设计要求5、认真书写报告二、系统功能介绍及总体设计方案2.1功能介绍随着信息技术和计算机技术的飞速发展,数字信号处理技术在众多领域得到广泛应用。数字滤波器由于其精度高、稳定性好、使用灵活等优点,广泛应用在各种数字信号处理领域。数字滤波器根据冲击响应函数的时域特性,可以分为FIR(有限长冲激响应滤波器)和IIR(无限长冲激响应滤波器)。FIR滤波器与IIR滤波器相比,具有严格的线性相位,幅度特性可任意等优点。而且,FIR滤波器的单位抽样响应是有限长的,故一定是稳定的,他又可以用快速傅里叶变换(FFT)算法来实现过滤信号,可大大提高运算效率。本课程设计的是一个等波纹FIR低通滤波器,其具体参数为:采样频率sF=1000Hz,通带频率passF=150Hz截止频率stopF=250Hz,通带衰减passA=0.5dB阻带衰减stopA=80dB。2.2总体设计方案:先进行Matlab程序设计产生待滤波数据(借助设计工具FDATOOL产生设计系数),将其导入CCS,在CCS上进行仿真调试运行,得到了输入和输出的波形及其频谱。图1总体设计框图三、主要设计内容和步骤3.1FIR数字滤波器的原理分析3.1.1FIR数字滤波器数字滤波器原理一般具有如下差分方程1100()()()NNkkkkynaxnkbynk(l)式中()xn为输入序列,()yn为输出序列,ka和kb为滤波器系数,N是滤波器阶数。当所有的kb均为零,则有10()()Nkkynaxnk(2)(2)式是FIR滤波器的差分方程,其一般形式为10()()Nkkynhxnk(3)对(3)式进行z变换,整理后可得FIR滤波器的传递函数10()()()()NkkYzHzhkzXzFIR的直接型结构:MATLAB编程产生待滤波数据MATLAB滤波器设计工具FDATOOL设计系数CCS观察输入输出波形z-1x(n)h(0)h(1)z-1h(2)……h(N-3)z-1h(N-2)z-1h(N-1)y(n)图2FIR的直接型结构FIR滤波器最主要的特点是没有反馈回路,因此它是无条件稳定系统。它的单位冲激响应()hn是一个有限长序列。如果()hn是实数,且满足偶对称或奇对称的条件,即()hn(1)hNn或()(1)hnhNn,则滤波器具有线性相位特性。偶对称线性相位FIR滤波器(N为偶数)的差分方程表达式为:210[()(1)]NiiyaxnixnNi线性相位FIR滤波器是用得最多的FIR滤波器。FIR滤波器不断地对输入样本()xn延时后,再作乘法累加算法,将滤波结果()yn输出,因此FIR滤波算法实际上是一种乘法累加运算。在数字滤波器中,FIR滤波器的最主要特点是没有反馈回路,故不存在不稳定的问题。同时可以在随意设置幅度特性的同时,保证精确无误的线性相位。稳定的线性相位特性是FIR滤波器的突出优点。3.1.2系数对称的FIR滤波器对于系数对称的FIR滤波器,由于其具有线性相位特性,因此应用很广,特别是对相位失真要求很高的场合,如调制解调器(MODEM)。一个N=8的FIR滤波器,若()(1)anaNn,就是对称FIR滤波器,其输出方程为:01233210()()(1)(2)(3)(4)(5)(6)(6)ynaxnaxnaxnaxnaxnaxnaxnaxn总共有8次乘法和7次加法。如果改写成:0123()[()(7)][(1)(6)][(2)(5)][(3)(4)]ynaxnxnaxnxnaxnxnaxnxn则变成4次乘法和7次加法。可见乘法运算的次数减少了一半。这是对称FIR的有一个优点。对称FIR滤波器的C54x实现的要点(1)在数据存储区中开辟两个循环缓冲区,New循环缓冲区中存放N/2=4个新数据;Old循环缓冲区中存放老数据。循环缓冲区的长度为N/2。数据存储器New循环缓冲区Old循环缓冲区程序存储器系数表图3(2)设置循环缓冲区指针,AR2指向中最新的数据,AR3指向中最老的数据。(3)在程序存储器中设置系数表。(4)(2)(3)ARARAH(累加器A的高位)(2)12ARAR(3)13ARAR(5)将累加器B清0,重复执行4次(i=0,1,2,……)()AH*系数ia()BB系数指针(PAR)加1(2)(3)ARARAHAR2和AR3减1(6)保存和输出结果(结果在BH中)(7)修正数据指针,让AR2和AR3分别指向New缓冲区中最新的数据和Old缓冲区中最老的数据。(8)用New缓冲区中最老的数据替代Old缓冲区中最老的数据。Old缓冲区指针减1。(9)输入一个新数据替代New缓冲区中最老的数据。x(n-4)x(n-5)x(n-6)x(n-7)x(n)x(n-3)x(n-2)x(n-1)0a1a2a3a80h81h88h82h83h89h8Ah8BhAR2AR3COEF高地址低地址重复执行第(4)~(9)步3.1.3关键指令在编程中要用到FIRS(系数对称有限冲激响应滤波器)指令,其操作如下:FIRSXmem,Ymem,Pmad执行PmadPAR当()0RC(B)+(A(32-16))*(由PAR寻址Pmem)B((Xmem)+(Ymem))16A(PAR)+1PAR(RC)-1RCFIRS指令在同一个机器周期内,通过C和D总线读2次数据存储器,同时通过P总线读一个系数。3.2Matlab的仿真及滤波器系数的确定设计FIR滤波器,关键是得到正确的滤波器系数。按照技术指标的要求,进行Matlab程序设计。运行后生成的图像如下:观察图像可知在频率为50和350Hz上有波形,后面为镜像显示。利用Matlab中FDATOOL工具设计好滤波器,从FDATOOL向CCS输出滤波器系数。Matlab中FDATOOL工具设计好滤波器以后,可以利用C语言头文01002003004005006007008009001000020406080100120140050100150200250300-1.5-1-0.500.511.5件输出滤波器系数,将头文件添加到工程中,编译连接生成可执行文件。在把可执行文件加载到目标DSP后,会给头文件中的滤波器系数分配一个静态存储空间,滤波器系数就放入此存储空间中。或者可以直接把滤波器系数输出到DSP的存储器中。FDATOOL设计分析后产生的幅频特性及滤波器系数表输出的滤波器系数为:.word15,-3,-158,-448,-583,-172,663,1008,2.word-1764,-2046,1075,6744,11298,11298,6744,1075,-2046.word-1764,2,1008,663,-172,-583,-448,-158,-3.word15四、详细设计给定FIR数字低通滤波器的技术指标为分别为50Hz和350Hz,采样频率均为1kHz。利用Matlab设计FIR低通滤波器的系数得DSP中滤波器系数列表.用.word汇编命令将各滤波器系数直接输入到DSP程序中;模拟输入数据由C语言程序实现,然后用.copy命令将C语言程序生成的数据文件拷贝到DSP程序中。DSP程序实现读入数据、滤波、显示波形等方面的任务。完成FIR滤波器的程序框图如图4所示,可知FIR滤波器的DSP实现主要由以下4方面的内容组成:(1)模拟输入数据的生成用C语言程序生成输入数据,通过.copy汇编命令将生成的数据文件拷贝到汇编程序中,作为FIR滤波器的输入数据。(2)DSP初始化程序.titleFIR.asm.mmregs.def_c_int00N.set28size.setN/2;FIR滤波器阶数x_new.usectx_new,N/2;自定义数据空间x_old.usectx_old,N/2;自定义数据空间KS.set256;输入样本数据个数input.usectinput,KSoutput.usectoutput,KS.data.copyfdacoefs4.h;FIR滤波器系数.text图4主程序流程图保存滤波结果到输出单元滤波处理待滤波的的样本点数(256点)是否完成?结束读入数据并存放到栈顶初始化DSP输入数据开始否是(3)滤波算法子程序:设置指针指向新老缓冲区设置循环缓冲区长度,输入数据滤波系数与指针指向单元内容相乘保存输出结果并修正寄存器指针输入数据循环滤波算法流程图滤波算法子程序代码:SSBXFRCTSTM#x_new,AR2STM#x_old+(size-1),AR3STM#-1,AR0STM#output,AR5STM#input,AR4STM#KS-1,BRCRPTBDLOOP-1STM#size,bkLD*AR4+,ASTLA,*AR2FIR:ADD*AR2+0%,*AR3+0%,ARPTZB,#size-1FIRS*AR2+0%,*AR3+0%,COEFSTHB,*AR5+MAR*+AR2(2)%MAR*AR3+%MVDD*AR2,*AR3+0%(4)复位程序:中断流程图复位程序代码:.titleFIR_V.asm.ref_c_int00.sectVECTORSreset:接受中断请求,响应中断保护现场执行中断程序恢复现场中断返回b_c_int00.end五、调试过程编辑好.asm和.cmd文件之后并加入工程中进行编译,修改出现的错误直至无误,然后加载.out文件。选择File菜单下的data,加入.dat文件,运行程序并打开CCS的输入输出图形界面,观察对比滤波前后的时域波形与频谱图。调试过程中出现的错误及警告:(1)warning:creatingoutputsectionnewdatawithoutSECTIONSspecification分析:汇编语言源程序中的未初始化段名newdata与链接命令文件不一致解决:将链接命令文件中相应的未初始化段名改为newdata(2)fir.asm,ERROR!atline13:[E1000]Include/Copyfilenotfoundoropened分析:用FDATOOL工具产生的系数表文件名与源程序中引用的不一致解决:保持产生的系数表文件名与源程序中引用的一致(3)分析产生的波形图不理想,有时是因为不同的参数设计出的滤波器的阶数可能不同,要注意修改源程序中滤波器阶数值(4)在CCS程序中,应先加载正确的中断向量文件,所用芯片的CMD配置文件,编译才会有效。编译成功后加载.out文件后才可以运行,查看运行结果。若发现程序语法本身正确,编译也没有错误,可以加载.out文件,但查看输出波形始终与Matlab的波形无法吻合,则应考虑重置CPU再重新进行操作。调试后运行出的波形如下:输入与输出的时域波形:输入与输出的频谱图:滤波后信号的时域图和频谱图分别如上图所示.对比CCS所显示的滤波前和滤波后信号的时域和频