基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现_第1页
基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现_第2页
基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现_第3页
基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现_第4页
基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、郑州航空工业管理学院电子通信工程系DSP原理及应用课程设计报告设计题目:基于TMS320F2812 DSP处理器的FIR滤波器的设计与实现学 号: 姓 名: 专 业: 物联网工程 设计日期: 指导老师:赵成 刘亚 王超梁 目 录1、 引言 在当今信息时代数字信号处理已成为一门极其重要的学科。数字信号处理在通信、语音、图像等众多相关领域得到了广泛的应用。数字信号处理(DSP)包括两重含义:数字信号处理技术(Digital Signal Processing)和数字信号处理器(Digital Signal Processor)。数字信号处理(DSP)是利用计

2、算机或专用处理设备,以数值计算的方法、对信号进行采集、滤波、增强、压缩、估值和识别等加工处理,借以达到提取信息和便于应用的目的,其应用范围涉及几乎所有的工程技术领域。 2、 在数字信号处理的应用中,数字滤波器很重要而且得到了广泛的应用。按照数字滤波器的特性,它可以被分为线性与非线性、因果与非因果、无限长冲击响应(IIR)与有限长冲击响应(FIR)等等。其中,线性时不变的数字滤波器是最基本的类型;IIR 滤波器的特征是具有无限持续时间冲激响应,而FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现也可以采用非递归的方式实现。 3、 目前FIR滤

3、波器的实现方法大致可分为三种:利用单片通用数字滤波器集成电路、DSP器件或者可编程逻辑器件实现。其中以使用通用DSP芯片实现方式较为简单,是一种实时、快速、特别适合于实现各种数字信号处理运算的微处理器,借助于通用数字计算机按滤波器的设计算法编出程序进行数字滤波计算。由于它具有丰富的硬件资源、改进的哈佛结构、高速数据处理能力和强大的指令系统而在通信、航空、航天、雷达、工业控制、网络及家用电器等各个领域得到广泛应用 。2、 设计目的(1)掌握用窗函数法设计FIR滤波器的原理及方法,熟悉线性纤维FIR滤波器的 幅频特性和相频特性,熟悉不同的窗函数对滤波器性能的影响。 (

4、2)掌握使用matlab编程的基本方法,学会利用fdatool 工具来快速设计满足需要的滤波器。 (3)掌握TMS320F2812 DSP处理器开发的程序框架结构,学习驱动TMS320F2812 DSP处理器程序编写并能使其正常工作。实习驱动ADC模块实现信号的实时采集与模数转换。 (4)掌握使用TMS320F2812 DSP处理器实现FIR数字低通滤波器的设计方法,并能够实时采集输入信号并滤除高频信号再通过SCI串口传输到计算机显示。三、设计要求 1、利用Matlab软件的FDATool工具设计FIR滤波器,并提取滤波器参

5、数; 2、在CCS集成开发环境下,利用第1步得到的滤波器参数,利用窗函数法设计FIR滤波器程序,观察输入信号及滤波后得到的输出信号的时域波形及FFT Magnitude波形; 3、利用TMS320F2812的ADC片内外设的外围电路实时采集的混频信号数据,使用1个51阶的FIR低通滤波器,在CCS中设计FIR滤波器程序实现滤波,观察相关波形及滤波效果,通过SCI接口将数据传送到计算机上; 4、(选做)利用TI公司的TLV320AIC23高性能立体声音频Codec芯片,通过MIC或音频接口采样音频信号,对采样的音频信号做滤波运算,进行低音加重处理,再将运算

6、过的音频数据通过扬声器播放出来四、总体设计 4.1利用Matlab软件的FDATool工具设计FIR滤波器4.1.1有限冲击响应数字滤波器的基础理论滤波器就是在时间域或频域内,对已知激励产生规定响应的网络,使其能够从信号中提取有用的信号,抑制并衰减不需要的信号。滤波器的设计实质上就是对提出的要求给出相应的性能指标,再通过计算,使物理可实现的实际滤波器频率响应特性逼近给出的频率响应特性。FIR 数字滤波器系统的传递函数为:              

