dsp软件编程(fir滤波器)

上传人:小** 文档编号:57362309 上传时间:2018-10-21 格式:PPT 页数:28 大小:336KB
返回 下载 相关 举报
dsp软件编程(fir滤波器)_第1页
第1页 / 共28页
dsp软件编程(fir滤波器)_第2页
第2页 / 共28页
dsp软件编程(fir滤波器)_第3页
第3页 / 共28页
dsp软件编程(fir滤波器)_第4页
第4页 / 共28页
dsp软件编程(fir滤波器)_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《dsp软件编程(fir滤波器)》由会员分享,可在线阅读,更多相关《dsp软件编程(fir滤波器)(28页珍藏版)》请在金锄头文库上搜索。

1、FIR滤波器的DSP实现,在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。本节主要讨论FIR滤波器的基本结构、设计方法和DSP实现方法。,FIR滤波器的基本结构,数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。,一个线性移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:,x(n): 输入序

2、列,y(n): 输出序列,ai、bi : 滤波器系数, N: 滤波器的阶数。,若所有的ai均为0,则得FIR滤波器的差分方程:,进行z变换,可得FIR滤波器的传递函数:,FIR滤波器的结构 :,FIR滤波器的单位冲激响应h(n)为有限长序列。,偶对称线性相位FIR滤波器的差分方程:,N偶数,若h(n)为实数,且满足偶对称或奇对称的条件, 则FIR滤波器具有线性相位特性。偶对称:h(n)= h(N-1-n);奇对称:h(n)= -h(N-1-n)。,FIR滤波器的基本结构,在数字滤波器中,FIR滤波器具有如下几个主要特点:, FIR滤波器无反馈回路,是一种无条件稳定系统; FIR滤波器可以设计成

3、具有线性相位特性。,FIR滤波器的DSP实现,FIR滤波器的输出表达式:,y(n)=b0x(n)+b1x(n-1)+ +bn-1x(n-N+1),bi为滤波器系数,x(n)为滤波器在n时刻的输入,y(n)为n时刻的输出。,基本算法: 采用乘法累加运算。即不断地输入样本x(n),经过z-1延时后,再进行乘法-累加,最后输出滤波结果y(n)。,z-1算法的实现, 在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;, 从最老样本开始取数,每取一个数后,样本向下移位;, 读完最后一个样本后,输入最新样本并存入缓冲区的顶部。,线性缓冲区法,缓冲区顶部,最新样本,缓冲区底部,最老样

4、本,ARx,缓冲区:,顶部为低地址单元,存放最新样本;,底部为高地址单元,存放最老样本;,指针ARx指向缓冲区底部。,最新样本,数据存储器,最老样本,ARx,求y(n)的过程:,取数、移位和运算:, 以ARx为指针,按x(n-7)x(n)的顺序取数,每取一次数后,数据向下移一位,并完成一次乘法累加运算;, 当经过8次取数、移位和运算后,得y(n), 求得y(n)后,输入新样本x(n+1),存入缓冲区顶部单元;, 修改指针ARx,指向缓冲区的底部。,ARx,x(n-7),ARx,x(n-6),y(n)=y7=b7x(n-7)+0,x(n-6),ARx,x(n-5),y(n)=y6=b6x(n-6

5、)+y7,x(n-5),ARx,x(n-4),y(n)=y5=b5x(n-5)+y6,x(n-4),ARx,x(n-3),y(n)=y4=b4x(n-4)+y5,x(n-3),ARx,x(n-2),y(n)=y3=b3x(n-3)+y4,x(n-2),ARx,x(n-1),y(n)=y2=b2x(n-2)+y3,x(n-1),ARx,x(n),y(n)=y1=b1x(n-1)+y2,x(n),y(n)=b0x(n)+y1,PORTR,x(n+1),ARx,结果:, y(n),求y(n)的过程,算法:,结果:, y(n),取数顺序:,x(n-6)x(n+1),x(n-5),x(n-4),x(n-

6、3),x(n-2),x(n-1),x(n),x(n+1),最新样本:,x(n+2),x(n+2), y(n+1), y(n+2), y(n+3), y(n+4), y(n+5), y(n+6), y(n+7),ARx,算法:,Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地址单元移位来进行延时。,指令:,DELAY Smem ;(Smem) Smem+1,DELAY *AR3- ;AR3指向源地址,将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例如:,LD + DELAY LTD MAC + DELAY MACD,注意:用线性缓冲区实现z-1运算时

7、,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。,优点:,在存储器中新老数据的位置直观明了。,(2)循环缓冲区法,特点:, 在数据存储器中开辟一个N个单元的缓冲区(滑窗), 用来存放最新的N个输入样本; 从最老样本开始取数; 读完全部样本后,输入最新样本来代替最老样本,而 其他数据位置不变; 用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。,算 法,计算过程:, 以ARx为指针,按顺序取数,并修改指针; 每取1次数后,完成1次乘法累加计算;,缓冲区:,顶层为低地址单元,存放最新样本; 底层为高地址单元,存放最老样本; ARx指

