《《应用程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《应用程序设计》PPT课件.ppt(181页珍藏版)》请在三一办公上搜索。
1、2023/7/14,DSP原理及应用,1,第6章 应用程序设计,内容提要 数字信号处理主要面向密集型的运算,包括乘法-累加、数字滤波和快速傅里叶变换等。C54x具备了高速完成上述运算的能力,并具有体积小、功耗低、功能强、软硬件资源丰富等优点,现已在通信等许多领域得到了广泛应用。本章结合数字信号处理和通信中最常见、最具有代表性的应用,介绍通用数字信号处理算法的DSP实现方法,主要包括:有限冲激响应(FIR)数字滤波器 无限冲激响应(IIR)数字滤波器 快速傅里叶变换(FFT)正弦信号发生器。在简要介绍上述内容的基本原理、结构和算法之后,重点介绍设计方法和DSP实现的方法。,2023/7/14,D
2、SP原理及应用,2,第6章 应用程序设计,6.1 FIR滤波器的DSP实现 6.2 IIR滤波器的DSP实现 6.3 快速傅里叶变换(FFT)的DSP实现6.4 正弦波信号发生器,2023/7/14,DSP原理及应用,3,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。本节主要讨论FIR滤波器的
3、基本结构、设计方法和DSP实现方法。,2023/7/14,DSP原理及应用,4,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.1 FIR滤波器的基本结构,数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。,一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:,(6.1.1),x(n):输入序列,y(n):输出序列,ai、bi:滤波器系数,N:滤波器的阶数。,2023/7/14,DSP原理及应用,5,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,在式()中,若所有的ai均为0,则得FIR滤波器的差分
4、方程:,(6.1.2),对式()进行z变换,可得FIR滤波器的传递函数:,(6.1.3),2023/7/14,DSP原理及应用,6,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,FIR滤波器的结构:,2023/7/14,DSP原理及应用,7,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,FIR滤波器的单位冲激响应h(n)为有限长序列。,偶对称线性相位FIR滤波器的差分方程:,N偶数,(6.1.4),若h(n)为实数,且满足偶对称或奇对称的条件,则FIR滤波器具有线性相位特性。偶对称:h(n)=h(N-1-n);奇对称:h(n)=-h(N-1-n)。,2023/7/14,
5、DSP原理及应用,8,第6章 应用程序设计,6.1.1 FIR滤波器的基本结构,在数字滤波器中,FIR滤波器具有如下几个主要特点:,FIR滤波器无反馈回路,是一种无条件稳定系统;FIR滤波器可以设计成具有线性相位特性。,2023/7/14,DSP原理及应用,9,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.2 FIR滤波器的设计方法,设计FIR滤波器的基本方法之一,是用有限项傅氏级数来逼近所要求的滤波器响应。,1.用傅氏级数设计FIR滤波器,Hd()的傅氏级数:,(6.1.5),=f/fs为归一化频率,fs为采样频率,T=2f/fs=2。,2023/7/14,DSP原理及应用
6、,10,第6章 应用程序设计,6.1.2 FIR滤波器的设计方法,系数Cn的选择可在最小均方误差的条件下,使传递函数H(z)逼近Hd()来决定。,1.用傅氏级数设计FIR滤波器,(6.1.6),且C-n=Cn。,设Hd()为偶函数,则,n 0(6.1.7),2023/7/14,DSP原理及应用,11,第6章 应用程序设计,理想的传递函数Hd()有无限多个系数Cn,而实际的滤波器的系数只能有有限多个。因此,可以将式(6.1.7)中的无限项级数进行截取,得到近似的传递函数:,1.用傅氏级数设计FIR滤波器,(6.1.8),|1,Q为有限的正整数。,(6.1.9),令z=ej2,则有,2023/7/
7、14,DSP原理及应用,12,第6章 应用程序设计,近似传递函数的冲激响应是由一系列的系数来决定:C-Q、C-Q+1、C-1、C0、CQ-1、CQ。,1.用傅氏级数设计FIR滤波器,(6.1.10),为了解决这个问题,可引入Q个采样周期的延时,得,当n 0时,对应的Cnzn项代表的是一个非因果的滤波器,即输出先于输入,要得到n时刻的输出响应需用到n+1时刻的输出响应。,2023/7/14,DSP原理及应用,13,第6章 应用程序设计,令i=-(n-Q),作变量置换得,1.用傅氏级数设计FIR滤波器,0 i 2Q(6.1.11),令bi=CQ-i,N-1=2Q,则H(z)的表达式为,0 i N-
8、1(6.1.12),当N-1=2Q时,b0=CQ、b1=CQ-1、b2=CQ-2、bQ=C0、bQ+1=C1、b2Q-1=C-Q+1、b2Q=C-Q。当N=2Q+1时,系数bi是关于bQ对称的,即bi=CQ-i且Cn=C-n,2023/7/14,DSP原理及应用,14,第6章 应用程序设计,例如,当Q=5时,滤波器的11个系数如下:,1.用傅氏级数设计FIR滤波器,b0=b10=C5 b1=b9=C4 b2=b8=C3 b3=b7=C2 b4=b6=C1 b5=C0,根据卷积公式得,(6.1.13),由上述公式可实现FIR滤波器,其响应由N项构成。,2023/7/14,DSP原理及应用,15,
9、第6章 应用程序设计,6.1.2 FIR滤波器的设计方法,FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波,其设计可根据给出的滤波特性,通过下式计算系数Cn来实现。,2.滤波器的设计,n 0,2023/7/14,DSP原理及应用,16,第6章 应用程序设计,设低通滤波器的截止频率为fc,采样频率为fs,则系数表达式:,2.滤波器的设计,(),(1)低通滤波器的设计,2023/7/14,DSP原理及应用,17,第6章 应用程序设计,高通滤波器可以由一个幅度为1的响应减去一个低通滤波的响应来获得,如图所示。,2.滤波器的设计,(n)响应,(2)高通滤波器的设计,1,1,fc,1,fc,(n)
10、函数的表达式:,低通滤波,高通滤波,(n)=,1 n=0 0 n 0,高通滤波器的系数:,2023/7/14,DSP原理及应用,18,第6章 应用程序设计,带通滤波器可以由两个截止频率不同的低通滤波器获得,如图所示。,2.滤波器的设计,低通滤波2,(3)带通滤波器的设计,1,1,fc1,1,fc1,低通滤波1,带通滤波,带通滤波器的系数,等于两个低通滤波器的系数之差:,fc2,fc2,fc1和fc2为低通滤波器的截止频率,fs为采样频率。,2023/7/14,DSP原理及应用,19,第6章 应用程序设计,带阻滤波器可由(n)和带通滤波器相减获得,如图所示。,2.滤波器的设计,(n)响应,(4)
11、带阻滤波器的设计,1,1,fc1,1,fc1,带通滤波,带阻滤波,带阻滤波器的系数:,fc2,fc2,2023/7/14,DSP原理及应用,20,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.3 FIR滤波器的MATLAB设计,MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法。,2023/7/14,D
12、SP原理及应用,21,第6章 应用程序设计,6.1.3 FIR滤波器的MATLAB设计,用来设计标准频率响应的基于窗函数的FIR滤波器,可实现加窗线性相位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)窗。
13、,2023/7/14,DSP原理及应用,22,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1.fir1函数,(1)采用汉明窗设计低通FIR滤波器,使用b=fir1(n,Wn)可得到低通滤波。0 Wn 1,Wn=1相当于0.5fs。格式:b=fir1(n,Wn),2023/7/14,DSP原理及应用,23,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1.fir1函数,(2)采用汉明窗设计高通FIR滤波器,在b=fir1(n,Wn,ftype)中,当ftype=high时,可设计高通滤波器。格式:b=fir1(n,Wn,h
14、igh),2023/7/14,DSP原理及应用,24,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1.fir1函数,(3)采用汉明窗设计带通FIR滤波器,在b=fir1(n,Wn)中,当Wn=W1 W2 时,可得到带通滤波器,其通带为W1 wW2,W1和W2分别为通带的下限频率和上限频率。格式:b=fir1(n,W1 W2),2023/7/14,DSP原理及应用,25,第6章 应用程序设计,使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。,1.fir1函数,(4)采用汉明窗设计带阻FIR滤波器,在b=fir1(n,Wn,ftype)中,当ftyp
15、e=stop,Wn=W1 W2 时,fir1函数可得到带阻滤波器。格式:b=fir1(n,W1 W2,stop),2023/7/14,DSP原理及应用,26,第6章 应用程序设计,1.fir1函数,(5)采用其他窗口函数设计FIR滤波器,使用Window参数,可以用其他窗口函数设计出各种加窗滤波器。Window参数可采用的窗口函数有:Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗。例如,采用Bartlett窗设计带阻滤波器,其格式:b=fir1(n,W1 W2,stop,Bartlett(n+1),2023/7/14
16、,DSP原理及应用,27,第6章 应用程序设计,1.fir1函数,注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。,【例】采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35 w 0.65。,解:采用fir1函数的程序格式:b=fir1(48,0.35 0.65);,【例】设计一个FIR高通滤波器,使用具有30dB波纹的Chebyshev窗,其阶数为34,截止频率为0.48。,解:采用fir1函数设计高通滤波器的程序格式为 Window=chebwin(35,30);b=fir1(34,0.48,
17、high,Window);,2023/7/14,DSP原理及应用,28,第6章 应用程序设计,6.1.3 FIR滤波器的MATLAB设计,用来设计有任意频率响应的各种加窗FIR滤波器。,2.fir2函数,语法:b=fir2(n,f,m)b=fir2(n,f,m,Window)b=fir2(n,f,m,npt)b=fir2(n,f,m,npt,Window)b=fir2(n,f,m,npt,lap)b=fir2(n,f,m,nptt,lap,Window),2023/7/14,DSP原理及应用,29,第6章 应用程序设计,2.fir2函数,说明:参数n为滤波器的阶数;参数f为频率点矢量,且f0,
18、1,f=1对应于0.5fs。矢量f按升序排列,且第一个元素必须为0,最后一个必须为1,并可以包含重复的频率点;参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;参数Window用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗;参数npt用来指定fir2函数对频率响应进行内插的点数;参数lap用来指定fir2函数在重复频率点附近插入的区域大小。,2023/7/14,DSP原理及应用,30,第6章 应用程序设计,2.fir2函数,【例】设计一个30阶的低通FIR滤波器,其截止频率为0.6。,解:采用fir2函数的程序格式:f=0 0.6 0.6 1;m=1 1 0
19、 0;b=fir2(30,f,m);,在使用MATLAB设计FIR滤波器时,还可以使用freqz()和plot()函数。freqz()函数:可求出传递函数的幅频响应和相频响应;plot()函数:可绘出滤波器的幅频响应和相频响应曲线。,2023/7/14,DSP原理及应用,31,第6章 应用程序设计,2.fir2函数,例如,在例例6.1.3中,若希望得到滤波器的特性,可使用freqz()函数,其格式:,freqz(b,1,512),得滤波器的特性如图。,2023/7/14,DSP原理及应用,32,第6章 应用程序设计,2.fir2函数,例6.1.1 带通滤波器的特性,2023/7/14,DSP原
20、理及应用,33,第6章 应用程序设计,2.fir2函数,例6.1.2 高通滤波器的特性,2023/7/14,DSP原理及应用,34,第6章 应用程序设计,2.fir2函数,例6.1.3 低通滤波器的特性,2023/7/14,DSP原理及应用,35,第6章 应用程序设计,6.1 FIR滤波器的DSP实现,6.1.4 FIR滤波器的DSP实现,FIR滤波器的输出表达式:,y(n)=b0 x(n)+b1x(n-1)+bn-1x(n-N+1),(),bi为滤波器系数,x(n)为滤波器在n时刻的输入,y(n)为n时刻的输出。,基本算法:采用乘法累加运算。即不断地输入样本x(n),经过z-1延时后,再进行
21、乘法-累加,最后输出滤波结果y(n)。,2023/7/14,DSP原理及应用,36,第6章 应用程序设计,6.1.4 FIR滤波器的DSP实现,1.z-1算法的实现,常用的方法:,线性缓冲区法 循环缓冲区法。,(1)线性缓冲区法,又称延迟线法。,特点:,在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;,从最老样本开始取数,每取一个数后,样本向下移位;,读完最后一个样本后,输入最新样本并存入缓冲区的顶部。,2023/7/14,DSP原理及应用,37,第6章 应用程序设计,1.z-1算法的实现,(1)线性缓冲区法,缓冲区:,顶部为低地址单元,存放最新样本;,缓冲区顶部,最
22、新样本,底部为高地址单元,存放最老样本;,缓冲区底部,最老样本,指针ARx指向缓冲区底部。,ARx,2023/7/14,DSP原理及应用,38,第6章 应用程序设计,(1)线性缓冲区法,求y(n)的过程:,算法:,取数、移位和运算:,以ARx为指针,按x(n-7)x(n)的顺序取数,每取一次数后,数据向下移一位,并完成一次乘法累加运算;,当经过8次取数、移位和运算后,得y(n);,求得y(n)后,输入新样本x(n+1),存入缓冲区顶部单元;,修改指针ARx,指向缓冲区的底部。,2023/7/14,DSP原理及应用,39,第6章 应用程序设计,(1)线性缓冲区法,求y(n)的过程:,算法:,AR
23、x,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-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),A
24、Rx,结果:,y(n),2023/7/14,DSP原理及应用,40,第6章 应用程序设计,(1)线性缓冲区法,求y(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,2023/7/14,DSP原理及应用,41,第6章 应用程序设计,(1)线性缓冲区法,Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地
25、址单元移位来进行延时。,其指令:,DELAY Smem;(Smem)Smem+1,DELAY*AR3-;AR3指向源地址,将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例如:,LD+DELAY LTDMAC+DELAY MACD,2023/7/14,DSP原理及应用,42,第6章 应用程序设计,(1)线性缓冲区法,注意:用线性缓冲区实现z-1运算时,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。,优点:,在存储器中新老数据的位置直观明了。,2023/7/14,DSP原理及应用,43,第6章 应用程序设计,1.z-1算
26、法的实现,(2)循环缓冲区法,特点:,在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;从最新样本开始取数;读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变;用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。,2023/7/14,DSP原理及应用,44,第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为指针,
27、按顺序取数,并修改指针;,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),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,2023/7/14,DSP原理及应用,45,第6
28、章 应用程序设计,(2)循环缓冲区法,算 法:,计算过程:,每取1次数后,完成1次乘法累加计算;,求得y(n)后,输入新样本替代最老样本;,x(n+1),x(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)单元,2023/7/14,DSP原理及应用,46,第6章 应用程序设计,(2)
29、循环缓冲区法,循环缓冲区的优点:,缓冲区数据不需要移动;可以使用SARAM存储器。,实现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+AR0),*ARx-0%,;减AR0、按模修正ARx addr=ARx,ARx=circ(ARx-AR0),*+ARx(1K)%,;加(1K)、按模修正ARx addr=c
30、irc(ARx+1K),ARx=circ(ARx+1K),2023/7/14,DSP原理及应用,47,第6章 应用程序设计,(2)循环缓冲区法,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单元。,2023/7/14,DS
31、P原理及应用,48,第6章 应用程序设计,(2)循环缓冲区法,循环寻址的算法:,if 0index+step BK index=index+step else if index+stepBK index=index+step-BK else if index+step 0 index=index+step+BK,index:存放在辅助寄存器中的地址指针;step:步长,可正可负,|step|BK。,2023/7/14,DSP原理及应用,49,第6章 应用程序设计,(2)循环缓冲区法,用BK规定循环缓冲区的长度N;缓冲区起始地址的k个最低有效位必须为0,且满足2kN。,要求:,例如:N=31,k
32、的最小值为5,则缓冲区的起始地址:XXXX XXXX XXX0 0000B,若N=32,k的最小值为6,缓冲区的起始地址:XXXX XXXX XX00 0000B,2023/7/14,DSP原理及应用,50,第6章 应用程序设计,6.1.4 FIR滤波器的DSP实现,2.FIR滤波器的实现,C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法-累加计算。而每个样值的乘法-累加计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。,为了实现对应项乘积运算,输入的样值x(n)和滤波系数bi必须合理的存放,并正确初始化存储块和块指针。样值x(n)和滤波
33、系数bi的存放可用线性缓冲区或循环缓冲区实现。,2023/7/14,DSP原理及应用,51,第6章 应用程序设计,2.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),2023/7/14,DSP原理及应用,52,第6章 应用程序设计,(1)用
34、线性缓冲区实现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.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=
35、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),2023/7/14,DSP原理及应用,53,第6章 应用程序设计,(1)用线性缓冲区实现FIR滤波器,程序清单:.textstart:SSBX FRCT STM#x+7,AR2 STM#6,AR0 LD#x+1,DP PORTR PA1,x+1FIR1:RPTZ A,#6 MACD*AR2-,COEF,A STH A,*AR2 PORTW*AR2+,PA0 BD FIR1 PORTR PA1,*AR2+0.end,;设置小数乘法,;设置AR2,AR
36、2,;设置复位值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+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,2023/7/14,
37、DSP原理及应用,54,第6章 应用程序设计,2.FIR滤波器的实现,(2)用循环缓冲区实现FIR滤波器,设N=7,FIR滤波器的算法:,y(n)=b0 x(n)+b1x(n-1)+b5x(n-5)+b6x(n-6),y,b0,xn,2023/7/14,DSP原理及应用,55,第6章 应用程序设计,(2)用循环缓冲区实现FIR滤波器,程序清单:.title“FIR2.ASM”.mmregs.def start.bss y,1xn.usect“xn”,7b0.usect“b0”,7PA0.set 0PA1.set 1.datatable:.word 1*32768/10.word 2*32768
38、/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,2023/7/14,DSP原理及应用,56,第6章 应用程序设计,.tex
39、t 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,xnFIR2: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,AR1,0.4,0.4,AR1,0.5,0.5,A
40、R1,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-2)+A,AR2,AR3,x(n-1),0.2
41、,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,2023/7/14,DSP原理及应用,57,第6章 应用程序设计,链接命令文件:FIR2.objvectors.obj-o FIR2.out-m FIR2.map-e startMEMORY PAGE0:EPROM:org=0E000h,len=1000h VECS:org=0FF80h,len=0080h PAGE1:SPRAM:org=0060h,len=0020h DARAM:org=0
42、080h,len=1380h,;选定的目标文件;生成FIR4的输出文件;生成FIR4的存储器映像文件;定义源程序的入口地址;定义目标存储器空间;第0页:程序存储器;EPROM的起始地址:E000h 长度:4K;VECS的起始地址:FF80h 长度:0080h;第1页:数据存储器;SPRAM的起始地址:0060h 长度:0020h;DARAM的起始地址:0080h 长度:1380h,存储空间,0E000,4k,0EFFF,0FF80,80h,0FFEF,0060,20h,007F,0080,1380h,13EF,2023/7/14,DSP原理及应用,58,第6章 应用程序设计,链接命令文件:,S
43、ECTIONS.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定义在VECS区,2023/7/14,DSP原理及应用,59,第6章 应用程序设计,2.FIR滤波器的实现,(3)系数对称FIR
44、滤波器的实现,系数对称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)+b3 x(n-3)+x(n-4),需要:4次乘法 7次加法,2023/7/14,DSP原理及应用,60,第6章 应用程序设计,(3)系数对称FIR滤波器
45、的实现,对称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加法运算,并修改数据指针,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,A
46、R2,2023/7/14,DSP原理及应用,61,第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)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
47、-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,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-
48、4)+B,PAR,x(n)+x(n-7),x(n)+x(n-7),AR1,AR2,保存和输出结果;,2023/7/14,DSP原理及应用,62,第6章 应用程序设计,(3)系数对称FIR滤波器的实现,对称FIR滤波器的实现方法:,修正数据指针,,AR1指向New区的最老数据;,AR2指向Old区的最老数据。,AR2,用New区的最老数据替代Old区的最老数据,输入新数据替代New区的最老数据;,x(n-3),x(n+1),重复执行。,2023/7/14,DSP原理及应用,63,第6章 应用程序设计,(3)系数对称FIR滤波器的实现,系数对称FIR滤波器指令:,格式:FIRS Xmem,Ymem
49、,Pmad,功能:PmadPAR;当(RC)0,则B+AH(Pmem)B,(Xmem)+(Ymem)16A,PAR+1PAR,RC-1 RC,其中,Pmem是通过PAR寻址。,2023/7/14,DSP原理及应用,64,第6章 应用程序设计,(3)系数对称FIR滤波器的实现,程序清单:,.title“FIR3.ASM”.mmregs.def start.bss y,1x_new:.usect“DATA1”,4x_old:.usect“DATA2”,4size.set 4 PA0.set 0PA1.set 1.dataCOEF:.word 1*32768/10.word 2*32768/10.w
50、ord 3*32768/10.word 4*32768/10,;定义MMR寄存器符号名;定义模块;给y保留1个空间;给DATA1段保留4个空间;给DATA2段保留4个空间;给符号size赋值;给输出口地址PA0赋值;给输入口地址PA1赋值;在ROM中定义数据段;定义数据0.1;定义数据0.2;定义数据0.3;定义数据0.4,y,SPRAM,x_new,DATA1,x_old,DATA2,COEF,系数表,2023/7/14,DSP原理及应用,65,第6章 应用程序设计,(3)系数对称FIR滤波器的实现,程序清单:,.textstart:LD#x_new,DP SSBX FRCT STM#x_n