FIR滤波器的DSP实现_第1页
FIR滤波器的DSP实现_第2页
FIR滤波器的DSP实现_第3页
FIR滤波器的DSP实现_第4页
FIR滤波器的DSP实现_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

FIR滤波器的DSP实现

FIR滤波器的DSP实现1线性缓冲区法2循环缓冲区法3系数对称FIR滤波器的DSP实现返回首页数字滤波是DSP的最基本应用,利用MAC(乘、累加)指令和循环寻址可以方便地完成滤波运算。两种常用的数字滤波器:FIR(有限冲激响应)滤波器和IIR(无限冲激响应)滤波器的DSP实现。设FIR滤波器的系数为h(0),h(1),...,h(N-1),X(n)表示滤波器在n时刻的输入,则n时刻的输出为:

(7-1)其对应的滤波器传递函数为:如图7-10所示为横截型(又称直接型或卷积型)FIR数字滤波器的结构图。图7-10横截型FIR数字滤波器的结构图(7-2)线性缓冲区法又称延迟线法。其方法是:对于n=N的FIR滤波器,在数据存储器中开辟一个N单元的缓冲区,存放最新的N个样本;滤波时从最老的样本开始,每读一个样本后,将此样本向下移位;读完最后一个样本后,输入最新样本至缓冲区的顶部。以上过程,可以用N=6的线性缓冲区示意图来说明,如图7-11所示

1线性缓冲区法图7-11N=6的线性缓冲区示意图返回本节2循环缓冲区法图7-12说明了使用循环寻址实现FIR滤波器的方法。对于N级FIR滤波器,在数据存储区开辟一个称为滑窗的具有N个单元的缓冲区,滑窗中存放最新的N个输入样本值。每次输入新的样本时,新的样本将改写滑窗中最老的数据,其他数据则不需要移动。图7-12FIR滤波器循环缓冲区存储器图【例7-12】用循环缓冲区和双操作数寻址方法编写实现FIR滤波的程序。1.FIR滤波器设计设计一个FIR低通滤波器,通带边界频率为1500Hz,通带波纹小于1dB;阻带边界频率为2000Hz,阻带衰减大于40dB;采样频率为8000Hz。FIR滤波器的设计可以用MATLAB窗函数法进行。2.产生滤波器输入信号的文件按照通常的程序调试方法,先用Simulator逐步调试各子程序模块,再用硬件仿真器在实际系统中与硬件仪器联调。使用CCS的Simulator进行滤波器特性测试时,需要输入时间信号x(n)。本例设计一个采样频率Fs为8000Hz,输入信号频率为1000Hz和2500Hz的合成信号,通过设计的低通滤波器将2500Hz信号滤掉,余下1000Hz信号。3.编写FIR数字滤波器的汇编源程序FIR数字滤波器汇编程序fir.asm如下:************一个FIR滤波器源程序fir.asm*****************.mmregs.globalstart.def start,_c_int00INDEX .set 1KS .set256 ;输入样本数据个数COEF_FIR .sect"COEF_FIR" ;FIR滤波器系数N .set17 ;FIR滤波器阶数.word0,158,264,-290,-1406,-951,3187,9287,12272.word9287,3187,-951,-1406,-290,264,158,0.dataINPUT .copy"firin.inc" ;输入数据在数据区0x2400OUTPUT .space 1024 ;输出数据在数据区0x2500COEFTAB .usect "FIR_COEF",NDATABUF .usect "FIR_BFR",NBOS .usect "STACK",0FhTOS .usect "STACK",1.text.asg AR0,INDEX_P.asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针.asg AR5,COEF_P ;FIR系数表指针.asg AR6,INBUF_P ;模拟输入数据指针.asg AR7,OUTBUF_P;FIR滤波器输出数据指针_c_int00bstartnopnopstart: SSBx FRCT ;小数乘法编程时,设置FRCT(小数方式)位MVPD #COEF_FIR,*COEF_P+STM #INDEX,INDEX_P STM #DATABUF,DATA_P ;数据循环缓冲区清零RPTZ A,#N-1STL A,*DATA_P+ STM #(DATABUF+N-1),DATA_P;数据循环缓冲区指针指向x[n-(N-1)]STM #COEFTAB,COEF_P STM #COEFTAB,COEF_P ;将FIR系数从程序存储器移到数据存储器RPT #N-1FIR_TASK:STM #INPUT,INBUF_PSTM #OUTPUT,OUTBUF_P

STM #KS-1,BRC RPTBD LOOP-1STM #N,BK ;FIR循环缓冲区大小LD *INBUF_P+,A ;装载输入数据FIR_FILTER: ;FIR滤波运算STL A,*DATA_P+% ;用最新的样本值替代最旧的样本值RPTZ A,N-1MAC *DATA_P+0%,*COEF_P+0%,A STH A,*OUTBUF_P+LOOP:EEND B EEND.end4.编写FIR滤波器链接命令文件对应以上汇编程序的链接命令文件fir.cmd如下:fir.obj-m fir.map-o fir.outMEMORY{PAGE0: ROM1(RIX) :ORIGIN=0080H,LENGTH=100HPAGE1: INTRAM1(RW):ORIGIN=2400H,LENGTH=0200HINTRAM2(RW):ORIGIN=2600H,LENGTH=0100HINTRAM3(RW):ORIGIN=2700H,LENGTH=0100H B2B(RW) :ORIGIN=0070H,LENGTH=10H}SECTIONS{.text : {}>ROM1 PAGE0 .data: {}>INTRAM1PAGE1FIR_COEF:{}>INTRAM2PAGE1FIR_BFR:{}>INTRAM3PAGE1.stack: {}>B2B PAGE1}5.CCS集成开发环境下上机操作过程(1)在CCS上建立fir工程并运行fir.out程序。

(2)观察输入信号的波形及频谱(如图7-13~7-15所示)。(3)观察输出信号的波形及频谱(如图7-16、7-17所示)。图7-13Graph属性设置窗口图7-14输入信号的时域波形图7-15输入信号的频谱图图7-16滤波器输出信号时域波形图7-17滤波器输出信号频谱图返回本节3系数对称FIR滤波器的DSP实现1.在数据存储器中开辟两个循环缓冲区:New循环缓冲区中存放N/2=4个新数据(设N=8);Old循环缓冲区中存放4个老数据。循环缓冲区的长度为N/2。缓冲区指针AR2指向New缓冲区中最新的数据;AR3指向Old缓冲区中最老的数据,并在程序存储器中设置系数表,如图7-18所示。2.(AR2)+(AR3)→AH(累加器A的高位)(AR2)-1→AR2,(AR3)-1→AR33.将累加器B清0,重复执行以下操作N/2次(i=0,1,2,3):(AH)×系数ai+(B)→B,系数指针(PAR)加1(AR2)+(AR3)→AH,AR2和AR3减

温馨提示

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

最新文档

评论

0/150

提交评论