一、课程设计的目的和要求1.1课程设计目的:本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编语言编程实现较复杂的功能。
通过课程设计,使学生加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。
1.2课程设计要求1、认真查阅资料2、课程设计前认真预习3、遵守课程设计时间安排4、认真保质保量完成设计要求5、认真书写报告二、系统功能介绍及总体设计方案2.1 功能介绍随着信息技术和计算机技术的飞速发展,数字信号处理技术在众多领域得到广泛应用。
数字滤波器由于其精度高、稳定性好、使用灵活等优点,广泛应用在各种数字信号处理领域。
数字滤波器根据冲击响应函数的时域特性,可以分为FIR(有限长冲激响应滤波器)和IIR(无限长冲激响应滤波器) 。
FIR 滤波器与IIR 滤波器相比,具有严格的线性相位,幅度特性可任意等优点。
而且, FIR 滤波器的单位抽样响应是有限长的,故一定是稳定的,他又可以用快速傅里叶变换( FFT)算法来实现过滤信号,可大大提高运算效率。
本课程设计的是一个等波纹FIR 低通滤波器,其具体参数为:采样频率s F =1000Hz ,通带频率pass F =150Hz 截止频率stop F =250Hz ,通带衰减pass A =0.5dB 阻带衰减stop A =80dB 。
2.2 总体设计方案:先进行Matlab 程序设计产生待滤波数据(借助设计工具FDATOOL 产生设计系数),将其导入CCS ,在CCS 上进行仿真调试运行,得到了输入和输出的波形及其频谱。
图1 总体设计框图三、主要设计内容和步骤 3.1 FIR 数字滤波器的原理分析3.1.1 FIR 数字滤波器数字滤波器原理一般具有如下差分方程11()()()N N k k k k y n a x n k b y n k --===-+-∑∑ (l)式中()x n 为输入序列,()y n 为输出序列,k a 和k b 为滤波器系数,N 是滤波器阶数。
当所有的k b 均为零,则有 10()()N k k y n a x n k -==-∑ (2)(2)式是FIR 滤波器的差分方程,其一般形式为10()()N k k y n h x n k -==-∑ (3)对(3)式进行z 变换,整理后可得FIR 滤波器的传递函数1()()()()N k k Y z H z h k z X z --==∑ FIR 的直接型结构:图2 FIR 的直接型结构FIR 滤波器最主要的特点是没有反馈回路,因此它是无条件稳定系统。
它的单位冲激响应()h n 是一个有限长序列。
如果()h n 是实数,且满足偶对称或奇对称的条件,即()h n (1)h N n =--或()(1)h n h N n =---,则滤波器具有线性相位特性。
偶对称线性相位FIR 滤波器(N 为偶数)的差分方程表达式为:21[()(1)]N ii y a x n i x n N i -==-+-++∑线性相位FIR 滤波器是用得最多的FIR 滤波器。
FIR 滤波器不断地对输入样本()x n 延时后,再作乘法累加算法,将滤波结果()y n 输出,因此FIR 滤波算法实际上是一种乘法累加运算。
在数字滤波器中,FIR滤波器的最主要特点是没有反馈回路,故不存在不稳定的问题。
同时可以在随意设置幅度特性的同时,保证精确无误的线性相位。
稳定的线性相位特性是FIR 滤波器的突出优点。
3.1.2 系数对称的FIR 滤波器对于系数对称的FIR 滤波器,由于其具有线性相位特性,因此应用很广,特别是对相位失真要求很高的场合,如调制解调器(MODEM )。
一个N=8的FIR 滤波器,若()(1)a n a N n =--,就是对称FIR 滤波器,其输出方程为:01233210()()(1)(2)(3)(4)(5)(6)(6)y n a x n a x n a x n a x n a x n a x n a x n a x n =+-+-+-+-+-+-+-总共有8次乘法和7次加法。
如果改写成:0123()[()(7)][(1)(6)][(2)(5)][(3)(4)]y n a x n x n a x n x n a x n x n a x n x n =+-+-+-+-+-+-+-则变成4次乘法和7次加法。
可见乘法运算的次数减少了一半。
这是对称FIR 的有一个优点。
对称FIR 滤波器的C54x 实现的要点(1) 在数据存储区中开辟两个循环缓冲区,New 循环缓冲区中存放N/2=4个新数据;Old 循环缓冲区中存放老数据。
循环缓冲区的长度为N/2。
数据存储器New 循环缓冲区Old 循环缓冲区程序存储器系数表80h 81h 88h 82h 83h89h 8Ah 8BhAR2AR3COEF图3(2)设置循环缓冲区指针,AR2指向中最新的数据,AR3指向中最老的数据。
(3)在程序存储器中设置系数表。
(4)(2)(3)AR AR AH +→(累加器A 的高位) (2)12AR AR -→ (3)13AR AR -→(5)将累加器B 清0,重复执行4次(i=0,1,2,……) ()AH *系数i a ()B B +→ 系数指针(PAR )加1(2)(3)AR AR 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高地址低地址执行 Pmad →PAR 当()0RC ≠(B)+(A(32-16))*(由PAR 寻址Pmem)→B ((Xmem )+(Ymem ))<<16→A (PAR )+1→PAR (RC)-1→RCFIRS 指令在同一个机器周期内,通过C 和D 总线读2次数据存储器,同时通过P 总线读一个系数。
3.2 Matlab 的仿真及滤波器系数的确定设计FIR 滤波器,关键是得到正确的滤波器系数。
按照技术指标的要求,进行Matlab 程序设计。
运行后生成的图像如下:观察图像可知在频率为50和350Hz 上有波形,后面为镜像显示。
利用Matlab 中FDATOOL 工具设计好滤波器,从FDATOOL 向CCS 输出滤波器系数。
Matlab 中FDATOOL 工具设计好滤波器以后,可以利用C 语言头文件输出滤波器系数,将头文件添加到工程中,编译连接生成可执行文件。
在把可执行文件加载到目标DSP后,会给头文件中的滤波器系数分配一个静态存储空间,滤波器系数就放入此存储空间中。
或者可以直接把滤波器系数输出到DSP 的存储器中。
FDATOOL设计分析后产生的幅频特性及滤波器系数表输出的滤波器系数为:.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四、详细设计给定FIR数字低通滤波器的技术指标为分别为50Hz和350Hz,采样频率均为1kHz。
利用Matlab设计FIR低通滤波器的系数得DSP中滤波器系数列表.用.word汇编命令将各滤波器系数直接输入到DSP程序中;模拟输入数据由C语言程序实现,然后用 .copy命令将C语言程序生成的数据文件拷贝到DSP程序中。
DSP程序实现读入数据、滤波、显示波形等方面的任务。
完成FIR 滤波器的程序框图如图4所示,可知F I R滤波器的DSP实现主要由以下4方面的内容组成:(1)模拟输入数据的生成用C语言程序生成输入数据,通过.copy汇编命令将生成的数据文件拷贝到汇编程序中,作为FIR滤波器的输入数据。
(2)DSP初始化程序.title "FIR.asm".mmregs.def _c_int00N .set 28size .set N/2 ;FIR滤波器阶数x_new .usect "x_new",N/2 ;自定义数据空间x_old .usect "x_old",N/2 ;自定义数据空间KS .set 256 ;输入样本数据个数input .usect "input",KSoutput .usect "output",KS.data.copy "fdacoefs4.h" ;FIR滤波器系数.text图4 主程序流程图(3)滤波算法子程序:滤波算法流程图滤波算法子程序代码:SSBX FRCTSTM #x_new,AR2STM #x_old+(size-1),AR3STM #-1,AR0STM #output,AR5STM #input,AR4STM #KS-1,BRCRPTBD LOOP-1STM #size,bkLD *AR4+,ASTL A,*AR2FIR: ADD *AR2+0%, *AR3+0%,A RPTZ B,#size-1FIRS *AR2+0%,*AR3+0%,COEFSTH B,*AR5+MAR *+AR2(2)%MAR *AR3+%MVDD *AR2,*AR3+0%(4)复位程序:中断流程图复位程序代码:.title "FIR_V.asm".ref _c_int00.sect "VECTORS"reset:b _c_int00.end五、调试过程编辑好.asm和.cmd文件之后并加入工程中进行编译,修改出现的错误直至无误,然后加载.out文件。
选择File菜单下的data,加入.dat文件,运行程序并打开CCS的输入输出图形界面,观察对比滤波前后的时域波形与频谱图。
调试过程中出现的错误及警告:(1)warning: creating output section newdata without SECTIONS specification 分析:汇编语言源程序中的未初始化段名newdata与链接命令文件不一致解决:将链接命令文件中相应的未初始化段名改为newdata(2)"fir.asm", ERROR! at line 13: [E1000] Include/Copy file not found or opened分析:用FDATOOL工具产生的系数表文件名与源程序中引用的不一致解决:保持产生的系数表文件名与源程序中引用的一致(3)分析产生的波形图不理想,有时是因为不同的参数设计出的滤波器的阶数可能不同,要注意修改源程序中滤波器阶数值(4)在CCS程序中,应先加载正确的中断向量文件,所用芯片的CMD配置文件,编译才会有效。