8、向最老样本单元。,计算过程:, 每取1次数后,完成1次乘法累加计算; 求得y(n)后,输入新样本替代最老样本; 修改指针ARx,指向最新样本单元。,求y(n):,取数顺序:x(n-7)x(n)最新样本:x(n+1)ARx: 指向x(n-7)单元,实现N个循环缓冲区单元首尾相邻,可用BK寄存器按模间接寻址来实现。,常用指令:, *ARx+%,;增量、按模修正ARx addr=ARx,ARx=circ(ARx+1), *ARx-%,;减量、按模修正ARx addr=ARx,ARx=circ(ARx-1), *ARx+0%,;增AR0、按模修正ARx addr=ARx,ARx=circ(ARx+AR

9、0), *ARx-0%,;减AR0、按模修正ARx addr=ARx,ARx=circ(ARx-AR0), *+ARx(1K)%,;加(1K)、按模修正ARx addr=circ(ARx+1K),ARx=circ(ARx+1K),circ是根据BK寄存器中的缓冲区长度,对(ARx +1)、(ARx-1)、(ARx+AR0)、(ARx-AR0)和(ARx+1k)的值进行取模,使指针ARx指向缓冲区,实现循环缓冲区首尾相邻。,例如:(BK)=N=8,(AR1)=0060h,用*AR1+%间接寻址。,第一次寻址后,AR1指向0061h单元;第二次寻址后,AR1指向0062h单元; 第八次寻址后,AR

10、1指向0068h单元;将BK按8取模,AR1回到0060h单元。,if 0index+step BK index=index+stepelse if index+stepBKindex=index+step-BKelse if index+step N。,例如:N=31,k的最小值为5,则缓冲区的起始地址:XXXX XXXX XXX0 0000B,若N=32,k的最小值为6,缓冲区的起始地址: XXXX XXXX XX00 0000B,2. FIR滤波器的实现,C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法 -累加计算。而每个样值的乘法-累加

11、计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。,为了实现对应项乘积运算,输入的样值x(n)和滤波系数bi必须合理的存放,并正确初始化存储块和块指针。样值x(n)和滤波系数bi的存放可用线性缓冲区或循环缓冲区实现。,(1) 用线性缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,x,b,A,AR1,x(n-6),b6x(n-6)+A,AR1,双操作数寻址指令:MACD *AR1-,b,A,功能:A=A+(AR1)(b), AR1-1AR1,(AR1)(AR1+1),y(n)=b0x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),程序清单:.title “FIR1.

12、ASM”.mmregs.def startx .usect “x”,8PA0 .set 0PA1 .set 1.dataCOEF: .word 1*32768/10.word 2*32768/10.word -4*32768/10.word 3*32768/10.word -4*32768/10.word 2*32768/10.word 1*32768/10,;自定义数据空间,x,数据存储器,暂存y(n),x(n-1),x(n-2),x(n-3),x(n-4),x(n-5),x(n-6),程序存储器,COEF,b6,;定义b6=0.1,;定义b5=0.2;定义b4=-0.4;定义b3=0.3;

13、定义b2=-0.4;定义b1=0.2;定义b0=0.1,b5,b4,b3,b2,b1,b0,x(n),程序清单:.text start: SSBX FRCT STM #x+7,AR2STM #6,AR0LD #x+1|h9,DPPORTR PA1,x+1 FIR1: RPTZ A,#6MACD *AR2-,COEF,ASTH A,*AR2PORTW *AR2+,PA0BD FIR1PORTR PA1,*AR2+0.end,设置小数乘法,;设置AR2,;设置复位值AR0=6,;设置缓冲区首地址,;输入x(n),;A清0,设置迭代次数,;7次乘法累加和移位,;暂存y(n),;输出y(n),修改AR

14、2,;循环,输入最新数据, 修改 AR2=AR2+AR0,(2) 用循环缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,y,b0,xn,y(n)=b0x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),程序清单:.title “FIR2.ASM”.mmregs .def start.bss y,1 xn .usect “Xn”,7 b0 .usect “b0”,7 PA0 .set 0 PA1 .set 1.data table: .word 1*32768/10.word 2*32768/10.word 3*32768/10.word 4*32768/10.word 5

15、*32768/10.word 6*32768/10.word 7*32768/10,;源文件标题,;定义MMR寄存器符号名,;定义模块,;给y保留1个空间,y,;给xn段保留7个空间,xn,;给b0段保留7个空间,b0,;PA0赋值为0,;PA1赋值为1,;从ROM的table定义数据,;定义0.1,;定义0.2,;定义0.3,;定义0.4,;定义0.5,;定义0.6,;定义0.7,ROM,table,0.1,0.2,0.3,0.4,0.5,0.6,0.7,;设置小数乘法,;AR1指向b0,;设置传输次数,;系数传输至数据区,;AR2指向x(n-6)单元,;AR3指向b6单元,;设置缓冲区长度,;设置双操作数增量,;设置页指针,;输入x(n),;A清0,设置迭代次数,;双操作数乘法累加,;存储y(n),;输出y(n),;循环,;输入最新x(n+1),修正AR2,.text start: SSBX FRCT STM #b0,AR1RPT #6MVPD table,*AR1+STM #Xn+6,AR2STM #b0+6,AR3STM #7,BKSTM #-1,AR0LD #Xn|h9,DPPORTR PA1,Xn FIR2: RPTZ A,#6MAC *AR2+0%,*AR3+0%,ASTH A,yPORTW y,PA0BD FIR2PORTR PA1,*AR2+0%.end,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 经营企划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号