《DSP课件DSP第7章》由会员分享,可在线阅读,更多相关《DSP课件DSP第7章(58页珍藏版)》请在金锄头文库上搜索。
1、2019年6月13日,DSP原理及应用,1,第7章 TMS320C54x应用程序开发实例,7.1 正弦信号发生器 7.2 FIR滤波器的DSP实现方法 7.3 IIR滤波器的DSP实现方法 7.4 快速傅里叶变换的DSP实现方法 7.5 语音信号压缩的DSP实现方法 7.6 数字基带信号的DSP实现方法,上述是数字信号处理的典型实例,本章主要介绍如何编写DSP程序实现这些信号处理,2019年6月13日,DSP原理及应用,2,第7章 应用程序设计,7.1 FIR滤波器的DSP实现方法,在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法
2、。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。 数字滤波器分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。 本节主要讨论FIR滤波器的基本结构和DSP实现方法。,2019年6月13日,DSP原理及应用,3,第7章 应用程序设计,7.2 FIR滤波器的DSP实现,1. FIR滤波器的结构(特点),数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。,滤波器用来实现滤波,其输出序列y(n)和输入序列x(n)之间的关系, 常满足常系数线性差分方程:,x(n): 输入序列,y(n): 输出序列,ai、bi : 滤波器系
3、数, N: 滤波器的阶数。,2019年6月13日,DSP原理及应用,4,第7章 应用程序设计,1. FIR滤波器的基本结构,在式(6.1.1)中,若所有的ai均为0,则得FIR滤波器的差分方程:,对上式进行z变换,可得FIR滤波器的传递函数:,2019年6月13日,DSP原理及应用,5,第7章 应用程序设计,1. FIR滤波器的基本结构,FIR滤波器的结构 :,=h0x(n)+h1x(n-1)+ +hn-1x(n-N+1),2019年6月13日,DSP原理及应用,6,第7章 应用程序设计,1. FIR滤波器的基本结构,在数字滤波器中,FIR滤波器具有如下几个主要特点:, FIR滤波器无反馈回路
4、,是一种无条件稳定系统,单位冲击响应h(n)是有限长的; FIR滤波器可以设计成具有线性相位特性。,2019年6月13日,DSP原理及应用,7,第7章 应用程序设计,FIR滤波器的设计,FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波,取决于滤波器系数hi。,滤波器的设计,FIR滤波器结构图,2019年6月13日,DSP原理及应用,8,第7章 应用程序设计,2. FIR滤波器的DSP实现,如何编写DSP程序实现FIR滤波器? 即要编写DSP程序从x(n)计算出y(n),x(n)是当前输入, x(n-1)x(n-N+1)是以前时刻的输入,它们实际从DSP芯片的引脚在不同时刻输入的,为计算y
5、(n),需要存储x(n)x(n-N+1),2019年6月13日,DSP原理及应用,9,第7章 应用程序设计,2. FIR滤波器的DSP实现,如何从存储的 x(n)x(n-N+1)计算y(n)?,y(n)=h0x(n)+h1x(n-1)+ +hn-1x(n-N+1),采用乘法累加运算,2019年6月13日,DSP原理及应用,10,第7章 应用程序设计,2. FIR滤波器的DSP实现,输入在不断变化, 需要将存储的x(n)x(n-N+1)更新为x(n+1)x(n-N+2),怎么更新?,x(n+1),x(n),x(n-1),x(n-N+2),x(n),x(n+1),x(n-1),x(n-2),x(n
6、-3),x(n-4),x(n+1),线性缓冲区法,循环缓冲区法,更新即实现了z-1,更新之后可以求y(n+1),2019年6月13日,DSP原理及应用,11,第7章 应用程序设计,(1) 线性缓冲区法,求y(n)的过程:,算法:,取数、移位和运算:, 以ARx为指针,按x(n-7)x(n)的顺序取数,每取一次数后,数据向下移一位,并完成一次乘法累加运算;, 当经过8次取数、移位和运算后,得y(n);, 求得y(n)后,输入新样本x(n+1),存入缓冲区顶部单元;, 修改指针ARx,指向缓冲区的底部。,2019年6月13日,DSP原理及应用,12,第7章 应用程序设计,(1) 线性缓冲区法,求y
7、(n+1)的过程:,算法:,结果:, y(n),取数顺序:,x(n-6)x(n+1),x(n-5),x(n-4),x(n-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,2019年6月13日,DSP原理及应用,13,第7章 应用程序设计,(1) 线性缓冲区法,Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地址单元移位来进行延时。,其指令:,DELAY Smem ;(Smem) Smem+1,DELA
8、Y *AR3- ;AR3指向源地址,将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例如:,LD + DELAY LTD MAC + DELAY MACD,2019年6月13日,DSP原理及应用,14,第7章 应用程序设计,3. FIR滤波器的实现方法,(1) 用线性缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,y(n)=b0x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),x,b,双操作数寻址指令:MACD *AR1-,b,A,功能:A=A+(AR1)(b), AR1-1AR1,(AR1)(AR1+1),AR1,x(n-6),b6,x(n-6),b6
9、x(n-6),+A,b6x(n-6)+A,AR1,x(n-5),线性缓冲区顶部,最新数据,线性缓冲区顶部,最旧数据,直接寻址方法,间接寻址方法,带移位双操作数寻址方法,2019年6月13日,DSP原理及应用,15,第7章 应用程序设计,(1) 用线性缓冲区实现FIR滤波器,程序清单: .title “FIR1.ASM” .mmregs .def start x .usect “x”,8 PA0 .set 0 PA1 .set 1 .data COEF: .word 1*32768/10 .word 2*32768/10 .word -4*32768/10 .word 3*32768/10 .w
10、ord -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),定义系数bi,COEF,b6,;定义b6=0.1,;定义b5=0.2 ;定义b4=-0.4 ;定义b3=0.3 ;定义b2=-0.4 ;定义b1=0.2 ;定义b0=0.1,b5,b4,b3,b2,b1,b0,x(n),2019年6月13日,DSP原理及应用,16,第7章 应用程序设计,(1) 用线性缓冲区实现FIR滤波器,程序清单: .text start: SSBX FRC
11、T STM #x+7,AR2 STM #6,AR0 LD #x+1,DP PORTR PA1,x+1 FIR1: RPTZ A,#6 MACD *AR2-,COEF,A STH A,*AR2 PORTW *AR2+,PA0 BD FIR1 PORTR PA1,*AR2+0 .end,;设置小数乘法,;设置AR2,AR2,;设置复位值AR0=6,;设置缓冲区首地址,;输入x(n),x(n),;A清0,设置迭代次数,00 0000 0000,;7次乘法累加和移位,b6x(n-6),AR2,x(n-5),A+b5x(n-5),AR2,x(n-4),A+b4x(n-4),AR2,x(n-3),A+b3
12、x(n-3),AR2,x(n-2),A+b2x(n-2),AR2,x(n-1),A+b1x(n-1),x(n),A+b0x(n),AR2,AR2,;暂存y(n),y(n),;输出y(n),修改AR2,AR2,;循环,x(n+1),AR2,;输入最新数据, 修改AR2=AR2+AR0,2019年6月13日,DSP原理及应用,17,第6章 应用程序设计,(1) 线性缓冲区法,缺点:数据更新时,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。,优点:,在存储器中新老数据从低地址到高地址依次存储,数据存储次序与地址成线性关系,数据存储的位置直观
13、明了。,x(n-5),x(n-4),x(n-3),x(n-2),x(n-1),x(n),x(n+1),x(n+2),2019年6月13日,DSP原理及应用,18,第7章 应用程序设计,(2)循环缓冲区法,缓冲区:,顶层为低地址单元,存放最新样本;,x(n),底层为高地址单元,存放最老样本;,x(n-7),x(n-1),x(n-2),x(n-3),x(n-4),x(n-5),x(n-6),ARx指向最新样本单元。,ARx,算 法:,计算过程:, 以ARx为指针,按顺序取数,并修改指针;,x(n),ARx,x(n-1),ARx,x(n-2),ARx,x(n-3),ARx,x(n-4),ARx,x(
14、n-5),ARx,x(n-6),ARx,x(n-7),ARx, 每取1次数后,完成1次乘法累加计算;,A=b0x(n)+0,A=b1x(n-1)+A,A=b2x(n-2)+A,A=b3x(n-3)+A,A=b4x(n-4)+A,A=b5x(n-5)+A,A=b5x(n-6)+A,A=b5x(n-7)+A,2019年6月13日,DSP原理及应用,19,第7章 应用程序设计,(2)循环缓冲区法,算 法:,计算过程:, 每取1次数后,完成1次乘法累加计算;, 求得y(n)后,输入新样本替代最老样本;,x(n+1),x(n+1), 修改指针ARx,指向最新样本单元。,ARx, 求y(n):,取数顺序:
15、x(n)x(n-7),最新样本:x(n+1),ARx:指向x(n+1)单元, 求y(n+1):,取数顺序:x(n+1)x(n-6),最新样本:x(n+2),ARx:指向x(n+2)单元, 求y(n+2):,取数顺序:x(n+2)x(n-5),最新样本:x(n+3),ARx:指向x(n+3)单元, 缓冲区数据不需要移动; 可以使用SARAM存储器。,循环缓冲区的优点:,缓冲区单元首尾相邻,数据从最新到最旧循环存放在缓冲区中。,2019年6月13日,DSP原理及应用,20,第7章 应用程序设计,(2)循环缓冲区法,例如:(BK)=N=8,(AR1)=0060h,用*AR1+%间接寻址。,第一次寻址
16、后,AR1指向0061h单元; 第二次寻址后,AR1指向0062h单元; 第八次寻址后,AR1指向0068h单元; 将BK按8取模,AR1回到0060h单元。,用*ARx+%间接寻址:,增量、按模修正ARx ARx=circ(ARx+1),circ是根据BK寄存器中的缓冲区长度,对(ARx +1)的值进行取模,ARx= ARx+1 if(ARx%BK=0) ARX=ARX-BK,2019年6月13日,DSP原理及应用,21,第7章 应用程序设计,(2)循环缓冲区法, 用BK规定循环缓冲区的长度N; 缓冲区起始地址的k个最低有效位必须为0,且满足2kN。,例如:N=31,k的最小值为5,则缓冲区的起始地址:XXXX XXX