7、;           å-=-=10)()()(H(z)NnnznbzXzY  (1) 由此得到系统的差分方程:       )1()1()1()1()()0()(-*-+××××××+-*+*=NnxNbnxbnxbny(2) 若FIR 数字滤波器的单位冲激响应序列为h(n),它就是滤波器系数向

8、量b(n)。传统的滤波器分析与设计均使用繁琐的公式计算,改变参数后需要重新运算,从而在分析与设计滤波器尤其是高阶滤波器时工作量特别大。这里应用MATLAB 设计FIR滤波器,根据给定的性能指标设计一个H(z),使其逼近这一指标,进而计算并确定滤波器的系数b(n),再将所设计滤波器的幅频响应、相频响应曲线作为输出,与设计要求进行比较,对设计的滤波器进行优化。设计完成之后将得到FIR滤波器的单位冲激响应序列h(n)的各个参数值。4.1.2 利用Matlab软件的FDATool设计FIR滤波器()  首先在命令窗口键入FDAtool命令,启动滤波器设计分析器,调出FDAtool界

9、面,如下图所示。 FDATool界面() 在Filter Type选项中选Lowpass,在Design Method中选择FIR滤波器,接着在FIR中选择Window (窗函数) 法。 () 然后在Filter Order 中选择Specify Order (为指定阶数),输入数值为“24”;在Opitions框中选中“Scale Passband”;在窗类型(Window:)下拉框选择“Blackman”。 () 在Frenquency Sp

10、ecification选项中,将fs(为采样频率)、fc (为通带截止频率)中分别键入30000 Hz和9600 Hz。 () 点击“Design Filter”按钮,完成滤波器的设计。具体参数及设计成功后的结果如下图所示。                     FIR低通滤波器设计 () 通过菜单选项Analysis 来分析滤波器的幅

11、频响应和相频响应特性。点击Analysis 中的Magnitude Response和Phase Response 对幅频和相频响应进行分析。如下图所示          幅频和相频响应进行分析() 在FDATool 中,选择Targets -> Generate C Header.,单击Generate按钮,选择路径,即可输出前一步设计出的 FIR滤波器的系数表。(默认的系数表文件为fda

12、coefs.h。如下图所示。 导出滤波器系数 ()  在Matlab中打开得到的fdacoefs.h的文件,如下图所示           从Matlab中打开的fdacoefs.h文件4.1.3提取滤波器参数取系数表中的数据小数点后3位有效值,得到如下内容:  Const float   B25=   0.0,0.0,0.001,-0.002,-0.002,0.01,-0.009,&#

13、160; -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,  -0.002,-0.002,0.001,0.0,0.0       4.2 CCS环境下FIR滤波器的设计及软件仿真4.2.1 程序流程图 4.2.2 在CCS集成开发环境下新建FIR滤波器工程() 实验准备 设置软件仿真模式,启动CCS。 () 建立工程 建立一个文件夹,存放

14、在D:FIR,将D:课程设计FIR滤波器Fir源程序文件夹下的工程全部复制到D:FIR,在CCS中打开D:FIRfirfir.pjt工程,打开的CCS集成开发环境如下图所示。   在CCS集成开发环境中打开工程4.2.3观察滤波前后的信号的时域波形及FFT Magnitude波形(1)编译工程文件生成fir.out文件,并通过File->Load Program装载该文件。 (2)设置波形时域观察窗口。  选择菜单ViewGraphTime/Frequency ,分别进行如下图所示进行设置以便观察输入/输出时域波形。输

15、入数据频域波形观察                       输出数据频域波形观察 (3)设置断点。 在程序fir.c中,有注释断点的语句上设置软件断点。 (4)运行并观察结果。 选择Debug菜单的Run项,或按F5键运行程序。观察到的图形如下图所示。 滤波前后的数据波形及FFT分析的对比图4.2.4 程序清单fir.c&#

16、160;程序 /#include "DSP281x_Device.h"     / DSP281x Headerfile Include File /#include "DSP281x_Examples.h"   / DSP281x Examples Include File /#include "f2812a.h"&

17、#160;#include"math.h" #define FIRNUMBER 25 /#define SIGNAL1F 1000 /#define SIGNAL2F 4500 /#define SAMPLEF  10000 #define PI 3.1415926 float InputWave(); float FIR(); float fHnFIRNU

18、MBER= 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, -0.002,-0.002,0.001,0.0,0.0                     &

19、#160; float fXnFIRNUMBER= 0.0  float fInput,fOutput; float fSignal1,fSignal2; float fStepSignal1,fStepSignal2; float f2PI; int i; float fIn256,fOut256; int nIn,nOut; main(void)     

20、;nIn=0; nOut=0;  f2PI=2*PI;  fSignal1=0.0;  fSignal2=PI*0.1;  fStepSignal1=2*PI/30;  fStepSignal2=2*PI*1.4;While   fInput=InputWave();   fInnIn=fInput;   nIn+; nIn%=256;   fOutput=

21、FIR();   fOutnOut=fOutput;   nOut+;   if ( nOut>=256 )       nOut=0;  /* 请在此句上设置软件断点 */         float InputWave()  for

22、0;( i=FIRNUMBER-1;i>0;i- )  fXni=fXni-1;  fXn0=sin(fSignal1)+cos(fSignal2)/6.0;  fSignal1+=fStepSignal1;   if ( fSignal1>=f2PI ) fSignal1-=f2PI;  fSignal2+=fStepSignal2;  if ( fSignal2>=

23、f2PI ) fSignal2-=f2PI;  return(fXn0);  float FIR()   float fSum;  fSum=0;  for ( i=0;i<FIRNUMBER;i+ )     fSum+=(fXni*fHni);    return(fSum);  fir.cmd&#

24、160; 程序 -l rts2800_ml.lib-stack 400h -heap 100 MEMORY     PAGE 0 : PROG(R)     : origin = 0x80000, length = 0x10000    PAGE 0 : BOOT(R)

25、     : origin = 0x3FF000, length = 0xFC0       PAGE 0 : RESET(R)    : origin = 0x3FFFC0, length = 0x2  /*PAGE 0 : VECTOR

26、S(R)  : origin = 0x3FFFC2, length = 0x3E*/    PAGE 1 : M0RAM(RW)   : origin = 0x000000, length = 0x400    PAGE 1 : M1RAM(RW)   :&#

27、160;origin = 0x000400, length = 0x400    PAGE 1 : L0L1RAM(RW) : origin = 0x008000, length = 0x2000    PAGE 1 : H0RAM(RW)   : origin = 0x3F80

28、00, length = 0x2000  SECTIONS     /* 22-bit program sections */    .reset   : > RESET,   PAGE = 0     /*vectors : >

29、0;VECTORS, PAGE = 0*/    .pinit   : > PROG,    PAGE = 0    .cinit   : > PROG,    PAGE = 0    .text  

30、;  : > PROG,    PAGE = 0    /* 16-Bit data sections */    .const   : > L0L1RAM, PAGE = 1    .bss    

31、0;: > L0L1RAM, PAGE = 1    .stack   : > M1RAM, PAGE = 1    .sysmem  : > M0RAM, PAGE = 1    /* 32-bit data sections&#

32、160;*/    .ebss    : > H0RAM, PAGE = 1    .econst  : > H0RAM, PAGE = 1    .esysmem : > H0RAM, PAGE = 1 4.3 对实时采样信号进行

33、滤波的FIR滤波器的实现4.3.1 程序清单#include "DSP281x_Device.h" / DSP281x Headerfile Include File #include "DSP281x_Examples.h" / DSP281x Examples Include File #include <math.h> #define pi 3.1415927

34、 int px256; int py256; double npass,h51, x, y, xmid51; int m=50; int n=256; / Prototype statements for functions found within this file. interrupt void adc_isr(void); /&#

35、160;Global variables used in this example: Uint16 LoopCount; Uint16 ConversionCount; void firdes(int m, double npass)       int t; for (t=0; t<=m; t+)   

36、;      ht = sin(t-m/2.0)*npass*pi)/(pi*(t-m/2.0);        if (t=m/2) ht=npass;    void main(void)       int xm,ym;    double&#

37、160;fs,fstop,r,rm;    int i,j,p,k; / PLL, WatchDog, enable Peripheral Clocks / This example function is found in the DSP281x_SysCtrl.c file.    InitSysCtrl(); / For&

38、#160;this example, set HSPCLK to SYSCLKOUT / 6 (25Mhz assuming 150Mhz SYSCLKOUT)    EALLOW; for (t=0; t<=m; t+)         ht = sin(t-m/2.0)*npass*pi)

39、/(pi*(t-m/2.0);        if (t=m/2) ht=npass;    void main(void)       int xm,ym;    double fs,fstop,r,rm;    int i,j,p,k; / PLL, WatchDog, enable Peripheral Clocks /&#

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论