1、个人收集整理 勿做商业用途 郑州航空工业管理学院 电子通信工程系 DSP原理及应用课程设计报告 设计题目:基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现 学 号: 101307412 姓 名: 李雪稳 专 业: 通信工程 设计日期: 2013年6月6日 指导老师: 赵成 马鹏阁 张松炜 邸金红
2、 目 录 一、引言 二、设计目的 三、设计要求 四、总体设计 4。1利用Matlab软件的FDATool工具设计FIR滤波器 4。1。1有限冲击响应数字滤波器的基础理论 4。1.2 利用Matlab软件的FDATool设计FIR滤波器 4.1。3提取滤波器参数 4。2 CCS环境下FIR滤波器的设计及软件仿真 4.2.1 程序流程图 4。2.2 在CCS集成开发环境下新建FIR滤波器工程 4.2。3观察滤波前后的信号的时域波形及FFT Magnitude波形 4。2.4 程序清单(FIR滤波器部分) 4.3 对实时采样信号进行滤波的FIR滤波器的
3、实现 4.3.1 程序清单 4。3。2 测试效果 五、总结 六、参考文献 基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现 一、引言 数字信号处理(DSP)包括两重含义:数字信号处理技术(Digital Signal Processing )和数字信号处理器( Digital Signal Processor )。在数字信号处理的基本方法中,滤波是应用非常广泛的一个环节,数字滤波器的理论与相关设计也一直都是人们研究的重点之一。数字滤波器根据其单位冲击响应函数的时域特性可分为两类:无限冲击响应(Infinite Impulse Response,IIR)
4、滤波器和有限冲击响应(Finite Impulse Response,FIR)滤波器.与 IIR滤波器相比,FIR的实现是非递归的。 使用通用DSP芯片实现滤波方式较为简单,是一种实时的,快速的,特别适合于实现各种数字信号处理运算的微处理器,借助于通用数字计算机按滤波器的设计算法编出程序进行数字滤波计算.由于它具有丰富的硬件资源,改进哈弗结构,高速数据处理能力和强大的指令系统而在很多领域得到广泛应用. 二、设计目的 1、掌握用窗函数法设计FIR滤波器的原理及方法,掌握使用matlab编程的基本方法。 2、掌握TMS320F2812 DSP处理器开发的程序框架结构,学习驱动TMS
5、320F2812 DSP处理器程序编写并能使其正常工作。实习驱动ADC模块实现信号的实时采集与模数转换。 三、设计要求 1、利用Matlab软件的FDATool工具设计FIR滤波器,并提取滤波器参数; 2、在CCS集成开发环境下,利用第1步得到的滤波器参数,利用窗函数法设计FIR滤波器程序,观察输入信号及滤波后得到的输出信号的时域波形及FFT Magnitude波形; 3、利用TMS320F2812的ADC片内外设的外围电路实时采集的混频信号数据,使用1个51阶的FIR低通滤波器,在CCS中设计FIR滤波器程序实现滤波,观察相关波形及滤波效果。 4、相关设备: PC机,CCS集成开
6、发环境,EXPIV型实验箱,XDS510仿真调试器,Matlab软件 四、总体设计 4.1利用Matlab软件的FDATool工具设计FIR滤波器 4.1。1有限冲击响应数字滤波器的基础理论 滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号.滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性逼近给出的频率响应特性。FIR 数字滤波器系统的传递函数为: (1) 由此得到系统的差分方程: (2) 若
7、FIR 数字滤波器的单位冲激响应序列为h(n),它就是滤波器系数向量b(n)。传统的滤波器分析与设计均使用繁琐的公式计算,改变参数后需要重新运算,从而在分析与设计滤波器尤其是高阶滤波器时工作量特别大.这里应用MATLAB 设计FIR滤波器,根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。设计完成之后将得到FIR滤波器的单位冲激响应序列h(n)的各个参数值。 4。1。2 利用Matlab软件的FDATool设计FIR滤波器 (1) 打开Matlab软件,首先
8、在命令窗口键入FDAtool命令,启动滤波器设计分析器,调出FDAtool界面。 (2) 在Filter Type选项中选Lowpass,在Design Method中选择FIR滤波器,接着在FIR中选择Window (窗函数) 法。 (3) 然后在Filter Order 中选择Specify Order (为指定阶数),输入数值为“24”;在Opitions框中选中“Scale Passband”;在窗类型(Window:)下拉框选择“Blackman”。 (4) 在Frenquency Specification选项中,将fs(为采样频率)、fact (为通带截止频率)中分别键入3
9、0000 Hz和9600 Hz。 (5) 点击“Design Filter"按钮,完成滤波器的设计。具体参数及设计成功后的结果如图所示。 设计完成后,可以通过菜单选项Analysis 来分析滤波器的幅频响应和相频响应特性。点击Analysis 中的Magnitude Response和Phase Response 对幅频和相频响应进行分析。 4。1。3提取滤波器参数 (6) 在FDATool 中,选择Targets —> Generate C Header。。。, 如图设置后,点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表。默认的系数表文件为fdacoe
10、fs.h。 (7) 在Matlab中打开得到的fdacoefs.h的文件,系数表如图 (8) 取系数表中的数据小数点后3位有效值,得到如下内容: const float B[25]= { 0。0,0。0,0.001,-0。002,—0.002,0.01,—0。009, -0.018,0。049,—0.02,-0.11,0.28,0。64,0.28, -0.11,—0。02,0。049,—0.018,—0。009,0。01, -
11、0。002,-0。002,0。001,0。0,0。0 }; 4。2 CCS环境下FIR滤波器的设计及软件仿真 4。2。1 程序流程图如下 初始化 输入低通滤波器各频率参数 构建滤波器频域特性波形 使用FDATool提取滤波器参数或用FIR滤波器计算程序计算得到滤波器参数 构建FIR滤波器进行滤波 无限循环 4.2.2 在CCS集成开发环境下新建FIR滤波器工程 (1)设置软件仿真模式,启动CCS. (2)建立一个文件夹,存放在D:\FIR,将D:\课程设计\FIR滤波器\Fir源程序文件夹下的工程全部复制到D:\FIR,在C
12、CS中打开D:\FIR\fir\fir。pjt工程,打开fir。c文件,编译生成fir.out文件,通过File—〉Load Program…装载该文件。 (3)设置波形时域观察窗口,选择菜单View→Graph→Time/Frequency… ,如图设置 输入数据时域波形观察 滤波后输出波形观察 (4)设置频域观察窗口,选择菜单View→Graph→Time/Frequency… ,分别进行如图设置 输入数据FFT分析图形观察 滤波后输出数据的FFT图形观察 4.2。3观察滤波前后的信号的时域波形及FFT Magnitude波形 (1)设置断点。在程序fir。
13、c中,有注释断点的语句上设置软件断点。 (2)运行并观察结果。选择Debug菜单的Run项,或按F5键运行程序.观察到的图形如下图所示。 4。2。4 程序清单 #include”math。h" #define FIRNUMBER 25 #define PI 3.1415926 float InputWave(); float FIR(); float fHn[FIRNUMBER]={ 0.0,0。0,0.001,—0.002,-0。002,0。01,—0。009, -0。018,0.049,-0.02,-0.11,0.28,0
14、64,0.28, —0.11,—0.02,0.049,—0。018,-0。009,0。01, —0.002,—0。002,0。001,0。0,0。0 }; float fXn[FIRNUMBER]={ 0.0 }; float fInput,fOutput; float fSignal1,fSignal2; float fStepSignal1,fStepSignal2; float f2PI; int i; float fIn[256],
15、fOut[256]; int nIn,nOut; main(void) { nIn=0; nOut=0; f2PI=2*PI; fSignal1=0。0; fSignal2=PI*0.1; fStepSignal1=2*PI/30; fStepSignal2=2*PI*1.4; while ( 1 ) { fInput=InputWave(); fIn[nIn]=fInput; nIn++; nIn%=256; fOutput=FIR(); fOut[nOut]=fOutput; nOut++; if ( n
16、Out>=256 ) { nOut=0; /* 请在此句上设置软件断点 */ } } } float InputWave() { for ( i=FIRNUMBER—1;i>0;i—— ) fXn[i]=fXn[i—1]; fXn[0]=sin(fSignal1)+cos(fSignal2)/6.0; fSignal1+=fStepSignal1; if ( fSignal1>=f2PI ) fSignal1—=f2PI; fSignal2+=fStepSignal2; if ( fSignal2〉=f2PI ) fSigna
17、l2-=f2PI;
return(fXn[0]);
}
float FIR()
{
float fSum;
fSum=0;
for ( i=0;i
18、 int px[256]; int py[256]; double npass,h[51], x, y, xmid[51]; int m=50; int n=256; interrupt void adc_isr(void); Uint16 LoopCount; Uint16 ConversionCount; void firdes(int m, double npass) { int t; for (t=0; t〈=m; t++) { h[t] = sin((t-m/2.0)*npass*pi)/(pi*(t—m/2.0));
19、 } if (t=m/2) h[t]=npass; } void main(void) { int xm,ym; double fs,fstop,r,rm; int i,j,p,k; InitSysCtrl(); EALLOW; SysCtrlRegs。HISPCP。all = 0x3; // HSPCLK = SYSCLKOUT/6 EDIS; DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTab
20、le(); EALLOW; PieVectTable。ADCINT = &adc_isr; EDIS; InitAdc(); PieCtrlRegs.PIEIER1。bit.INTx6 = 1; IER |= M_INT1; EINT; ERTM; LoopCount = 0; ConversionCount = 0; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; AdcRegs。ADCMAXCONV.all=0x0000;
21、 AdcRegs.ADCCHSELSEQ1。bit。CONV00=0x4; AdcRegs.ADCTRL2。bit.EVA_SOC_SEQ1=1; AdcRegs。ADCTRL2.bit。INT_ENA_SEQ1 = 1; EvaRegs。T1CMPR=0x0380; EvaRegs.T1PR=0x07FF; EvaRegs.GPTCONA。bit。T1TOADC = 1; EvaRegs。T1CON.all = 0x1042; k=0;
22、 fs = 250000; fstop = 20000; npass = fstop/fs; for (i=0; i〈=m; i++) { xmid[i]=0; } for(;;) { firdes(m, npass); for (i=0; i〈=n—1; i++) { xm = px[i]; x = xm/1023。0; for (p=0; p〈=m; p++) { xmid[m-p] = xmid[m—p—1
23、]; } xmid[0] = x; r = 0; rm= 0; for (j=0; j〈=m; j++) { r = xmid[j] * h[j]; rm = rm + r; } y = rm; ym = (int)(1023。0 * y); py[i] = ym; } k++; //加断点,观察波形 } } interrupt void adc_i
24、sr(void) { px[ConversionCount] = AdcRegs。ADCRESULT0 >〉4; if(ConversionCount == 256) { ConversionCount = 0; } else ConversionCount++; AdcRegs。ADCTRL2.bit。RST_SEQ1=1; AdcRegs.ADCST。bit。INT_SEQ1_CLR=1; PieCtrlRegs.PIEACK。all = PIEACK_GROUP1; return; } 4。
25、3.2 测试效果 如图所示 靠上的是滤波前时域波形,下面的是滤波后时域波形 分别为滤波前和滤波后的FFT分析图形 五、总结 DSP原理及应用是一门非常重要也是一门很注重动手能力的课程,通过这次课程设计,我学到了很多知识并且巩固了以前所学的很多软件和课程。但是还有一个问题没有解决如图,按照方法设计的阶数为什么是23而不是24呢?通过这次课程设计使我对dsp有了更深入的了解,我不仅对以前所学的知识有了较深刻的理解,而且动手能力、独立解决问题的能力有所提高。而且通过本次的课程设计我增加了对Matlab的认识,熟练地运用Matlab工具设计滤波参数,很好的加深了我对课程的理解,方便我
26、的思维。这次设计使我了解了MATLAB的使用方法,学会分析滤波器的优劣和性能,提高了分析和动手能力。 在这里我要由衷的感谢课程设计期间为我们辛勤值班的四位指导老师,尤其是我们的赵成老师,谢谢您们对我们的悉心指导,帮助我们梳理思路,给我们演示程序的编译运行,让我对DSP产生了浓厚的兴趣。 六、参考文献 [1] 赵成 DSP原理与应用 [2] 《数字信号处理教程》 程佩清 编著 清华大学出版社 [3] 《基于DSP的FIR滤波器的设计与实现》 长沙理工大学 指 导 教 师 评 语 成绩 指导教师 年 月 日






