当前位置:文档之家› 基于DSP的数字滤波器的设计

基于DSP的数字滤波器的设计

- - -..目录摘要错误!未定义书签。

第1章课程设计的目的和要求0第2章系统功能介绍及总体设计方案0第3章主要内容和步骤13.1滤波器原理13.2操作步骤2第4章详细设计2第5章实验过程35.1汇编语言实验步骤与内容35.2实验过程中出现的错误及解决的办法65.3CCS程序运行后的各种输出结果6第6章结论与体会8参考文献9附件:源程序清单10DSP实现FIR滤波的关键技术10汇编程序清单12第1章课程设计的目的和要求通过课程设计,加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。

通过使用汇编语言编写具有完整功能的图形处理程序或信息系统,使学生加深对所学知识的理解,进一步巩固汇编语言讲法规则。

学会编制结构清晰、风格良好、数据结构适当的汇编语言程序,从而具备解决综合性实际问题的能力。

第2章系统功能介绍及总体设计方案2.1系统功能介绍一个实际的应用系统中,总存在各种干扰。

数字滤波器在语音信号处理、信号频谱估计、信号去噪、无线通信中的数字变频以及图像信号等各种信号处理中都有广泛的应用,数字滤波器也是使用最为广泛的信号处理算法之一。

在本设计中,使用MATLAB 模拟产生合成信号,然后利用CCS 进行滤波。

设定模拟信号的采样频率为400000Hz ,。

设计一个FIR 低通滤波器,其参数为:滤波器名称: FIR 低通滤波器采样频率: Fs=40000Hz通带/阻带截止频率: 4000Hz ~4500Hz通带最大衰减: 0.5dB阻带最少衰减:50dB滤波器级数: N=154滤波器系数: 由MATLAB 根据前述参数求得。

2.2 总体设计方案流程图图1 总体设计方案第3章 主要内容和步骤3.1 滤波器原理对于一个FIR 滤波器系统,它的冲击响应总是又限长的,其系统函数可记为:()()10N n n H z h n z --==∑ 其中1N -是FIR 的滤波器的阶数,n z -为延时结,()h n 为端口信号函数。

最基本的FIR 滤波器可用下式表示:()()()10N k y n h k x n k -==-∑ 其中()x n k -输入采样序列,()h k 是滤波器系数,N 是滤波器的阶数()Y n 表示滤波器的输出序列,也可以用卷积来表示输出序列()y n 与()x n 、()h n 的关系,如下: ()()()y n x n h n =*3.2操作步骤(1)打开FDATOOL ,根据滤波要求设置滤波器类型、通带截止频率、指定阶数、采样频率等。

指定完设计参数后单击按钮Design Filter ,生成滤波器系数。

(2)把生成的滤波器系数传到目标DSP 。

选择菜单Targets->Export to Code poser Studio(tm)IDE ,打开Export to C Header File 对话框,选择C header file ,指定变量名(滤波器阶数和系数向量),输出数据类型可选浮点型或32 b ,16 b 整型等,根据自己安装选择目标板板号和处理器号,单击OK ,保存该头文件,需指定文件名(filtercoeff .h)和路径(保存在c :\ti\myprojects\fir 工程中)。

(3)修改CCS 汇编程序,删掉数据前的所有文字,在开头加上.data ,第二行加coeff .word ,在每行的前面加上.word ,比且把每行的最后的逗号去掉。

(4)编译汇编程序,如果有错误,按错误进行修改;没错误,则往下执行。

(5)加载初始化DATA 数据。

运行程序,查看输入输出波形,修改相应参数进行调试第4章 详细设计在本实验中使用MATLAB 模拟产生信号,观察滤波前的时域波形和频域波形。

MATLAB 仿真后,使用得到的滤波器参数,进行DSP 编程,在DSP 中实现带通滤波,并使用CCS 的频谱分析功能,查看DSP 的滤波效果。

