IIR滤波器的DSP实现一、设计目的1、进一步了解滤波器的原理,了解IIR滤波器的设计过程。2、了解CCS的使用方法,以及掌握基本编程语言。3、掌握CCS设计IIR滤波器。4、掌握CCS工程的建立,源文件的汇编、连接以及调试程序,并且观察其输入、输出波形。二.设计内容用DSP汇编语言编程,实现IIR运算,对产生的合成信号,滤除信号中高频成分,观察滤波前后的波形变化。三、滤波器的简介1、数字滤波器原理数字滤波是数字信号处理的一部分。数字信号处理主要是研究用数字或符号的序列来表示信号波形,并用数字的方式去处理这些序列,把它们改变成在某种意义上更为有希望的形式,以便估计信号的特征参量,或削弱信号中的多余分量和增强信号中的有用分量。具体来说,凡是用数字方式对信号进行滤波、变换、调制、解调、均衡、增强、压缩、估值、识别、产生等加工处理,都可纳入数字信号处理领域。数字信号处理学科的一项重大进展是关于数字滤波器设计方向的研究。描述离散系统输出与输入关系的卷积和差分方程只是给数字信号滤波器提供运算规则,使其按照这个规则完成对输入数据的处理。时域离散系统的频域特性:其中、分别是数字滤波器的输出序列和输入序列的频域特性(或称为频谱特性),是数字滤波器的单位取样响应的频谱,又称为数字滤波器的频域响应。输入序列的频谱经过滤波后,因此,只要按照输入信号频谱的特点和处理信号的目的,适当选择,使得滤波后的满足设计的要求,这就是数字滤波器的滤波原理。2、iir滤波器数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。IIR滤波器与FIR滤波器相比,具有相位特性差的缺点,但它的结构简单,运算量小,具有经济、高效的特点,并且可以用较少的阶数获得很高的选择性。因此也得到了较为广泛的应用。IIR数字滤波器的特征是,具有无限持续时间冲激响应,需要用递归模型来实现,其差分方程为:系统函数为:设计IIR滤波器的任务就是寻求一个物理上可实现的系统函数H(z),使其频率响应H(z)满足所希望得到的频域指标,即符合给定的通带截止频率、阻带截止频率、通带衰减系数和阻带衰减系数。四、平台简介CCS的全称是CodeComposerStudio,它是美国德州仪器公司(TexasInstrument,TI)出品的代码开发和调试套件。TI公司的产品线中有一大块业务是数字信号处理器(DSP)和微处理器(MCU),CCS便是供用户开发和调试DSP和MCU程序的集成开发软件。CCS是一种针对TMS320系列DSP的集成开发环境,在Windows操作系统下,采用图形接口界面,提供有环境配置、源文件编辑、程序调试、跟踪和分析等工具。CCS有两种工作模式,即:软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。CCS的开发系统主要由以下组件构成:①TMS320C54x集成代码产生工具;②CCS集成开发环境;③DSP/BIOS实时内核插件及其应用程序接口API;④实时数据交换的RTDX插件以及相应的程序接口API;⑤由TI公司以外的第三方提供的各种应用模块插件。CCS的功能十分强大,它集成了代码的编辑、编译、链接和调试等诸多功能,而且支持C/C++和汇编的混合编程,其主要功能如下:①具有集成可视化代码编辑界面,用户可通过其界面直接编写C、汇编、.cmd文件等;②含有集成代码生成工具,包括汇编器、优化C编译器、链接器等,将代码的编辑、编译、链接和调试等诸多功能集成到一个软件环境中;③高性能编辑器支持汇编文件的动态语法加亮显示,使用户很容易阅读代码,发现语法错误;④工程项目管理工具可对用户程序实行项目管理。在生成目标程序和程序库的过程中,建立不同程序的跟踪信息,通过跟踪信息对不同的程序进行分类管理;⑤基本调试工具具有装入执行代码、查看寄存器、存储器、反汇编、变量窗口等功能,并支持C源代码级调试;⑥断点工具,能在调试程序的过程中,完成硬件断点、软件断点和条件断点的设置;⑦探测点工具,可用于算法的仿真,数据的实时监视等;⑧分析工具,包括模拟器和仿真器分析,可用于模拟和监视硬件的功能、评价代码执行的时钟;⑨数据的图形显示工具,可以将运算结果用图形显示,包括显示时域/频域波形、眼图、星座图、图像等,并能进行自动刷新;⑩提供GEL工具。利用GEL扩展语言,用户可以编写自己的控制面板/菜单,设置GEL菜单选项,方便直观地修改变量,配置参数等;四、源程序(1)汇编语言源成序(iir.asm).global_iir,_init,_outdata_iirbsetfrctsub#1,t0movt0,mmap(csr)addt0,ar0movxar2,xdpmovar2,cdpmov#0,ac0rptcsrmacmz*ar0-,*cdp+,ac0addt0,ar1movxar3,xdpmovar3,cdprptcsrmacmz*ar1-,*cdp+,ac0mar*ar1+movhi(ac0),*ar1movhi(ac0),t0bclrfrctret2.链接命令文件-stack0x0500-sysstack0x0500-heap0x1000-c-u_Reset-lrts55.libMEMORY{PAGE0:RAM(RWIX):origin=0x000100,length=0x01ff00ROM(RIX):origin=0x020100,length=0x01ff00VECS(RIX):origin=0xffff00,length=0x000200PAGE2:IOPORT(RWI):origin=0x000000,length=0x020000}SECTIONS{.textROMPAGE0.dataROMPAGE0.bssRAMPAGE0.constRAMPAGE0.sysmemRAMPAGE0.stackRAMPAGE0.cioRAMPAGE0.sysstackRAMPAGE0.switchRAMPAGE0.cinitRAMPAGE0.pinitRAMPAGE0.vectorsVECSPAGE0.ioportIOPORTPAGE2}3.C程序#includemath.h#definesignal_1_f500#definesignal_2_f10000#definesignal_sample_f25000#definepi3.1415926#defineIIRNUMBER_L2#definebufer_L256intN_L=IIRNUMBER_L;intdata_in[bufer_L];intout[bufer_L];intx[IIRNUMBER_L+1];inty[IIRNUMBER_L+1];intk=0;intbufer=bufer_L;intfBn[IIRNUMBER_L]={0,0x634a};intfAn[IIRNUMBER_L]={0xe5c,0xe5c};externintiir(int*x,int*y,int*fAn,int*fBn,intN_L);externintinit(int*,int*,int);externintoutdata(int*,int,int);voidinputwave();voidmain(){intiirout;inputwave();init(x,y,N_L);while(1){x[0]=data_in[k];iirout=iir(x,y,fAn,fBn,N_L);outdata(out,iirout,bufer);k++;if(k=bufer_L){k=0;}}}voidinputwave(){floatwt1;floatwt2;inti;for(i=0;i=bufer_L;i++){wt1=2*pi*i*signal_1_f;wt1=wt1/signal_sample_f;wt2=2*pi*i*signal_2_f;wt2=wt2/signal_sample_f;data_in[i]=(cos(wt1)+cos(wt2))/2*32768;}}在CCS内编写以上程序通过加载运行等操作我们可以得到得到输入,输出的时域与频域波形图。六、实验结果及分析1.输入信号1输入信号波形属性2输入信号时域波形图3.输入波形频域图2.输出波形4输出波形属性:5输出时域图:6输出频域图:3.分析仿真结果:有仿真输入波形时域是混合波的叠加,在频域分析时我们可以看出该输入信号是一低频和一高频的叠加。当我们将该信号通过一IIR滤波器时,我们从输出波形看到,时域是一余弦波,频域也只保留了低频频率成分,这说明混合信号通过IIR滤波器后,高频成分被滤除,符合滤波器功能,因此CCS可以作为一种模拟滤波器功能的软件。七、设计心得、体会通过这次的DSP课程设计,我收获很大。虽然在刚接触CCS时我感觉有点困难,但是我并没有被困难吓到,相反我当时特想学会运用它。于是我和同学们一起研究,终于我们从CCS的安装到CCS的系统配置,再到CCS基本操作的练习与运用,再到后来学习怎样创建CCS项目……就这样我们慢慢的了解了CCS并学会了它的简单操作与运用。而本次我们课设要在CCS下实现IIR滤波器的功能,创立源程序是关键也是难点,这对于刚刚了解CCS的我们绝对是一考验,好在大家都很用心,刚开始我们不会建立源程序,也不会汇编,于是我们互相讨论并向老师请教,慢慢的一切都迎刃而解了,到编译与运行时,看到没有错误时心里很开心,当看到输入与输出时域频域波形和理论吻合时,终于松了一口气。这次课设让我们深刻体会到CCS可以作为一种软件为我们的滤波器提供模拟环境,可以极大的提高效率,使我们充分认识到它的强大与优越性。这次课设也是我体会到DSP行业的发展对于整个社会来说有着推动作用,所以做为电子行业的人来说,我们应该掌握这门技术,最后我还是想说这次课设我们每一个人的付出都是值得的,以后我会更加努力学习这方面的知识。