1、DSP课程设计报告刘雅琪一、 课程设计的目的和要求1.1课程设计目的:本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编 语言编程实现较复杂的功能。通过课程设计,使学生加深对 DSP芯片TMS320C54的结构、工作原理的理解,获得 DSP应用技术的实际训练,掌握设 计较复杂DSP系统的基本方法。1.2课程设计要求1、认真查阅资料2、 课程设计前认真预习3、 遵守课程设计时间安排4、 认真保质保量完成设计要求5、 认真书写报告二、系统功能介绍及总体设计方案21 功能介绍随着信息技术和计算机技术的飞速发展 , 数字信号处理技术在众多领域得 到广泛应用。数字滤波器由于其精度高、 稳
2、定性好、 使用灵活等优点 , 广泛应 用在各种数字信号处理领域。数字滤波器根据冲击响应函数的时域特性 , 可以分 为FIR(有限长冲激响应滤波器)和IIR(无限长冲激响应滤波器)。FIR滤波器 与 IIR 滤波器相比 ,具有严格的线性相位 ,幅度特性可任意等优点。而且 , FIR 滤波器的单位抽样响应是有限长的 , 故一定是稳定的 , 他又可以用快速傅里叶变 换(FFT)算法来实现过滤信号,可大大提高运算效率。本课程设计的是一个等波纹 FIR 低通滤波器,其具体参数为:采样频率Fs=1000Hz,通带频率 Fpass=150Hz截止频率 Fsg=250Hz,通带衰减 Apass =0.5dB阻
3、带衰减 Astop=80dB。22 总体设计方案:先进行 Matlab 程序设计产生待滤波数据(借助设计工具 FDATOOL 产生设计 系数),将其导入CCS在CCS!进行仿真调试运行,得到了输入和输出的波形及其频谱。三、主要设计内容和步骤31 FIR数字滤波器的原理分析3.1.1FIR数字滤波器数字滤波器原理一般具有如下差分方程N A N -1y(n) f akX( n- k) 、bky( n-k)kz0 k=0式中x(n)为输入序列,y(n)为输出序列,兔和bk为滤波器系数,N是滤波器阶N J数。当所有的bk均为零,则有 y(n)八 时(n-k) k=0(2)式是FIR滤波器的差分方程,其
4、一般形式为N -1y(n)hkx( n-k) (3)k 对(3)式进行z变换,整理后可得FIR滤波器的传递函数FIR的直接型结构:x(n)Bh(0)n(2) b1 h(N 3)_mh(N 2) I 1 ”1h(Nl)ziziy(n)图2 FIR的直接型结构FIR滤波器最主要的特点是没有反馈回路,因此它是无条件稳定系统。它的单位冲激响应h(n)是一个有限长序列。如果h(n)是实数,且满足偶对称或奇对称的条件,即h(n)二h(N -n)或h(n)二-h(N -仁n),则滤波器具有线性相位特性。偶对称线性相位FIR滤波器(N为偶数)的差分方程表达式为:N/2 Jy - qx(n i) x(n - N
5、 Vi)i Q线性相位FIR滤波器是用得最多的FIR滤波器。FIR滤波器不断地对输入样本x(n)延时后,再作乘法累加算法,将滤波结果y(n)输出,因此fir滤波算法实际上是一种乘法累加运算。在数字滤波器中,FIR滤波器的最主要特点是没有反馈回路,故不存在不稳定的问题。同时可以 在随意设置幅度特性的同时,保证精确无误的线性相位。稳定的线性相位特性 是FIR滤波器的突出优点。3.1.2系数对称的FIR滤波器对于系数对称的FIR滤波器,由于其具有线性相位特性,因此应用很广,特别是对相位失真要求很高的场合,如调制解调器(MODEM一个N=8的FIR滤波器,若a(n)=a(N“-n),就是对称FIR滤波
6、器,其输出方程为:y(n) = aox(n) aix(n -1) a2x(n - 2) a3x(n - 3) a3X(n - 4) a2x(n - 5) x(n - 6) ax(n - 6)总共有8次乘法和7次加法。如果改写成:y(n) = ax(n) x(n - 7) a1 x(n -1) x(n - 6) a2x(n -2) x(n - 5) a3x(n - 3) x(n - 4)则变成4次乘法和7次加法。可见乘法运算的次数减少了一半。这是对称 FIR的有一个优点。对称FIR滤波器的C54x实现的要点(1)在数据存储区中开辟两个循环缓冲区,New循环缓冲区中存放N/2=4个新数据;Old循
7、环缓冲区中存放老数据。循环缓冲区的长度为 N/2。数据存储器NeW循环缓冲区 Old循环缓冲区80hx(n)JAR288hx( n-4)81hx(n-3)89hx(n-5)82hx(n-2)8Ahx(n-6)83hx(n-1)8Bhx( n-7)AR3程序存储器系数表低地址咼地址(2)设置循环缓冲区指针,AR2指向中最新的数据,AR3指向中最老的数据(3)在程序存储器中设置系数表。(4)(AR2) (AR3) AH (累加器 A 的高位)(AR2) -1 AR2 (AR3) -1AR3 将累加器B清0,重复执行4次(i=0,1,2,)(AH)*系数ai +(B)t B 系数指针(PAR加1(A
8、R2) (AR3) AH AR2和 AR3减 1(6)保存和输出结果(结果在BH中)(7) 修正数据指针,让AR2和AR3分别指向NeW爰冲区中最新的数据和Old缓 冲区中最老的数据。(8) 用NeW爰冲区中最老的数据替代 Old缓冲区中最老的数据。Old缓冲区指 针减1。(9)输入一个新数据替代New缓冲区中最老的数据重复执行第(4) ( 9)步3.1.3关键指令在编程中要用到FIRS (系数对称有限冲激响应滤波器)指令,其操作如下:FIRS Xmem,Ymem,Pmad执行 PmadPAR当(RC) = 0(B)+(A(32-16)*( 由 PAR#址 Pmem)B(Xmem +(Ymer
9、) PAR(RC)-1 RCFIRS指令在同一个机器周期内,通过 C和D总线读2次数据存储器,同 时通过P总线读一个系数。3.2Matlab的仿真及滤波器系数的确定设计FIR滤波器,关键是得到正确的滤波器系数。按照技术指标的要求,进行Matlab程序设计。运行后生成的图像如下:观察图像可知在频率为50和350Hz上有波形,后面为镜像显示。利用Matlab中FDATOO工具设计好滤波器,从 FDATOO向CCS输出滤波器 系数。Matlab中FDATOOLX具设计好滤波器以后,可以利用 C语言头文件输出 滤波器系数,将头文件添加到工程中, 编译连接生成可执行文件。 在把可执行文件加载到目标DSP
10、后,会给头文件中的滤波器系数分配一个静态存储空间, 滤波器系数就放入此存储空间中。或者可以直接把滤波器系数输出到 DSP的存储器中。FDATOO设计分析后产生的幅频特性及滤波器系数表输出的滤波器系数为:.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和35
11、0Hz采样频率均为1kHz。利用Matlab设计FIR低通滤波器的系数得DSP中滤波器系数列 表.用.word汇编命令将各滤波器系数直接输入到 DSP程序中;模拟输入数据由C语言程序实现,然后用.copy命令将C语言程序生成的数据文件拷贝到 DSP 程序中。DSP程序实现读入数据、滤波、显示波形等方面的任务。完成 FIR滤波器的程序框图如图 4所示,可知FI R滤波器的DSP实现主要由以下4方 面的内容组成:(1)模拟输入数据的生成 用C语言程序生成输入数据,通过.copy汇编命令将生成的数据文件拷贝到汇编程序中 ,作为FIR滤波器的输入数据。(2) DSP初始化程序.title FIR.as
12、m .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主程序流程图(3)滤波算法子程序:滤波算法流程图 滤波算法子程序代码:FIR:SSBX FRCTSTM#x_new,AR2STM#x_old+(size-1),AR3STM#-1,AR0STM
13、#output,AR5STM#in put,AR4STM#KS-1,BRCRPTBD LOOP-1STM#size,bkLD*AR4+,ASTLA,*AR2ADD*AR2+0%,*AR3+0%,ARPTZB,#size-1FIRS*AR2+0%,*AR3+0%,COEFSTHB,*AR5+MAR*+AR2 (2) %MAR*AR3+%MVDD *AR2,*AR3+0%(4)复位程序:中断流程图 复位程序代码:.title FIR_V.asm.ref _c_in tOO.sect VECTORSreset:b _c_int00.end五、调试过程编辑好.asm和.cmd文件之后并加入工程中进行编
14、译,修改出现的错误直至无误,然后加载.out文件。选择File菜单下的data,加入.dat文件,运行程序并打开CCS的输入输出图形界面,观察对比滤波前后的时域波形与频谱图 调试过程中出现的错误及警告:(1) warning:creati ng output sect ion n ewdata without SECTIONSspecificati on分析: 汇编语言源程序中的未初始化段名n ewdata与链接命令文件不一致解决:将链接命令文件中相应的未初始化段名改为 n ewdata(2) fir .asm, ERROR! at line 13: E1000 Include/Copy fi
15、le not foundor opened分析:用FDATOO工具产生的系数表文件名与源程序中引用的不一致解决:保持产生的系数表文件名与源程序中引用的一致(3)分析产生的波形图不理想,有时是因为不同的参数设计出的滤波器的 阶数可能不同,要注意修改源程序中滤波器阶数值(4)在CCS程序中,应先加载正确的中断向量文件,所用芯片的 CMD配置 文件,编译才会有效。编译成功后加载.out文件后才可以运行,查看运行结果。 若发现程序语法本身正确,编译也没有错误,可以加载 .out文件,但查看输出波 形始终与Matlab的波形无法吻合,则应考虑重置CPU再重新进行操作。调试后运行出的波形如下:输入与输出的
16、时域波形:N3 ztosd T tiH :hiiH |诫 氓idfft# Scdt输入与输出的频谱图:滤波后信号的时域空频谱图分别如上图所示.对比CCS所显示的滤波前 和滤波后信号的时域和频谱图可以看出:由频率分别为50Hz, 350Hz这2个正 弦信号组成的混合信号 ,经过FIR低通滤波后,相对应频率的信号被保留 ,另外1个信号得到压制,基本上达到了预期的滤波效果。改变程序中的滤波器 系数,即可实现不同类型的滤波器。六、结论与体会6.1设计结论本设计为FIR低通滤波器,其要求实现功能是在多个混合的频率中可以把其 中高于截止频率Fc的频率分量滤除掉,通过 matlab中的FDATOO工具可以很
17、方便 地进行设计,输入相应的参数输入是采样频率 Fs=1000Hz,通带频率为150Hz,阻 带频率250Hz,输出滤波器系数表,它们作为CCS仿真时的输入,调试修改程序, 从所得到的图形中观察分析可以得知该滤波器实现了滤波效果,达到了预期的 目的。6.2实验心得通过这次基于DSP的数字滤波器设计与仿真,我学会了应用 Matlab和CCS进 行DSP设计的实践操作。应用Matlab对FIR数字滤波器比传统的方法设计滤波器 速度提高了很多,设计过程得到了很大的简化。熟悉了 DSP集成开发环境(CCS)基于窗函数法设计,掌握了 FIR数字滤波器原理和方法。通过对系统的 调试,对线性相位 FIR 数
18、字滤波器特性及不同阶数对滤波器特性的影响进行了研 究。通过观察时域和频域图,对 FIR数字滤波器特性进行了验证,在应用DSP对 数字滤波器实现的过程中,体会到了 DSP在数字滤波实现中的优缺点。在使用 Matlab时,熟悉了如何运用Matlab进行滤波器的设计,可以是编写程序直接针 对某所需参数的滤波器进行,也可以运用 Matlab中的一个滤波器的专用设计工 具 FDATOOL 对其进行设计,简单方便。在数字滤波器设计时要注意以下几点:( 1)在用 Matlab 设计滤波器时采样频率一定要满足奈奎斯特准则。 抽样 频率必须大于两倍信号谱的最高频率,即 Fs =2Fh来设置混合波的相应频率, 以
19、取得准确的滤波效果。( 2)使用探针方法输入数据时 , 一般要求输入数据是 16进制的小数表示 , 但 如果输入 10进制的也可以 , 但需在两次确认之后才可以输入。(3) 在图形窗口观察结果时 ,如果所观察的图形不明显 ,可以通过设置幅度 值来改善效果。(4) 在程序中对输入的数据处理时,因注意在 Matlab得到的小数要在CCS 中得以应用必须符合小数运算的规则。当发生溢出时,则用其最大正数或者最 大负数加载累加器。总之, 滤波器设计是我们实际系统应用中重要的一方面 , 相比传统的 R,L,C 元 件和运算放大器组成的块滤波器 , 更有发展的潜力。相信这次课程设计,对于我 以后的学习和工作
20、会带来很大的帮助!七、参考文献1程佩青. 数字信号处理教程 .北京:清华大学出版社, 19952戴明帧.TMS320C54XDSP结构原理以应用.北京.北京航空航天大学出版社,20073DSP 原理及应用 . 北京. 中国水利水电出版社, 2004附录一:源程序清单(.asm文件).title.mmregs.defFIR.asm_c_int00N.set28size.setN/2;FIR 滤波器阶数x_new.usectx_new,N/2; 自定义数据空间x_old.usectx_old,N/2; 自定义数据空间KS.set256; 输入样本数据个数input.usectinput,KSout
21、put.usectoutput,KS.data.copyfdacoefs4.h;FIR 滤波器系数*系数对称的 FIR 滤波器设计 *.text_c_int00:SSBXFRCT;设置FRCT(小数方式)位STM#x_new,AR2;AR2指向New缓冲区第一个单元STM#x_old+(size-1),AR3;AR3指向Old缓冲区最后一个单元STM#-1,AR0;AR0=-1, 双操作数减量STM#output,AR5STM#input,AR4STM#KS-1,BRC;块重复计数GS次RPTBDLOOP-1STM#size,bk; 循环缓冲区块大小 BK=sizeLD*AR4+,ASTLA,
22、*AR2; 输入样本值FIR:ADD*AR2+0%, *AR3+0%,A;AH=x(n)+x(n-N+1)RPTZB,#size-1;B=0, 下条指令执行 size 次FIRS *AR2+0%,*AR3+0%,COEF ;B=B+AH*h(0),AH=x(n-1)+x(n-N+2); 执行该指令 size 次STH B,*AR5+MAR *+AR2(2)%;保存滤波输出数据到AR5所指向单元; 老的数据.end;修正AR2指向New缓冲区最老的数.title FIR_V.asm.ref _c_int00.sect VECTORS定义向量表,紧随其后的是名为 VECTOR的复位向量 reset
23、:b _c_int00.end附录二:链接命令文件(.cmd文件)MEMORYPAGE0:ROM: org=0x0E00,len=0x1000VEC: org=0xff80, len=0x0080PAGE1:SPRAM:org=0x0060, len=0x0020DARAM:org=0x0080, len=0x2000SECTIONS.text ROMPAGE0.data ROMPAGE0VECTORS VECPAGE0.bss SPRAMPAGE1x_new DARAMPAGE1x_old : DARAMPAGE1output : DARAMPAGE1 input : DARAMPAGE1
24、附录三:滤波器系数表( .h 文件)COEF.word 15, -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 .word 15附录四:Matlab程序(.m文件)f11=50; %/Hzf12=350; %/Hzfs=1000; %/采样 HzN=256 ; %数据个数T=1/fs; %采样周期n=0:N; x11=sin(2*p
25、i*f11*n*T); x12=0.7*sin(2*pi*f12*n*T); x_base=(x11+x12);%待滤波信号波形figure(1) plot(x_base) %待滤波信号频谱figure(2)yff=abs(fft(x_base)df=n*(fs/N) plot(df,yff) xout=x_base/max(x_base);% 归一化 xto_ccs=round(32767*xout) fid=fopen(input.dat,w);% 打开文件 fprintf(fid,1651 1 0 0 0n);% 输出文件头输出fprintf(fid,%dn,xto_ccs);% fclose(fid);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1