MATLAB 程序流程图如图4.1所示图4.1 MATLAB程序流程图CCS汇编程序流程图如图4.2所示图4.2 CCS汇编程序流程图第5章实验过程5.1汇编语言实验步骤与内容MATLAB辅助DSP实现FIR,其总体过程为在DSP中编写处理程序,在MATLAB中利用滤波器设计、分析工具( FDATOOL) ,根据指定的滤波器性能快速设计一个FIR,然后把滤波器系数以头文件形式导入CCS中,头文件中MATLAB辅助DSP实现FIR数字滤波器含滤波器阶数和系数数组,在MATLAB中调试、运行DSP 程序并显示、分析处理后的数据。

使用该方法,便于采用汇编语言来实现程序。

头文件名不变,当MATLAB中设计的滤波器系数改变时,相应头文件中系数也改变,方便了程序调试、仿真。

(1)在MATLAB中先编写程序,查看待滤波和已滤波的信号的时域和频域波形,如图5.1和图5.2所示。

图5.1待滤波信号的时域图图5.2待滤波信号的频域图利用FDA TOOL设计FIR滤波器的参数,操作步骤如图5.3所示。

图5.3 FIR滤波器的参数打开Export,把Numerator改为B,如图5.4所示。

图5.4 Export设置已滤波的信号的时域和频域波形,如图5.5和图5.6所示。

图5.5 已滤波信号时域波形图图5.6 已滤波信号频域波形图MATLAB滤波器设计工具在完成FIR设计后,如图5.7所示,在Export as中选择16bit符号整数输出,然后单击OK按钮。

生成fir.h C语言头文件。

将系数稍作修改,调整后拷贝到程序的系数初始化空间即可。

图5.7 MATLAB输出数值转换图(2)在CCS中编写汇编语言程序,进行调试,实现带通滤波的功能。

在CCS IDE 中建立LHM.pjt工程,用汇编语言编写处理主程序fir.asm。

另外根据板上的存储器配置方式,编写存储器配置文件fir.cmd文件,将MATLAB生成的LHM.h和input1.dat文件拷贝到LHM.pjt工程文件夹下,进行编译、,生成可执行文件LHM.out。

(3)加载初始化data数据,图5.8所示。

图5.8 data初始化图运行程序,查看输入输出波形,修改相应参数进行调试。

5.2 实验过程中出现的错误及解决的办法(1)在MATLAB程序设计中,采样频率设置的过小,截止频率大于采样频率的一半,运行的时候图形出现错误。

(2)FIR.m中的采样频率要和开始设置时的采样频率一致,否则结果会出现偏差。

(3)在CCS中未定义标号,程序运行错误。

(4)在.h文件中未把coeff顶格写,编译时出现错误。

(5)未将fir.h和input.dat文件考入工程文件中。

(6)间接寻址过程中,程序中丢失。

(7) 在View的Graph中单击Time/frequency出现graph property dialog框,未修改抽样点数。

显示的图形出现差异5.3 CCS程序运行后的各种输出结果在View的Graph中单击Time/frequency出现graph property dialog框。

将显示类型,图形名称,起始地址,抽样点数,数据类型等分别进行设置,输出各种波形。

输出滤波前的信号时域波形。

首先,设置如图5.9所示,输出滤波前的信号时域波形。

图5.9 Graph property dialog设置框图单击OK后生成如下图5.10波形。

图5.10滤波前信号波形图图5.10为滤波前的信号,波形很杂乱,从时域上很难看出信号的周期性。

修改相应设置,输出如图5.11所示滤波前信号频谱。

图5.11滤波前信号频谱波形图经过滤波后,时域波形频谱波形如图5.12和5.13所示。

图5.12 滤波后信号时域波形图图5.13 滤波后信号频谱图由上述的所有截图可知,输入参数中,通带截止频率和阻带截止频率是比较重要的两个参数,不宜过小,过小滤掉的高频成分太多,很难还原出远波形的形状,也不宜过大,过大滤波效果欠佳。

在本课程设计中,通带截止频率选用4000Hz,阻带截止频率选用4500Hz,因此,显示图形时的,时域显示的抽样点数为1024,频域显示的带宽为0.5Hz。

