DSP课程设计-FIR滤波器设计(23页).doc
-DSP课程设计报告题目:FIR滤波器设计 学院:电气信息学院 专业:通信工程 姓名: 学号: 指导老师:曹玉英 一、设计目标设计一个FIR高通滤波器,通带边界频率为2khz,通带纹波小于1dB,采样频率为8khz,实现当多个频率的输入信号输入时只保留大于2khz的信号功能,其中FIR滤波器的设计可以用MATLAB窗函数法进行。二、算法研究1. FIR的原理和参数生成公式FIR数字滤波器是非递归性的线性时不变因果系统,这样的系统的差分方程可以表示为: (2.1)令输入信号x(n)=(n),代入(2.1)式,有=a0(n)+a1(n-1)+···+an-1n-(N-1) (2.2) 这时的y(n)即为冲激响应h(n)。由(2.2)式很容易得到 h(0)=a0,h(1)=a1, ···,h(N-1)=an-1;又由(2.2)式可知,当n<0以及n>N-1时,h(n)=0,即这个系统的冲激响应是有限长度的,这样的滤波器就叫做有限冲激响应(FIR)滤波器。(2.3)将ai=h(i)(i=0,1, ···,N-1)代入(2.2)式,得到(2.4)将(2.3)式的两边进行z变换后,可以得到FIR滤波器的系统函数:又由(2.4)式,有因此,FIR滤波器的系统函数H(z)的极点都位于z=0处,为N-1阶极点;而N-1个零点由冲激响应h(n)决定,一般来说,可以位于有限z平面的任何位置。由于FIR数字滤波器的极点都集中在单位圆内的原点z=0处,与系数h(n)无关,因此FIR滤波器总是稳定的,这是FIR数字系统的一大优点。2. 利用MATLAB计算滤波系数用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位FIR数字滤波器的设计。语法:b=fir1(n,Wn) b=fir1(n,Wn,ftype) b=fir1(n,Wn,Window) b=fir1(n,Wn,ftype,window) n:滤波器的阶数;Wn:滤波器的截止频率; ftype:用来决定滤波器的类型, 当ftype=high时,可设计高通滤波器; 当ftype=stop时,可设计带阻滤波器;Window:用来指定滤波器采用的窗函数类型,其默认值为汉明窗。3.编写产生滤波器输入信号的程序输入信号应该至少包含两种频率成分的正弦信号,一种信号频率小于2000hz,一种信号频率大于2000hz。可以再MATLAB中产生,也可编写DSP程序产生。三、开发平台1.MATLABMATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。2.CCSCCS(Code Composer Studio)是TI公司推出的针对TMS320系列DSP的集成开发环境。在CCS下,开发者可对软件进行编辑,编译,调试,代码性能测试和项目管理等所有工作,并能将程序下载到目标DSP上运行调试。在一个开放式的插件结构下,CCS内部集成了以下软件工具:1)C5000代码产生工具(包括C5000的编译器,汇编优化器,汇编器和连接器);2)软件模拟器(Simulator);3)实时基础软件DSP/BIOSTM ;4)主机与目标机之间的实时数据交换软件RTDXTM;5)实时分析和数据可视化软件;CCS不仅具有一系列的调试、分析能力,还提供了实时分析和数据可视化功能,大大降低了DSP系统的开发难度,使开发者可以将精力集中在应用开发上。四、参数计算1.利用MATLAB计算滤波系数利用MATLAB中的FDATOOL设计滤波器参数设置如图4-1,频域波形如图4-2。其中FDATool(Filter Design and Analysis Tool)是MATLAB信号处理工具箱的一种综合、简便的图形用户工具。通过该工具提供的先进可视化滤波器集成设计环境,用户可以方便地设计几乎所有的常规滤波器,包括FIR和IIR的各种设计方法。本次设计利用高通滤波器,选择最小滤波器阶次,采样频率Fs为8Khz,阻带边界频率为1800hz,通带频率设置为2000hz。参数设置完成后,点击design filter,即可生成如下滤波器的时域与频域图像。图4-1 FDATOOL生成滤波系数图4-2 设计滤波器的频域波形选择Targets中的Code composer studio(r)IDE,如图4-3示,在出现的对话框中选择输出文件类型为C header file,输出系数类型为signed 16-bit integer。点击OK, 选择路径,即可输出前一步设计出的FIR滤波器的系数表。图4-3 生成滤波器系数表文件2.利用MATLAB生成输入信号假设输入信号包括两种频率成分,其中一个信号频率设置为800hz,另一个设置为2500hz,用MATLAB产生,代码如下:i=0:1:255;xto_ccs=round(sin(2*pi*i*800/8000)+sin(2*pi*i*2500/8000)*32768/2)fid=fopen('input.dat','w');%打开文件 fprintf(fid,'1651 1 0 0 0n');%输出文件头 fprintf(fid,'%dn',xto_ccs);%输出fclose(fid);单击编译后生成input.dat文件。五、源程序1.c语言主程序:#include"stdio.h"#include"fdacoefs.h" /滤波系数文件#define N 111 / FIR滤波器的级数+1,本例中滤波器级数为110#define LEN 200 /待滤波的数据长度long yn;int inputLEN; /输入缓冲,在仿真时将从内存载入int outputLEN; /输出缓冲,直接存放在内存中void main() int i,j; int *x; for(j=0;j<LEN-1;j+) x=&inputj; yn=0; for(i=0;i<N-1;i+) yn+=Bi*(*x+); outputj=yn>>15; while(1);2.cmd连接器文件MEMORY PAGE 0:EPROG:o=0x1400,l=0x7c00 VECT:o=0xff90,l=0x80 PAGE 1:USERREGS:o=0x60,l=0x1c BIOSREGS:o=0x7c,l=0x4 IDATA:o=0x80,l=0x1380 EDATA:o=0x1400,l=0x8000 EDATA1:o=0x9400,l=0x4c00 SECTIONS .vectors:>VECT PAGE 0 .sysregs:>BIOSREGS PAGE1 .trcinit:>EPROG PAGE 0 .gblinit:>EPROG PAGE 0 .frt:>EPROG PAGE 0 .text:>EPROG PAGE 0 .cinit:>EPROG PAGE 0 .print:>EPROG PAGE 0 .sysinit:>EPROG PAGE 0 .bss:>IDATA PAGE 1 .far:>IDATA PAGE 1 .const:>IDATA PAGE 1 .switch:>IDATA PAGE 1 .sysmem:>IDATA PAGE 1 .cio:>IDATA PAGE 1 .MEM$obj:>IDATA PAGE 1 .sysheap:>IDATA PAGE 1 .stack:>IDATA PAGE 1 六、调试过程1.编译程序新建工程文件“liuying0202”,按照五中要求输入c语言源程序及cmd文件,将.c,.cmd,.lib加入工程中,rebuild all。调试结果如图6-1示。图6-1 rebuild all结果2.导入程序点击file按钮,选择load program,添加刚刚生成的liuying0202.out文件。如图6-2示。图6-2 加入.out文件3.导入数据点击file按钮,选择data中的load.选项,将利用MATLAB生成的inpu t.dat文件导入输入的信号波形文件,如图6-3示,点击确定后,弹出设置对话框,将导入的数据文件的起始地址设置为input,数据长度为200,page选择data,具体如图6-4示。图6-3 导入数据文件图6-4 设置导入数据格式4.设置观察窗口点击view按钮,选择graph中的time/frequency.进行设置,起始地址分别设置为:input 和output,数据大小设置为:200,采样频率设置为8Khz。如图6-5示。图6-5 设置观察窗口七、实验结果及分析1.输入信号如图7-1是输入信号时域波形,图7-2是输入信号频域波形。2.输出信号如图7-3是输出信号时域波形,图7-4是输出信号频域波形。图7-1 输入信号时域波形图7-2 输入信号频域波形图7-3 输出信号时域波形图7-4 输出信号频域波形3.结果分析通过四个观察窗口可以明显的观察到,本次设计的滤波器将频率为800hz的信号滤除,只留下了频率为2500hz的信号,实现了高通滤波器的滤波功能。但滤波的效果未达到最好,有一定干扰存在。八、总结采用MATLAB软件来辅助DSP平台实现FIR高通数字滤波器,大大简化了数字滤波器的设计,通过MATLAB的FDATOOL将滤波器的设计可视化,使设计滤波器变得简单易行,最后通过CCS软件的仿真图形说明了该设计验证的方法都是可行的,该设计成功的实现了高通滤波器的功能。通过本次课程设计,加深了对DSP课程概念的理解,巩固了课堂上所学的理论知识,并能很好的理解和掌握数字信号处理中的基本概念、基本原理、基本方法。同时掌握编程方法和解决实际问题的技巧。参考资料:1周利清等 数字信号处理 北京邮电大学出版社 2014年2邹彦等 DSP原理及应用 电子工业出版社 2014年3曹玉英 <dsp>实验指导书 西南石油大学 2014年4王秀芳等 基于MatLab与DSP的滤波器的快速设计方法现代计算机,2008,总第二七七期:97995 craftor FIR滤波器的设计使用Matlab和CCS 2009年补充部分一、修改程序实现低通滤波器:1.滤波系数文件修改如图补1-1示图补1-12.输入信号为f1=800hz,f2=3500hz,利用MATLAB生成。3.仿真结果如图补1-2示图补1-2二、修改程序实现带通滤波器1.修改滤波系数文件如图补2-1示图补2-12.输入信号为f1=500hz,f2=2400hz,f3=4500hz,利用MATLAB生成.dat文件如图补2-2示图补2-23.仿真结果如图补2-3示图补2-3三、修改程序实现带阻滤波器1.修改滤波系数文件如图补3-1示图补3-12.输入信号.dat文件用带通中使用过的数据文件3.仿真波形如图补3-2示图补3-2第 23 页-