FIR滤波器程序的编写_第1页
FIR滤波器程序的编写_第2页
FIR滤波器程序的编写_第3页
FIR滤波器程序的编写_第4页
FIR滤波器程序的编写_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签 错误!未定义书签目录1. 引言2. FIR滤波器基本原理 2.1两种FIR滤波器的框图及原理2.2用DSP实现的数字FIR滤波器的优点3. FIR滤波器的设计方法 4. FIR滤波器的c54x实现5. FIR滤波器的实例设计 5.1编写滤波器序列5.2汇编源程序主程序的编写5.3中断向量表的编写5.4相关的连接命令文件5.5程序在CCS C500C中编译 6. 设

2、计心得7. 参考文献11. 引言在数字信号处理中,滤波占有及其重要的地位。数字滤波是谱分析、 雷达信号处理、通信信号处理等应用中的基本处理算法,它能够满足滤 波器对幅度和相位的严格要求,解决了模拟滤波器所无法克服的电压漂 移、温度漂移和噪声等问题,同时有很高的可编程性和灵活性。数字滤 波是DSP最基本的应用领域,一个DSP芯片执行数字滤波算法的能力反 应了这种芯片的功能强弱,用 DSP实现的数字滤波器可以十分方便地改 变滤波器的特性。2. FIR滤波器基本原理2.1两种FIR滤波器的框图及原理对于FIR数字滤波器来说,它的实现一般采用非递归的算法,图2.1 给出的是直接型和转置型FIR滤波器的