对比滤波前后信号的时域图5.10和5.12、频谱波形图5.11和5.13可以知道,滤波前的时域信号的波形图的波形很杂乱,很难看出信号的周期性,滤波后周期性也相对的明显起来了;滤波前信号分布在整个频带上,滤波后阻带X围内的基本被滤掉,这些都可以从上述截图看出。

第6章结论与体会通过本次课程设计,让我了解了数字滤波是信号处理技术中的重要部分,研究了数字滤波器的基本理论知识以及它实现方法。

学习了数字滤波器的结构、设计理论,掌握了各种数字滤波器的原理和特性。

并且复习了MATLAB的相关知识,并且利用MATLAB与CCS设计了低通滤波器以及高通滤波器,还研究了如何在定点DSP 中实现数字滤波器的算法,学到了16位定点DSP芯片TMS320C5402的硬件、软件结构和特性,掌握了CCS环境下的程序开发方法、调试工具的使用及优化级别的选择等。

研究了MATLAB环境下FIR数字滤波器的设计方法,利用MATLAB软件编程实现FIR滤波器设计。

利用DSP来快速设计FIR数字滤波器的方法,寻找系数的快速传递,MATLAB中调试仿真DSP程序。

DSP作为一门新兴学科,越来越引起人们的关注,目前已广泛应用在各个领域。

20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。

数字信号处理是(DSP)利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合们需要的信号形式。

数字信号处理(DSP)是围绕着数字信号处理的理论、实现和应用等几个方面发展起来的。

数字信号处理在理论上的发展推动了数字信号处理应用的发展。

反过来,数字信号处理的应用又促进了数字信号处理理论的提高。

而数字信号处理的实现则是理论和应用之间的桥梁。

数字信号处理DSP是以众多学科为理论基础的,它所涉及的X围极其广泛。

所以在今后的工作和学习生活中,综合运用模拟电子、数字电子和DSP基本原理等课程中所学的理论知识去独立完成一个项目的设计。

不仅要完善以上的MATLAB设计方法,更要学会利用多种途径设计各种DSP最小系统,熟练C语言编程。

参考文献[1]戴明桢等编著.TMS320C54X DSP 结构原理及应用. :航空航天大学,第2版,2007;[2]彭启琮编著.DSP技术的发展与应用.:高等教育,2002;[3]胡广书编著.数字信号处理理论、算法与实现.:清华大学,2005;[4]合众达电子技术XX编著.SEED-DTK系列实验手册.合众达电子技术XX出版,2007。

