版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020年7月9日,DSP原理及应用,1,第6章 应用程序设计,6.1 FIR滤波器的DSP实现 6.2 IIR滤波器的DSP实现 6.3 快速傅里叶变换(FFT)的DSP实现 6.4 正弦波信号发生器,2020年7月9日,DSP原理及应用,2,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。 数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。
2、 本节主要讨论FIR滤波器的基本结构、设计方法和DSP实现方法。,2020年7月9日,DSP原理及应用,3,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.1 FIR滤波器的基本结构,数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。,一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:,(6.1.1),x(n): 输入序列,y(n): 输出序列,ai、bi : 滤波器系数, N: 滤波器的阶数。,2020年7月9日,DSP原理及应用,4,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,在式(6.1.
3、1)中,若所有的ai均为0,则得FIR滤波器的差分方程:,(6.1.2),对式(6.1.2)进行z变换,可得FIR滤波器的传递函数:,(6.1.3),2020年7月9日,DSP原理及应用,5,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,FIR滤波器的结构 :,2020年7月9日,DSP原理及应用,6,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,FIR滤波器的单位冲激响应h(n)为有限长序列。,偶对称线性相位FIR滤波器的差分方程:,N偶数,(6.1.4),若h(n)为实数,且满足偶对称或奇对称的条件,则FIR滤波器具有线性相位特性。 偶对称:h(n)= h(N-1-
4、n); 奇对称:h(n)= -h(N-1-n)。,2020年7月9日,DSP原理及应用,7,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,在数字滤波器中,FIR滤波器具有如下几个主要特点:, FIR滤波器无反馈回路,是一种无条件稳定系统; FIR滤波器可以设计成具有线性相位特性。,2020年7月9日,DSP原理及应用,8,第6章 应用程序设计,IIR滤波器的优点:, 可用较少的阶数获得较高的选择特性;, 所用存储单元少,运算次数少;, 成本低、效率高。,IIR滤波器的缺点:, 在有限精度的运算中,容易出现不稳定现象;, 选择性越好,相位的非线性越严重。,2020年7月9日,DSP原
5、理及应用,9,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.3 FIR滤波器的MATLAB设计,MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。 MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。 下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法。,2020年7月9日,DSP原理及应用,10,第6章 应用程序设计,6.1.3 FIR滤波器的MATLAB设计,用来设计标准频率响应的基于窗函数的FIR
6、滤波器,可实现加窗线性相位FIR数字滤波器的设计。,1. fir1函数,语法: b=fir1(n,Wn) b=fir1(n,Wn,ftype) b=fir1(n,Wn,Window) b=fir1(n,Wn,ftype,Window),n:滤波器的阶数;Wn:滤波器的截止频率; ftype:用来决定滤波器的类型, 当ftype=high时,可设计高通滤波器; 当ftype=stop时,可设计带阻滤波器。 Window:用来指定滤波器采用的窗函数类型, 其默认值为汉明(Hamming)窗。,2020年7月9日,DSP原理及应用,11,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、
7、带通和带阻滤波器。,1. fir1函数,(1) 采用汉明窗设计低通FIR滤波器,使用b=fir1(n,Wn)可得到低通滤波。0 Wn 1, Wn=1相当于0.5fs。 格式: b=fir1(n,Wn),2020年7月9日,DSP原理及应用,12,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1. fir1函数,(2) 采用汉明窗设计高通FIR滤波器,在b=fir1(n,Wn,ftype)中,当ftype=high时,可设计高通滤波器。 格式: b=fir1(n,Wn,high),2020年7月9日,DSP原理及应用,13,第6章 应用程序设计,使用fir1函
8、数可设计标准的低通、高通、带通和带阻滤波器。,1. fir1函数,(3) 采用汉明窗设计带通FIR滤波器,在b=fir1(n,Wn)中,当Wn= W1 W2 时,可得到带通滤波器,其通带为W1 wW2,W1和W2分别为通带的下限频率和上限频率。 格式: b=fir1(n, W1 W2 ),2020年7月9日,DSP原理及应用,14,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1. fir1函数,(4) 采用汉明窗设计带阻FIR滤波器,在b=fir1(n,Wn,ftype)中,当ftype= stop,Wn= W1 W2 时,fir1函数可得到带阻滤波器。
9、格式: b=fir1(n, W1 W2 ,stop),2020年7月9日,DSP原理及应用,15,第6章 应用程序设计,1. fir1函数,(5) 采用其他窗口函数设计FIR滤波器,使用Window参数,可以用其他窗口函数设计出各种加窗滤波器。 Window参数可采用的窗口函数有: Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗。 例如,采用Bartlett窗设计带阻滤波器, 其格式: b=fir1(n, W1 W2 ,stop,Bartlett(n+1),2020年7月9日,DSP原理及应用,16,第6章 应用程序
10、设计,1. fir1函数,注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。,【例6.1.1】 采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35 w 0.65。,解:采用fir1函数的程序格式: b=fir1( 48, 0.35 0.65 );,2020年7月9日,DSP原理及应用,17,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.4 FIR滤波器的DSP实现,FIR滤波器的输出表达式:,y(n)=b0 x(n)+b1x(n-1)+ +bn-1x(n-N+1),(6.1.18
11、),bi为滤波器系数,x(n)为滤波器在n时刻的输入,y(n)为n时刻的输出。,基本算法: 采用乘法累加运算。即不断地输入样本x(n),经过z-1延时后,再进行乘法-累加,最后输出滤波结果y(n)。,2020年7月9日,DSP原理及应用,18,第6章 应用程序设计,1. z-1算法的实现,(1) 线性缓冲区法,缓冲区:,顶部为低地址单元,存放最新样本;,缓冲区顶部,最新样本,底部为高地址单元,存放最老样本;,缓冲区底部,最老样本,指针ARx指向缓冲区底部。,ARx,2020年7月9日,DSP原理及应用,19,第6章 应用程序设计,(1) 线性缓冲区法,求y(n)的过程:,算法:,取数、移位和运
12、算:, 以ARx为指针,按x(n-7)x(n)的顺序取数,每取一次数后,数据向下移一位,并完成一次乘法累加运算;, 当经过8次取数、移位和运算后,得y(n);, 求得y(n)后,输入新样本x(n+1),存入缓冲区顶部单元;, 修改指针ARx,指向缓冲区的底部。,2020年7月9日,DSP原理及应用,20,第6章 应用程序设计,(1) 线性缓冲区法,求y(n)的过程:,算法:,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)+y7,x(n-5),ARx,x(n-4),y(n)=y5=b5x(n-
13、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)=b0 x(n)+y1,PORTR,x(n+1),ARx,结果:, y(n),2020年7月9日,DSP原理及应用,21,第6章 应用程序设计,(1) 线性缓冲区法,求y(n+1)的过程:,算法:,结果:, y(n),取数顺序:,x(n-6)x(n+1),x(n-5),
14、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,2020年7月9日,DSP原理及应用,22,第6章 应用程序设计,(1) 线性缓冲区法,Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地址单元移位来进行延时。,其指令:,DELAY Smem ;(Smem) Smem+1,DELAY *AR3- ;AR3指向源地址,将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例
15、如:,LD + DELAY LTD MAC + DELAY MACD,2020年7月9日,DSP原理及应用,23,第6章 应用程序设计,(1) 线性缓冲区法,注意:用线性缓冲区实现z-1运算时,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。,优点:,在存储器中新老数据的位置直观明了。,2020年7月9日,DSP原理及应用,24,第6章 应用程序设计,1. z-1算法的实现,(2)循环缓冲区法, 在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本; 从最新样本开始取数; 读完最老样本后,输入最新样本来代替最老样本
16、,而其他数据位置不变; 用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。,特点:,2020年7月9日,DSP原理及应用,25,第6章 应用程序设计,(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(n-5),ARx,x(n-6
17、),ARx,x(n-7),ARx, 每取1次数后,完成1次乘法累加计算;,y(n)=y0=b0 x(n)+0,y(n)=y1=b1x(n-1)+y0,y(n)=y2=b2x(n-2)+y1,y(n)=y3=b3x(n-3)+y2,y(n)=y4=b4x(n-4)+y3,y(n)=y5=b5x(n-5)+y4,y(n)=y6=b5x(n-6)+y5,y(n)=y7=b5x(n-7)+y6,2020年7月9日,DSP原理及应用,26,第6章 应用程序设计,(2)循环缓冲区法,算 法:,计算过程:, 每取1次数后,完成1次乘法累加计算;, 求得y(n)后,输入新样本替代最老样本;,x(n+1),x(
18、n+1), 修改指针ARx,指向最新样本单元。,ARx, 求y(n):,取数顺序: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)单元,2020年7月9日,DSP原理及应用,27,第6章 应用程序设计,(2)循环缓冲区法,循环缓冲区的优点:, 缓冲区数据不需要移动; 可以使用SARAM存储器。,实现N个循环缓冲区单元首尾相邻,可用BK寄存器按模间接寻址来实
19、现。,常用指令:, *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+AR0), *ARx-0%,;减AR0、按模修正ARx addr=ARx,ARx=circ(ARx-AR0), *+ARx(1K)%,;加(1K)、按模修正ARx addr=circ(ARx+1K),ARx=circ(ARx+1K),2020年7月9日,DSP原理及应用,28,第6章 应用程序设计,(2)循环缓
20、冲区法,circ是根据BK寄存器中的缓冲区长度,对(ARx +1)、(ARx-1)、(ARx+AR0)、(ARx-AR0)和(ARx+1k)的值进行取模,使指针ARx指向缓冲区,实现循环缓冲区首尾相邻。,例如:(BK)=N=8,(AR1)=0060h,用*AR1+%间接寻址。,第一次寻址后,AR1指向0061h单元; 第二次寻址后,AR1指向0062h单元; 第八次寻址后,AR1指向0068h单元; 将BK按8取模,AR1回到0060h单元。,2020年7月9日,DSP原理及应用,29,第6章 应用程序设计,(2)循环缓冲区法,循环寻址的算法:,if 0index+step BK index=
21、index+step else if index+stepBK index=index+step-BK else if index+step 0 index=index+step+BK,index:存放在辅助寄存器中的地址指针; step:步长,可正可负,|step|BK。,2020年7月9日,DSP原理及应用,30,第6章 应用程序设计,(2)循环缓冲区法, 用BK规定循环缓冲区的长度N; 缓冲区起始地址的k个最低有效位必须为0,且满足2kN。,要求:,例如:N=31,k的最小值为5,则缓冲区的起始地址:XXXX XXXX XXX0 0000B,若N=32,k的最小值为6,缓冲区的起始地址:
22、XXXX XXXX XX00 0000B,2020年7月9日,DSP原理及应用,31,第6章 应用程序设计,6.1.4 FIR滤波器的DSP实现,2. FIR滤波器的实现,C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法 -累加计算。而每个样值的乘法-累加计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。,为了实现对应项乘积运算,输入的样值x(n)和滤波系数bi必须合理的存放,并正确初始化存储块和块指针。样值x(n)和滤波系数bi的存放可用线性缓冲区或循环缓冲区实现。,2020年7月9日,DSP原理及应用,32,第6章 应用程序设计,2.
23、 FIR滤波器的实现,(1) 用线性缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,y(n)=b0 x(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),b6x(n-6),+A,b6x(n-6)+A,AR1,x(n-5),2020年7月9日,DSP原理及应用,33,第6章 应用程序设计,(1) 用线性缓冲区实现FIR滤波器,程序清单: .title “FIR1.ASM” .mmregs .def st
24、art 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 .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),定义系数bi,COEF,b6,;定义b6=0.1,;定义b5=0.2 ;定义b4=-0.4 ;定义b3=0.3 ;定义b2=-0.4
25、 ;定义b1=0.2 ;定义b0=0.1,b5,b4,b3,b2,b1,b0,x(n),2020年7月9日,DSP原理及应用,34,第6章 应用程序设计,(1) 用线性缓冲区实现FIR滤波器,程序清单: .text start: SSBX FRCT 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,;设置缓
26、冲区首地址,;输入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+b3x(n-3),AR2,x(n-2),A+b2x(n-2),AR2,x(n-1),A+b1x(n-1),x(n),A+b0 x(n),AR2,AR2,y(n-1),;暂存y(n),y(n),;输出y(n),修改AR2,AR2,;循环,;输入最新数据, 修改AR2=AR2+AR0,x(n+1),AR2,2020年7月9日,DSP原理及应用,35,第6章 应
27、用程序设计,2. FIR滤波器的实现,(2) 用循环缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,y(n)=b0 x(n)+b1x(n-1)+b5x(n-5) +b6x(n-6),y,b0,xn,2020年7月9日,DSP原理及应用,36,第6章 应用程序设计,(2) 用循环缓冲区实现FIR滤波器,程序清单: .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
28、*32768/10 .word 3*32768/10 .word 4*32768/10 .word 5*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,0.1,0.2,0.3,0.4,0.5,0.6,0.7,2020年7月9日,DSP原理及应用,37,第6章
29、应用程序设计,.text start: SSBX FRCT STM #b0,AR1 RPT #6 MVPD table,*AR1+ STM #xn+6,AR2 STM #b0+6,AR3 STM #7,BK STM #-1,AR0 LD #xn,DP PORTR PA1,xn FIR2: RPTZ A,#6 MAC *AR2+0%,*AR3+0%,A STH A,y PORTW y,PA0 BD FIR2 PORTR PA1,*AR2+0% .end,;设置小数乘法,;AR1指向b0,AR1,;设置传输次数,;系数传输至数据区,0.1,0.1,AR1,0.2,0.2,AR1,0.3,0.3,A
30、R1,0.4,0.4,AR1,0.5,0.5,AR1,0.6,0.6,AR1,0.7,0.7,AR1,;AR2指向x(n-6)单元,AR2,;AR3指向b6单元,AR3,;设置缓冲区长度,;设置双操作数增量,;设置页指针,;输入x(n),x(n),;A清0,设置迭代次数,00 0000 0000,;双操作数乘法累加,x(n-6),0.7,0.7x(n-6)+0,AR2,AR3,x(n-5),0.6,0.6x(n-5)+A,AR2,AR3,x(n-4),0.5,0.5x(n-4)+A,AR2,AR3,x(n-3),0.4,0.4x(n-3)+A,AR2,AR3,x(n-2),0.3,0.3x(n
31、-2)+A,AR2,AR3,x(n-1),0.2,0.2x(n-1)+A,AR2,AR3,x(n),0.1,0.1x(n)+A,AR2,AR3,;存储y(n),y(n),;输出y(n),;循环,;输入最新x(n+1),修正AR2,x(n+1),AR2,2020年7月9日,DSP原理及应用,38,第6章 应用程序设计,链接命令文件: FIR2.obj vectors.obj -o FIR2.out -m FIR2.map -e start MEMORY PAGE0: EPROM:org=0E000h, len=1000h VECS: org=0FF80h, len=0080h PAGE1: SP
32、RAM:org=0060h, len=0020h DARAM:org=0080h, len=1380h ,;选定的目标文件 ;生成FIR4的输出文件 ;生成FIR4的存储器映像文件 ;定义源程序的入口地址 ;定义目标存储器空间 ;第0页:程序存储器 ;EPROM的起始地址:E000h 长度:4K ; VECS的起始地址:FF80h 长度:0080h ;第1页:数据存储器 ; SPRAM的起始地址:0060h 长度:0020h ; DARAM的起始地址:0080h 长度:1380h,存储空间,0E000,4k,0EFFF,0FF80,80h,0FFFF,0060,20h,007F,0080,13
33、80h,13EF,2020年7月9日,DSP原理及应用,39,第6章 应用程序设计,链接命令文件:,SECTIONS .text:EPROM PAGE 0 .data:EPROM PAGE 0 .bss :SPRAM PAGE 1 xn:align(8)DARAM PAGE 1 b0:align(8)DARAM PAGE 1 .vections:VECS PAGE 0 ,;在存储器中定义输出段的位置 ;text段定位在程序存储器 即源程序位于程序存储器 ;系数区定义在程序存储器 ;bss段定义在暂存器 ; 从xn起8个单元定义在DARAM ;从b0起8个单元定义在DARAM ;vections
34、定义在VECS区,2020年7月9日,DSP原理及应用,40,第6章 应用程序设计,2. FIR滤波器的实现,(3) 系数对称FIR滤波器的实现,系数对称FIR滤波器具有线性相位的特性,在数字信号处理中应用十分广泛,常用于相位失真要求较高的场合。,设滤波器N=8,若系数bn =bN-1-n,则为对称FIR滤波器。其输出方程:,y(n) = b0 x(n)+b1x(n-1)+b2x(n-2)+b3x(n-3) +b3x(n-4)+b2x(n-5)+b1x(n-6)+b0 x(n-7),= b0 x(n)+x(n-7) + b1 x(n-1)+x(n-6) +b2 x(n-2)+x(n-5) +b
35、3 x(n-3)+x(n-4) ,需要: 4次乘法 7次加法,2020年7月9日,DSP原理及应用,41,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,对称FIR滤波器的实现方法:, 在RAM中开辟两个N/2长度的循环缓冲区New和Old ,分别存放N/2个新数据和老数据;,x(n),x(n-3),x(n-2),x(n-1),x(n-4),x(n-5),x(n-6),x(n-7), 设置循环缓冲区指针: AR1指向New区中的最新数据, AR2指向Old区中的最老数据;,AR1,AR2, 在程序存储器中设置系数表;,b0,b1,b2,b3,COEF, 进行(AR1)+(AR2)AH
36、加法运算,并修改数据指针,AR1+1AR1,AR2-1AR2;,x(n),x(n),x(n-7),x(n-7),x(n) + x(n-7),x(n) + x(n-7),AR1,AR2,2020年7月9日,DSP原理及应用,42,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,对称FIR滤波器的实现方法:, 累加器B清0,完成块操作,重复执行4次;,乘法累加:(AH)bi +BB;,PAR,b0,x(n) + x(n-7),00 0000 0000,b0 x(n)+x(n-7)+0,b0 x(n)+x(n-7),修改系数指针:PAR+1PAR;,PAR,加法运算:(AR1)+(AR2)
37、AH;,x(n-3),x(n-6),x(n-3) + x(n-6),x(n-3) + x(n-6),修改数据指针:AR1+1AR1,,AR2-1AR2;,AR1,AR2,b1,x(n-3) + x(n-6),b0 x(n)+x(n-7),b1x(n-3) + x(n-6)+B,b1x(n-3) + x(n-6)+B,PAR,x(n-2),x(n-5),x(n-2) + x(n-5),x(n-2) + x(n-5),AR1,AR2,b2,x(n-2) + x(n-5),b1x(n-3) + x(n-6)+B,b2x(n-2) + x(n-5)+B,b2x(n-2) + x(n-5)+B,PAR,
38、x(n-1),x(n-4),x(n-1) + x(n-4),x(n-1) + x(n-4),AR1,AR2,b3,x(n-1) + x(n-4),b2x(n-2) + x(n-5)+B,b3x(n-1) + x(n-4)+B,b3x(n-1) + x(n-4)+B,PAR,x(n) + x(n-7),x(n) + x(n-7),AR1,AR2, 保存和输出结果;,2020年7月9日,DSP原理及应用,43,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,对称FIR滤波器的实现方法:, 修正数据指针,,AR1指向New区的最老数据;,AR2指向Old区的最老数据。,AR2, 用New区
39、的最老数据替代Old区的最老数据,输入新数据替代New区的最老数据 ;,x(n-3),x(n+1), 重复执行 。,2020年7月9日,DSP原理及应用,44,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,系数对称FIR滤波器指令:,格式: FIRS Xmem,Ymem,Pmad,功能: PmadPAR; 当(RC)0,则B+AH(Pmem)B, (Xmem)+ (Ymem)16A, PAR+1PAR,RC-1 RC,其中, Pmem是通过PAR寻址。,2020年7月9日,DSP原理及应用,45,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,程序清单:,.title “
40、FIR3.ASM” .mmregs .def start .bss y,1 x_new: .usect “DATA1”,4 x_old: .usect “DATA2”,4 size .set 4 PA0 .set 0 PA1 .set 1 .data COEF: .word 1*32768/10 .word 2*32768/10 .word 3*32768/10 .word 4*32768/10,;定义MMR寄存器符号名 ;定义模块 ;给y保留1个空间 ;给DATA1段保留4个空间 ;给DATA2段保留4个空间 ;给符号size赋值 ;给输出口地址PA0赋值 ;给输入口地址PA1赋值 ;在RO
41、M中定义数据段 ;定义数据0.1 ;定义数据0.2 ;定义数据0.3 ;定义数据0.4,y,SPRAM,x_new,DATA1,x_old,DATA2,COEF,系数表,2020年7月9日,DSP原理及应用,46,第6章 应用程序设计,(3) 系数对称FIR滤波器的实现,程序清单:,.text start: LD #x_new,DP SSBX FRCT STM #x_new,AR1 STM #x_old+(size-1),AR2 STM #size,BK STM #-1,AR0 PORTR PA1,#x_new,;设置页指针 ;设置小数乘法 ;AR1指向x_new单元 ;AR2指向x_old+
42、3单元 ;设置循环缓冲区长度 ;设置双操作数增量AR0=-1 ;输入数据x(n),2020年7月9日,DSP原理及应用,47,第6章 应用程序设计,程序清单:,FIR3: ADD *AR1+0%,*AR2+0%,A RPTZ B,#(size-1) FIRS *AR1+0%,*AR2+0%,COEF STH B,y PORTW y,PA0 MAR *+AR1(2)% MAR *AR2+% MVDD *AR1,*AR2+0% BD FIR3 PORTR PA1,*AR1 .end,;完成AH=x(n)+x(n-7) ;B清0,设置重复次数 ;乘法累加、加法操作 B = AHbi + B AH=(
43、AR1)+(AR2),;保存y(n)结果 ;输出结果 ;修正AR1,指向New区最老数据 ;修正AR2,指向Old区最老数据 ;New区向Old区传送数据 ;循环 ;输入最新数据至New区,2020年7月9日,DSP原理及应用,48,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.5 FIR滤波器的设计实例,设计一个FIR低通滤波器,其设计参数:,滤波器阶数:N=40; 截止频率:wp=0.35, ws=0.4。,2020年7月9日,DSP原理及应用,49,第6章 应用程序设计,6.1.5 FIR滤波器的设计实例,根据给定的设计参数,滤波器系数可由MATLAB中的fir2函数产
44、生,函数调用格式:,1.由给定的设计参数确定滤波器的系数,f = 0 0.35 0.4 1 ; m = 1 1 0 0 ; b=fir2( 39, f, m ),利用freqz函数可绘制滤波器的幅频、相频特性,其格式: freqz(b, 512, 1000),2020年7月9日,DSP原理及应用,50,第6章 应用程序设计,滤波器的频率特性:,1.由给定的设计参数确定滤波器的系数,2020年7月9日,DSP原理及应用,51,第6章 应用程序设计,采用循环缓冲区实现FIR滤波器的源程序如下:,2汇编源程序,.title “FIR.ASM” .mmregs .bss y,1 K_FIR_BFFR
45、.set 40 PA0 .set 0 PA1 .set 1 FIR_COFF_TABLE .usect “FIR_COFF”,40 ;定义数据存储空间 D_DATA_BUFFER .usect “FIR_BFR”,40 ;定义数据存储空间 .data COFF_FIR_START:.word -7*32768/10000,3*32768/10000 ;b0,b1 .word 14*32768/10000,10*32768/10000 ;b2,b3 .word 3*32768/10000,-7*32768/10000 ;b38b39,2020年7月9日,DSP原理及应用,52,第6章 应用程序设
46、计,.text .def FIR_INIT .def FIR_TASK FIR_INIT:SSBX FRCT ;设置小数乘法 STM #FIR_COFF,AR5 ;AR1指向b0单元 RPT #K_FIR_BFFR-1 ;设置传输次数 MVPD #COFF_FIR_START,*AR5+ ;系数bi传输至数据区 STM #D_DATA_BUFFER,AR4 ;D_DATA_BUFFER缓冲区清0 RPTZ A,#K_FIR_BFFR-1 STL A,*AR4+ STM #(D_DATA_BUFFER+K_FIR_BFFR-1),AR4 STM #(FIR_COFF_TABLE+K_FIR_BF
47、FR-1),AR5,2020年7月9日,DSP原理及应用,53,第6章 应用程序设计,STM #-1,AR0 ;设置双操作数减量 LD #D_DATA_BUFFER,DP ;设置页指针 PORTR PA1,D_DATA_BUFFER ;输入x(n) FIR_TASK:STM #K_FIR_BFFR,BK RPTZ A,#K_FIR_BFFR-1 ;重复操作 MAC *AR4+0%,*AR5+0%,A ;双操作数乘法-累加 STH A,y ;暂存y(n) PORTW y,PA0 ;输出y(n) BD FIR_TASK ;循环 PORTR PA1,*AR4+0% ;输入最新样本,并修正AR3 .e
48、nd,2020年7月9日,DSP原理及应用,54,第6章 应用程序设计,在C5402DSP硬件系统中,用户可使用的存储器资源:,3汇编源程序的链接命令文件,程序存储空间:片内0080H3FFFH, 片外48000H4FFFFH; 数据存储空间:片内0080H3FFFFH, 片外4000H7FFFH。,2020年7月9日,DSP原理及应用,55,第6章 应用程序设计,FIR滤波器源程序的链接命令文件如下:,/* SOLUTION FILE FOR FIR.CMD */ vectors.obj fir.obj -o fir.out -m fir.map -e fir_init MEMORY PAG
49、E 0:EPROM:org = 0E000H len = 1000H VECS: org = 0FF80H len = 0080H PAGE 1:SPRAM:org = 0060H len = 0020H DARAM:org = 0080H len = 1380H ,2020年7月9日,DSP原理及应用,56,第6章 应用程序设计,FIR滤波器源程序的链接命令文件如下:,SECTIONS .text: EPROM PAGE 0 .vectors: VECS PAGE 0 .data: EPRAM PAGE 0 .bss: SPRAM PAGE1 FIR_BFR: align(128) DARA
50、M PAGE 1 FIR_COFF:align(128) DARAM PAGE 1 ,2020年7月9日,DSP原理及应用,57,第6章 应用程序设计,6.3 快速傅里叶变换(FFT)的DSP实现,傅里叶变换是将信号从时域变换到频域的一种变换形式,是信号处理领域中一种重要的分析工具。 离散傅里叶变换(DFT)是连续傅里叶变换在离散系统中的表现形式。 快速傅里叶变换(FFT)是快速计算DFT的一种高效方法,可以明显地降低运算量,大大地提高DFT的运算速度,从而使DFT得到了广泛的应用。 DSP芯片的出现使FFT的实现变得更加方便。由于多数的DSP芯片都能在单指令周期内完成乘法累加运算,而且还提供
51、了专门的FFT指令使得FFT算法在DSP芯片上实现的速度更快。,2020年7月9日,DSP原理及应用,58,第6章 应用程序设计,6.3 快速傅里叶变换(FFT)的DSP实现,快速傅里叶变换(FFT)是一种高效实现离散傅里叶变换(DFT)的快速算法,是数字信号处理中最为重要的工具之一,它在声学、语音、电信和信号处理等领域有着广泛的应用。,6.3.1 FFT算法的简介,1离散傅氏变换DFT,对于长度为N的有限长序列x(n),它的离散傅里叶变换为:,k = 0,1,N-1 (6.3.1),WN = e-j2/N,称为旋转因子,或蝶形因子。,在x(n)为复数序列的情况下,计算X(k): 对某个k值,
52、需要N次复数乘法、(N-1)次复数加法; 对所有N个k值,需要N2次复数乘法和N(N-1)次复数加法。,2020年7月9日,DSP原理及应用,59,第6章 应用程序设计,6.3.1 FFT算法的简介,2快速傅氏变换FFT,旋转因子WN的特性: 对称性: WkN = -WNk+N/2; 周期性: WkN =WNk+N。,FFT的算法 : 将长序列的DFT分解成短序列的DFT。,例如:当N为偶数时,其算法: 将N点的DFT分解为两个N/2点的DFT,使复数乘法减少一半; 将每个N/2点的DFT分解成N/4点的DFT,使复数乘法又减少 一半,继续进行分解可以大大减少计算量。,最小变换的点数称为基数。
53、 例如:对于基数为2的FFT算法,它的最小变换是2点DFT。,2020年7月9日,DSP原理及应用,60,第6章 应用程序设计,2快速傅氏变换FFT,FFT算法,DIT FFT算法:是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。,按时间抽取的FFTDIT FFT 按频率抽取的FFTDIF FFT,DIF FFT算法:是在频域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。,区别:旋转因子出现的位置不同。 DIT FFT算法输入端,DIF FFT输出端。,2020年7月9日,DSP原理及应用,61,第6章 应用程序设计,2快速傅氏变换FFT,假定序列x(n)的点数N是2的幂
54、,按照DIT FFT算法可分解为:,偶序列:x(0),x(2),x(4),x(N -2) 即x1(r) = x(2r),r = 0,1,,奇序列:x(1),x(3),x(5),x(N -1) 即x1(r) = x(2r+1),r = 0,1,,2020年7月9日,DSP原理及应用,62,第6章 应用程序设计,2快速傅氏变换FFT,按照奇偶序列,x(n)的DFT表示为:,(6.3.2),2020年7月9日,DSP原理及应用,63,第6章 应用程序设计,2快速傅氏变换FFT,由于WN2=e-j(2/N)2=e-j2/(N/2)=WN/2,则有:,k = 0,1,N/2-1 (6.3.3),X1(k
55、)和X2(k)分别为x1(n)和x2(n)的N/2点的DFT。,由于对称性,WNk+N/2 = -WNk, 则X(k+N/2)=X1(k) - WNkX2(k)。,N点X(k)可分为两部分: 前半部分:X(k)=X1(k) + WNkX2(k) k=0, 1, N/2-1 (6.3.4) 后半部分:X(k+N/2)=X1(k)-WNkX2(k) k=0, 1, N/2-1 (6.3.5),2020年7月9日,DSP原理及应用,64,第6章 应用程序设计,2快速傅氏变换FFT,基2 DIT FFT的蝶形运算:,蝶形算法: xm(p)= xm-1(p)+ xm-1(q)WNk (6.3.6) xm(q)= xm-1(p) - xm-1(q)WNk (6.3.7),2020年7月9日,DSP原理及应用,65,第6章 应用程序设计,2快速傅氏变换FFT,在基数为2的FFT中,设N=2M,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有(N/2)log2N个蝶形运算。 例如:在N点FFT中,当N=8时,共需要3级,12个基2 DIT FFT的蝶形运算。,2020年7月9日,DSP原理及应用,66,第6章 应用程序设计,2快速傅氏变换FFT,信号流程如图:,2020年7月9日,DSP原理及应用,67,第6章 应用程序设计,2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电力工程造价员预算编制考试题目及答案
- 充电桩运维员设备维护考试题目及答案
- 卡尔多炉工安全生产意识竞赛考核试卷含答案
- 化工工艺试验工冲突解决能力考核试卷含答案
- 玻璃制品冷加工工安全生产基础知识强化考核试卷含答案
- 架线维护工复试评优考核试卷含答案
- 景泰蓝磨蓝工安全意识竞赛考核试卷含答案
- 农产品品相管理员变革管理知识考核试卷含答案
- 经济理论与实务2026年备考练习题
- 烟草物理检验员10S执行考核试卷含答案
- 【新课标】Unit 1 B Read and write单元整体教学课件
- 曲臂车的施工方案
- 2025年陕西机电职业技术学院单招职业技能测试题库新版
- 院感应知应会测试题+答案
- 微波耦合热风脉动干化污泥技术研发
- 《精美医学血气分析》课件
- 基层团组织换届选举流程详细讲解课件
- 医疗机构自查管理办法
- 2.1.1烷烃课件高二下学期化学人教版(2019)选择性必修3
- 刺杀操课件教学课件
- 国企应聘报名登记表
评论
0/150
提交评论