3、机构图。输入x(nhoD输出y (n)(b)转置型横向滤波器图2.1直接型和转置型 FIR滤波器结构图FIR 数字滤波器的差分方程表达式为:y( n)= En h(i)x( n-i)其中N为FIR滤波器的阶数,FIR滤波器的单位脉冲响应h(n)是一个有 限长序列。在数字信号处理应用中往往需要设计线性相位的滤波器, FIR 滤波器在 保证幅度特性满足技术要求的同时,很容易做到严格的线性相位特性。 为了是滤波器满足线性相位条件,要求其单位脉冲响应 h(n) 为实序列, 且满足偶对称或奇对称条件,即 h(n)=h(N-1-n) 或 h(n)=-h(N-1-n) 。这 样,当N为偶数时,偶对称线性相位

4、FIR滤波器的差分方程表达式为:y(n)=刀N/2-1 h(i)(x( n-i)+x(N-1- n-i)由上可见, FIR 滤波器不断地对输入样本 x(n) 延时后,再作乘法累 加运算,将滤波结果y(n)输出,因此,FIR实际上是一种乘法累加运算。 而对于线性相位 FIR 而言,利用线性相位 FIR 滤波器系数的对称特性, 可以采用结构精简的 FIR 结构将乘法器数目减少一半,但加法器数目不 变,这时乘法操作数和加法操作次数是 1: 2。事实上,线性相位 FIR 滤 波器是用得最多的FIR滤波器。2.2用DSP实现的数字FIR滤波器的优点在数字滤波器中, FIR 滤波器的最主要的特点是没有反馈

5、回路,故 不存在不稳定的问题;同时,可以在幅度特性随意设置的同时,保证精 度、严格的线性相位。稳定和线性相位特性是 FIR 滤波器的突出优点。FIR 滤波器常表示为直接型和转置型两种结构,其功能是等效的。 在用专用DSP或 FPGA等硬件设计长阶数FIR滤波器时,常采用转置型结 构,因为这种结构便于设计成大量规则排列、 形式相同的乘法 /累加器阵 列,避免了直接型中的多输入加法器在长阶数时的实现困难。 在用通用定点DSP实现FIR滤波器时,更多的是采用直接型结构,对于 C54X来说,其单乘法器、双累加器结构更适合于对称FIR实现;如果采用转置结构,因为定点DSP仅乘法/累加器是32位或40位的

6、,数据存储 器都是16位的,用16位存储器保证FIR滤波器每级乘法/累加器输出的 中间结果比较麻烦,程序效率也降低了。3. FIR 滤波器的设计方法FIR 滤波器的设计方法主要有窗函数法和频率采样法,其中,窗函 数法是最基本的方法。窗函数法的过程是:设期望的滤波器理想响应为 Hd(ejw),需要寻找一个传递函数 H (ej=工N-1h(n)e -j 去逼近H(ej w), 其中最直接的方法就是将 H(ejJ的时域响应hd( n)用一个矩形窗FN (n) 进行截断,从而得到一个长度为 N的序列h(n),即令h(n)= h d(n) R n (n)理想响应Hd(ej)与其时域响应hd(n)也有Hd

7、(ej) = 2hd(n) e-j 的关系, 通常hd(n)是一个关于原点n = 0对称的无限长序列,截断后的h (n)还 应进行右移以形成一个因果的 FIR滤波器,即在nN,其中k是整数,N是FIR滤波器的级数,而且循环缓冲区的起始 地址必须对准2k边界,即循环缓冲区基地址的k个最低有效位必须为0, 如N= 31是,循环缓冲区必须从二进制地址 xxxx xxxx xxx0 00002开始。 可见,在循环寻址实现FIR滤波器时,首先将N值加载到BK寄存器中, 然后指定一个辅助寄存器 ARx指向循环缓冲区,并根据 ARx的低k位作 为循环缓冲区的偏移量进行所规定的寻址操作。寻址完成后,根据循环

8、寻址算法修正这个偏移量,并返回 ARx的低k为。下面是利用循环缓冲区和双操作数寻址方法实现的 FIR 滤波器程序。设N= 5,y (n)=a0x (n) +a1 (n-1 ) +a2 (n-2) +a3 (n-3) +a4(n-4、,且存放a0a4的系数表在ROI 中,存放数据的循环缓冲区在DARAI中。程序如下:.mmregs.defstart.bssy,1Xn.usect“”厂“xn”,5A0.usect“a0”,5PA0.set0PA1.set1.dataTabIe:.word1*32786/10;a0=0.1=0x0ccc.word2*32786/10;a1=0.2=0x1999.wo

9、rd3*32786/10;a2=0.3=0x2666.word4*32786/10;a3=0.4=0x3333.word5*32786/10;a4=0.5=0x4000.textStart:SSBXFRCT; 小数乘法STI#a0,AR1;AR1 指向 a0RPT#4; 传送 5 个系数至数据空间IVPDtabIe.*AR1+STI#xn+4,AR3;AR3指向 x (n-4)STI#a0+4,AR4;AR4指向a4STMSTM#5,BK#-1,AR0;循环缓冲区长度BQ 5;AR0 = -1,双操作数减量LD#xn,DPPORTRPA1,xn; 输入 x ( n)FIR:RPTZA,#4;A

10、 清零,共迭代 5次MAC*AR3+0%,*AR4+0%,A; 双操作数乘法累加STHA,y; 保存 y( n)PORTWy,PA0; 输出 y( n)BDFIR; 循环PORTRPA1,*AR3+0%; 输入新数据END5. FIR 滤波器的实例设计5.1 编写滤波器序列由已知的滤波器的系数可得滤波器的序列为:.data htab: .word.word.word.word.word.word.word.word.word.word.word.word.word.word.word-10*32768/1000 -10*32768/1000 40*32768/1000 60*32768/100

11、0 80*32768/1000 -50*32768/1000 -60*32768/1000 70*32768/1000 -80*32768/1000 -90*32768/1000 98*32768/1000 -90*32768/1000 80*32768/1000 -70*32768/1000 60*32768/1000.word-50*32768/1000.word-80*32768/1000.word60*32768/1000.word40*32768/1000.word-10*32768/1000.word-10*32768/1000.word00*32768/1000.word00*3

12、2768/1000.word00*32768/1000.word00*32768/1000.word00*32768/1000.word00*32768/1000.word00*32768/10005.2 汇编源程序主程序的编写采用循环缓冲区实现 FIR 滤波器的程序如下:.mmregs.includehtable.inc.includextable.inc.defstarthtabcnt.set20xtabcnt.set80STACK.usect.stack,30H.bssncnt,1.bssx_tab,80H,1.bssh_tab,80H,1.bssr_tab,80H,1.bssdb_ta

13、b,80H,1.asg 0 + FRAME_SZ, SAVE_AR1.asg 0 + REG_SAVE_SZ + FRAME_SZ, RETURN_ADDR.asg 0 + PARAM_OFFSET, h.asg 1 + PARAM_OFFSET, r.asg 2 + PARAM_OFFSET, db.asg 3 + PARAM_OFFSET, nh.asg 4 + PARAM_OFFSET, nxasg0, ncasgAR2, r_ptr; 结果连续asgAR3, h_ptr ;h连续滤波asgAR4, x_ptr ;x连续输入asgAR5, db_ptr; 中值连续asgBRC, rptb

14、_cnt; 记数start:SSBXSXMSSBXFRCT ;设置小数乘法STM#x_tab,x_ptr;AR指向bO单元RPT#(xtabcnt-1);设置传输次数MVPDxtab,*x_ptr+;系数 bi 传输至数据区STM#h_tab,h_ptr; h_tab 缓冲区清零RPT#(htabcnt-1)MVPDhtab,*h_ptr+STM#x_tab,x_ptrSTM#h_tab,h_ptrSTM#r_tab,r_ptrSTM#db_tab,db_ptr;设置双操作数减量LD #xtabcnt, A ;设置页指针 STLM A, rptb_cntLD #htabcnt, ASTLM A

15、, BKSUB#3, ASTLA, *(ncnt)RPTBDEND_LOOP-1;存贮0到AR0STM#1, AROMVDD *x_ptr+, *db_ptr; h * x 的和相加送入下一个y值MPY*h_ptr+O%, *db_ptr+O%, ARPT*(ncnt)MAC*h_ptr+O% , *db_ptr+O%, AMACR*h_ptr+O% , *db_ptr, A;存贮结果STHA, *r_ptr+END_LOOP: _end: RETURN:LDMdb_ptr, BLD#0, AXC1, AOVLD#1, A5.3 中断向量表的编写.sect .vectors.refstart.

16、align0x80RESET:BDstartSTM#200,SPnmi: RETE; branch to C entry point; 设置堆栈初植为 200; 中断返回NOPNOPNOP软件中断sint17 .space 4*16 sint18 .space 4*16 sint19 .space 4*16 sint20 .space 4*16 sint21 .space 4*16 sint22 .space 4*16 sint23 .space 4*16 sint24 .space 4*16 sint25 .space 4*16 sint26 .space 4*16 sint27 .spac

17、e 4*16 sint28 .space 4*16 sint29 .space 4*16 sint30 .space 4*16 int0: RETENOPNOPNOP int1: RETENOPNOPNOPint2: RETENOPNOPNOPtint: RETENOPNOPNOPrint0: RETENOPNOPNOPxint0: RETENOPNOPNOPrint1: RETENOPNOPNOPxint1: RETENOPNOPNOPint3: RETENOPNOPNOP.end5.4 相关的连接命令文件vectors.objabc.obj-o a1.out -m a1.map -e st

18、art MEMORYPAGE 0: EPROG: origin = 0x1400,len = 0x7c00VECT: origin = 0xff80, len = 0x80PAGE 1: USERREGS: origin = 0x60, len = 0x1cIDATA:EDATA:EDATA1:SECTIONS: origin = 0x7c, origin = 0x80, origin = 0x1400, origin = 0x9400,len = 0x4len = 0x1380len = 0x8000len = 0x4c00.vectors: VECT PAGE 0.sysregs: BIOSREGS PAGE 1.data: EPROG PAGE 0.te

温馨提示

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

评论

0/150

提交评论