[5]李真芳,苏涛等.DSP程序开发一MATLAB调试及直接目标代码生成「M].XX:XX电子科技大学,2003.87--163.[6] 楼顺天,李博函.基于MATLAB的系统分析与设计一信号处理[M].XX:XX电子科技大学,1998.81--88.[7]王秀芳,关凌涛.基于MatLab与DSP的滤波器的快速设计方法[期刊文章].现代计算机,2008,总第二七七期:97--99[8]赵秀玲.基于定点DSP的FIR数字滤波器的研究与设计[硕士论文].曲阜师X大学,2007.15--32[9]罗军辉,罗勇江等.MATLAB在数字信号处理中的应用「M].:机械工业,2005.63--128.附件:源程序清单DSP 实现FIR滤波的关键技术用线性缓冲区实现FIR滤波器程序清单:.title “FIR1.ASM”.mmregs.def startx .usect “x”,8PA0 .set 0PA1 .set 1.dataCOEF:.word 1*32768/10.word 2*32768/10.word -4*32768/10.word 3*32768/10.word -4*32768/10.word 2*32768/10.word 1*32768/10.textstart: SSBX FRCTSTM #x+7,AR2STM #6,AR0LD #x+1,DPPORTR PA1,x+1FIR1: RPTZ A,#6MACD *AR2-,COEF,ASTH A,*AR2PORTW *AR2+,PA0BD FIR1PORTR PA1,*AR2+0.end用循环缓冲区实现FIR滤波器程序清单:.title “FIR2.ASM”.mmregs.def start.bss y,1xn .usect “xn”,7b0 .usect “b0”,7PA0 .set 0PA1 .set 1.datatable: .word 1*32768/10.word 2*32768/10.word 3*32768/10.word 4*32768/10.word 5*32768/10.word 6*32768/10.word 7*32768/10.textstart: SSBX FRCTSTM #b0,AR1RPT #6MVPD table,*AR1+STM #xn+6,AR2STM #b0+6,AR3STM #7,BKSTM #-1,AR0LD #xn,DPPORTR PA1,xnFIR2: RPTZ A,#6MAC *AR2+0%,*AR3+0%,ASTH A,yPORTW y,PA0BD FIR2PORTR PA1,*AR2+0%.end汇编程序清单lhm.h文件内容:.datacoeff .word -85, -64, -61, -36, 8, 62, 110, 136, 131.word 96, 42, -11, -44, -44, -11, 39, 85, 106.word 88, 37, -29, -83, -101, -73, -7, 70, 124.word 131, 82, -5, -96, -151, -144, -72, 37, 140.word191, 162,61, -76, -191, -231, -174, -35, 132.word256, 278, 180, -7, -208, -337, -330, -176, 72.word316, 445, 392, 156, -178, -475, -599, -470, -108.word 361, 745, 857, 594, -6, -748, -1336, -1456, -893 .word 386, 2192, 4154, 5816, 6768, 6768, 5816, 4154, 2192.word 386, -893, -1456, -1336, -748, -6, 594, 857, 745.word 361, -108, -470, -599, -475, -178, 156, 392, 445.word316, 72, -176, -330, -337, -208, -7, 180, 278.word256, 132, -35, -174, -231, -191, -76, 61, 162.word 191, 140, 37, -72, -144, -151, -96, -5, 82.word 131, 124, 70, -7, -73, -101, -83, -29, 37.word 88, 106, 85, 39, -11, -44, -44, -11, 42.word 96, 131, 136, 110, 62, 8, -36, -61, -64.word-85Fir.asm内容:.title "fir.asm".mmregs.global _c_int00ORDER .set 154D_LEN .set 1024 ; The Length of Input Dataxn .usect "xn", (ORDER-1)a0 .usect "a0", (ORDER-1)input .usect "input", D_LENoutput .usect "output", D_LEN.copy "HM.h" ; Get coefs from "coef.h".text.asg AR0, FIR_INDEX.asg AR2, FIR_DATA.asg AR3, FIR_COEF.asg AR5, DATA_IN.asg AR6, DATA_OUT_c_int00:SSBX FRCTSTM #a0,FIR_COEF ; Copy a0(coefs) to FIR_COEF(AR3)RPT #ORDER-1MVPD #coeff,*FIR_COEF+STM #1, FIR_INDEXSTM #xn, FIR_DATA ; Copy xn(data) to FIR_DATA(AR2)RPTZ A,#ORDER-1STL A, *FIR_DATA+STM #(xn+ORDER-1), FIR_DATASTM #(a0+ORDER-1), FIR_COEFSTM #input, DATA_IN ; Get data from "input"STM #output, DATA_OUT ; Write data to "output"STM #D_LEN-1, BRCRPTBD next-1STM #ORDER, BKLD *DATA_IN+, AFIR: STL A, *FIR_DATA+%RPTZ A, (ORDER-1)MAC *FIR_DATA+0%, *FIR_COEF+0%, A ; FIRSSTH A, *DATA_OUT+nextFIR_END:B FIR_END.endFIR.m的程序如下:fs=40000;%/采样HzN=1024 %数据个数T=1/fs;%采样周期n=0:N-1;df=n*(fs/N)%待滤波信号波形xin=randn(1,1024)figure(1)plot(xin)%待滤波信号频谱xinff=abs(fft(xin));figure(2)plot(df,xinff)%滤波后信号波形y_filter_out=filter(B,1,xin)% Y = FILTER(B,A,X)figure(3)plot(y_filter_out)%滤波后信号频谱yff=fft(y_filter_out);figure(4)plot(df,yff)xin=xin/max(xin);%归一化xto_ccs=round(32767*xin)%取整fid=fopen('input1.dat','w');%打开文件fprintf(fid,'1651 1 0 0 0\n');%输出文件头fprintf(fid,'%d\n',xto_ccs);%输出fclose(fid);。

相关主题