




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章应用程序设计第6章应用程序设计
6.1
FIR滤波器的DSP实现6.2
IIR滤波器的DSP实现2023/3/292第6章应用程序设计6.1FIR滤波器的DSP实现
数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。本节主要讨论FIR滤波器的基本结构、设计方法和DSP实现方法。2023/3/293第6章应用程序设计6.1FIR滤波器的DSP实现6.1.1
FIR滤波器的基本结构一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:(6.1.1)
x(n):输入序列,y(n):输出序列,ai、bi:滤波器系数,N:滤波器的阶数。2023/3/294第6章应用程序设计6.1.1
FIR滤波器的基本结构在式()中,若所有的ai均为0,则得FIR滤波器的差分方程:(6.1.2)
对式()进行z变换,可得FIR滤波器的传递函数:(6.1.3)
2023/3/295第6章应用程序设计6.1.1
FIR滤波器的基本结构
FIR滤波器的结构:z-1z-1+x(n)y(n)x(n-1)x(n-N+1)b0b1bN-2bN-1z-12023/3/296第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/3/297第6章应用程序设计6.1.1
FIR滤波器的基本结构在数字滤波器中,FIR滤波器具有如下几个主要特点:
①
FIR滤波器无反馈回路,是一种无条件稳定系统;②
FIR滤波器可以设计成具有线性相位特性。2023/3/298第6章应用程序设计6.1FIR滤波器的DSP实现6.1.2
FIR滤波器的设计方法设计FIR滤波器的基本方法之一,是用有限项傅氏级数来逼近所要求的滤波器响应。1.
用傅氏级数设计FIR滤波器
Hd()的傅氏级数:
(6.1.5)
=f/fs为归一化频率,fs为采样频率,T=2f/fs=2。2023/3/299第6章应用程序设计理想的传递函数Hd()有无限多个系数Cn,而实际的滤波器的系数只能有有限多个。因此,可以将式(6.1.7)中的无限项级数进行截取,得到近似的传递函数:1.
用傅氏级数设计FIR滤波器(6.1.8)
||<1,Q为有限的正整数。
(6.1.9)
令z=ej2,则有
2023/3/2910第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/3/2911第6章应用程序设计令i=-(n-Q),作变量置换得1.
用傅氏级数设计FIR滤波器0
i2Q(6.1.11)
令bi=CQ-i,N-1=2Q,则H(z)的表达式为
0
i
N-1(6.1.12)
2023/3/2912第6章应用程序设计1.
用傅氏级数设计FIR滤波器根据卷积公式得(6.1.13)
由上述公式可实现FIR滤波器,其响应由N项构成。2023/3/2913第6章应用程序设计6.1.2
FIR滤波器的设计方法
FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波,其设计可根据给出的滤波特性,通过下式计算系数Cn来实现。2.
滤波器的设计n0
2023/3/2914第6章应用程序设计设低通滤波器的截止频率为fc,采样频率为fs,则系数表达式:2.
滤波器的设计()
(1)
低通滤波器的设计
2023/3/2915第6章应用程序设计高通滤波器可以由一个幅度为1的响应减去一个低通滤波的响应来获得,如图所示。2.
滤波器的设计(n)响应
(2)
高通滤波器的设计
11fc1f00f0ffc(n)函数的表达式:
低通滤波
高通滤波
(n)=
1n=00n
0高通滤波器的系数:
2023/3/2916第6章应用程序设计带通滤波器可以由两个截止频率不同的低通滤波器获得,如图所示。2.
滤波器的设计低通滤波2
(3)
带通滤波器的设计
11fc11f00f0ffc1低通滤波1
带通滤波
带通滤波器的系数,等于两个低通滤波器的系数之差:
fc2fc2
fc1和fc2为低通滤波器的截止频率,fs为采样频率。
2023/3/2917第6章应用程序设计带阻滤波器可由(n)和带通滤波器相减获得,如图所示。2.
滤波器的设计(n)响应(4)
带阻滤波器的设计
11fc11f00f0ffc1带通滤波
带阻滤波
带阻滤波器的系数:
fc2fc22023/3/2918第6章应用程序设计6.1FIR滤波器的DSP实现6.1.3
FIR滤波器的MATLAB设计
MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包。MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法。2023/3/2919第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)窗。2023/3/2920第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.
fir1函数
(1)
采用汉明窗设计低通FIR滤波器
使用b=fir1(n,Wn)可得到低通滤波。0
Wn
1,Wn=1相当于0.5fs。
格式:
b=fir1(n,Wn)
2023/3/2921第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.
fir1函数
(2)
采用汉明窗设计高通FIR滤波器
在b=fir1(n,Wn,‘ftype’)中,当ftype=high时,可设计高通滤波器。格式:
b=fir1(n,Wn,‘high’)2023/3/2922第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.
fir1函数
(3)
采用汉明窗设计带通FIR滤波器
在b=fir1(n,Wn)中,当Wn=[W1W2]时,可得到带通滤波器,其通带为W1<w<W2,W1和W2分别为通带的下限频率和上限频率。
格式:
b=fir1(n,[W1W2])2023/3/2923第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.
fir1函数
(4)
采用汉明窗设计带阻FIR滤波器
在b=fir1(n,Wn,‘ftype’)中,当ftype=stop,Wn=[W1W2]时,fir1函数可得到带阻滤波器。
格式:
b=fir1(n,[W1W2],‘stop’)2023/3/2924第6章应用程序设计1.
fir1函数
(5)
采用其他窗口函数设计FIR滤波器使用Window参数,可以用其他窗口函数设计出各种加窗滤波器。Window参数可采用的窗口函数有:Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗。例如,采用Bartlett窗设计带阻滤波器,其格式:
b=fir1(n,[W1W2],‘stop’,Bartlett(n+1))
2023/3/2925第6章应用程序设计1.
fir1函数
注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。【例】采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35<w<0.65。
解:采用fir1函数的程序格式:
b=fir1(48,[0.350.65
]);
【例】设计一个FIR高通滤波器,使用具有30dB波纹的Chebyshev窗,其阶数为34,截止频率为0.48。
解:采用fir1函数设计高通滤波器的程序格式为
Window=chebwin(35,30);
b=fir1(34,0.48,‘high’,Window);2023/3/2926第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/3/2927第6章应用程序设计2.
fir2函数
说明:参数n为滤波器的阶数;参数f为频率点矢量,且f[0,1],f=1对应于0.5fs。矢量f按升序排列,且第一个元素必须为0,最后一个必须为1,并可以包含重复的频率点;参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;参数Window用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗;参数npt用来指定fir2函数对频率响应进行内插的点数;参数lap用来指定fir2函数在重复频率点附近插入的区域大小。
2023/3/2928第6章应用程序设计2.
fir2函数
【例】设计一个30阶的低通FIR滤波器,其截止频率为0.6。
解:采用fir2函数的程序格式:
f=[00.60.61];m=[1100];b=fir2(30,f,m);在使用MATLAB设计FIR滤波器时,还可以使用freqz()和plot()函数。freqz()函数:可求出传递函数的幅频响应和相频响应;plot()函数:可绘出滤波器的幅频响应和相频响应曲线。
2023/3/2929第6章应用程序设计2.
fir2函数
例如,在例~例6.1.3中,若希望得到滤波器的特性,可使用freqz()函数,其格式:
freqz(b,1,512)得滤波器的特性如图。
2023/3/2930第6章应用程序设计2.
fir2函数
例6.1.1带通滤波器的特性2023/3/2931第6章应用程序设计2.
fir2函数
例6.1.2高通滤波器的特性2023/3/2932第6章应用程序设计2.
fir2函数
例6.1.3低通滤波器的特性2023/3/2933第6章应用程序设计6.1FIR滤波器的DSP实现6.1.4
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)。
2023/3/2934第6章应用程序设计6.1.4
FIR滤波器的DSP实现1.
z-1算法的实现
常用的方法:
线性缓冲区法
循环缓冲区法。(1)
线性缓冲区法又称延迟线法。
特点:
①在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;
②从最老样本开始取数,每取一个数后,样本向下移位;③读完最后一个样本后,输入最新样本并存入缓冲区的顶部。2023/3/2935第6章应用程序设计1.
z-1算法的实现
(1)
线性缓冲区法
缓冲区:数据存储器
顶部为低地址单元,存放最新样本;缓冲区顶部最新样本
底部为高地址单元,存放最老样本;缓冲区底部最老样本
指针ARx指向缓冲区底部。
←ARx2023/3/2936第6章应用程序设计(1)
线性缓冲区法最新样本数据存储器最老样本ARx→求y(n)的过程:算法:x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)x(n-7)取数、移位和运算:①以ARx为指针,按x(n-7)……x(n)的顺序取数,每取一次数后,数据向下移一位,并完成一次乘法累加运算;②当经过8次取数、移位和运算后,得y(n);③求得y(n)后,输入新样本x(n+1),存入缓冲区顶部单元;④修改指针ARx,指向缓冲区的底部。2023/3/2937第6章应用程序设计(1)
线性缓冲区法最新样本数据存储器最老样本ARx→求y(n)的过程:算法:x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)x(n-7)ARx→x(n-7)↑ARx→x(n-6)y(n)=y7=b7x(n-7)+0x(n-6)↑ARx→x(n-5)y(n)=y6=b6x(n-6)+y7x(n-5)↑ARx→x(n-4)y(n)=y5=b5x(n-5)+y6x(n-4)↑ARx→x(n-3)y(n)=y4=b4x(n-4)+y5x(n-3)↑ARx→x(n-2)y(n)=y3=b3x(n-3)+y4x(n-2)↑ARx→x(n-1)y(n)=y2=b2x(n-2)+y3x(n-1)↑ARx→x(n)y(n)=y1=b1x(n-1)+y2x(n)y(n)=b0x(n)+y1←PORTRx(n+1)ARx→结果:①y(n)2023/3/2938第6章应用程序设计(1)
线性缓冲区法求y(n+1)的过程:算法:数据存储器ARx→x(n+1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)结果:①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)数据存储器x(n+8)x(n+7)x(n+6)x(n+5)x(n+4)x(n+3)x(n+2)x(n+1)ARx→2023/3/2939第6章应用程序设计(1)
线性缓冲区法
Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地址单元移位来进行延时。
其指令:DELAYSmem;(Smem)
Smem+1DELAY*AR3-
;AR3指向源地址
将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例如:
LD+DELAY→LTDMAC+DELAY→MACD
2023/3/2940第6章应用程序设计(1)
线性缓冲区法注意:用线性缓冲区实现z-1运算时,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。
优点:
在存储器中新老数据的位置直观明了。
2023/3/2941第6章应用程序设计1.
z-1算法的实现
(2)循环缓冲区法特点:
①在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;
②从最新样本开始取数;
③读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变;
④用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。
2023/3/2942第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)ARx→x(n-7)ARx→②每取1次数后,完成1次乘法累加计算;y(n)=y0=b0x(n)+0y(n)=y1=b1x(n-1)+y0y(n)=y2=b2x(n-2)+y1y(n)=y3=b3x(n-3)+y2y(n)=y4=b4x(n-4)+y3y(n)=y5=b5x(n-5)+y4y(n)=y6=b5x(n-6)+y5y(n)=y7=b5x(n-7)+y62023/3/2943第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)算
法:计算过程:②每取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)单元
数据存储器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n+2)ARx→③求y(n+2):取数顺序:x(n+2)……x(n-5)
最新样本:x(n+3)
ARx:指向x(n+3)单元
数据存储器x(n)x(n+1)x(n-1)x(n-2)x(n-3)x(n-4)x(n+3)x(n+2)ARx→2023/3/2944第6章应用程序设计(2)循环缓冲区法循环缓冲区的优点:
①缓冲区数据不需要移动;
②可以使用SARAM存储器。
实现N个循环缓冲区单元首尾相邻,可用BK寄存器按模间接寻址来实现。常用指令:…*ARx+%;增量、按模修正ARxaddr=ARx,ARx=circ(ARx+1)…*ARx-%;减量、按模修正ARxaddr=ARx,ARx=circ(ARx-1)…*ARx+0%;增AR0、按模修正ARxaddr=ARx,ARx=circ(ARx+AR0)…*ARx-0%;减AR0、按模修正ARxaddr=ARx,ARx=circ(ARx-AR0)…*+ARx(1K)%;加(1K)、按模修正ARxaddr=circ(ARx+1K),ARx=circ(ARx+1K)2023/3/2945第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/3/2946第6章应用程序设计(2)循环缓冲区法循环寻址的算法:
if0≤index+step<BKindex=index+stepelseifindex+step≥BKindex=index+step-BKelseifindex+step<0index=index+step+BK
index:存放在辅助寄存器中的地址指针;step:步长,可正可负,|step|≤BK。2023/3/2947第6章应用程序设计(2)循环缓冲区法①
用BK规定循环缓冲区的长度N;②
缓冲区起始地址的k个最低有效位必须为0,且满足2k>N。要求:例如:N=31,k的最小值为5,则缓冲区的起始地址:XXXXXXXXXXX00000B
若N=32,k的最小值为6,缓冲区的起始地址:XXXXXXXXXX000000B2023/3/2948第6章应用程序设计6.1.4
FIR滤波器的DSP实现2.
FIR滤波器的实现
’C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法-累加计算。而每个样值的乘法-累加计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。2023/3/2949第6章应用程序设计2.
FIR滤波器的实现(1)
用线性缓冲区实现FIR滤波器
设N=7,FIR滤波器的算法:
y(n)=b0x(n)+b1x(n-1)+…+b5x(n-5)+b6x(n-6)数据存储器暂存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存储器b6b5b4b3b2b1b0xb双操作数寻址指令:MACD*AR2-,b,A功能:A=A+(AR2)×(pmad),AR2-1→AR2,(AR2)→(AR2+1)AAR1→x(n-6)b6x(n-6)b6×x(n-6)+Ab6×x(n-6)+AAR1→x(n-5)2023/3/2950第6章应用程序设计(1)
用线性缓冲区实现FIR滤波器
程序清单:
.title“FIR1.ASM”.mmregs.defstartx.usect“x”,8PA0.set0PA1.set1.dataCOEF:.word1*32768/10.word2*32768/10.word-4*32768/10.word3*32768/10.word-4*32768/10.word2*32768/10.word1*32768/10
;自定义数据空间x数据存储器暂存y(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)
定义系数bi程序存储器
COEFb6
;定义b6=0.1
;定义b5=0.2
;定义b4=-0.4
;定义b3=0.3
;定义b2=-0.4
;定义b1=0.2
;定义b0=0.1b5b4b3b2b1b0x(n)2023/3/2951第6章应用程序设计(1)
用线性缓冲区实现FIR滤波器
x数据存储器暂存y(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)x(n-5)x(n-6)程序存储器
COEFb6b5b4b3b2b1b0程序清单:.textstart:SSBXFRCTSTM#x+7,AR2STM#6,AR0LD#x+1,DPPORTRPA1,@x+1FIR1:RPTZA,#6MACD*AR2-,COEF,ASTHA,*AR2PORTW*AR2+,PA0BDFIR1PORTRPA1,*AR2+0.endA;设置小数乘法
;设置AR2
AR2→;设置复位值AR0=6
;设置缓冲区首地址
→;输入x(n)
x(n);A清0,设置迭代次数
0000000000;7次乘法累加和移位
b6×x(n-6)AR2→x(n-5)A+b5×x(n-5)AR2→x(n-4)A+b4×x(n-4)AR2→x(n-3)A+b3×x(n-3)AR2→x(n-2)A+b2×x(n-2)AR2→x(n-1)A+b1×x(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/3/2952第6章应用程序设计2.
FIR滤波器的实现(2)
用循环缓冲区实现FIR滤波器
设N=7,FIR滤波器的算法:
y(n)=b0x(n)+b1x(n-1)+…+b5x(n-5)+b6x(n-6)DARAMy(n)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…x(n-5)x(n-6)DARAMb0b1b2b3b4b5b6yb0xn2023/3/2953第6章应用程序设计(2)
用循环缓冲区实现FIR滤波器
程序清单:.title“FIR2.ASM”.mmregs.defstart.bssy,1xn.usect“xn”,7b0.usect“b0”,7PA0.set0PA1.set1.datatable:.word1*32768/10.word2*32768/10.word3*32768/10.word4*32768/10.word5*32768/10.word6*32768/10.word7*32768/10DARAMy(n-1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…b0b1b2b3b4…x(n-5)x(n-6)b5b6;源文件标题
;定义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.7ROMtable0.10.20.30.40.50.60.72023/3/2954第6章应用程序设计.textstart:SSBXFRCTSTM#b0,AR1RPT#6MVPDtable,*AR1+STM#xn+6,AR2STM#b0+6,AR3STM#7,BKSTM#-1,AR0LD#xn,DPPORTRPA1,@xnFIR2:RPTZA,#6MAC*AR2+0%,*AR3+0%,ASTHA,@yPORTW@y,PA0BDFIR2PORTRPA1,*AR2+0%.endDARAMy(n-1)x(n)x(n-1)x(n-2)x(n-3)x(n-4)…b0b1b2b3b4…x(n-5)x(n-6)b5b6yxnb0…A;设置小数乘法
;AR1指向b0
AR1→;设置传输次数
ROMtable0.10.20.30.40.50.60.7;系数传输至数据区
0.10.1AR1→0.20.2AR1→0.30.3AR1→0.40.4AR1→0.50.5AR1→0.60.6AR1→0.70.7AR1→;AR2指向x(n-6)单元
AR2→;AR3指向b6单元
AR3→;设置缓冲区长度
;设置双操作数增量
;设置页指针
;输入x(n)
x(n);A清0,设置迭代次数0000000000;双操作数乘法累加x(n-6)0.70.7x(n-6)+0AR2→AR3→x(n-5)0.60.6x(n-5)+AAR2→AR3→x(n-4)0.50.5x(n-4)+AAR2→AR3→x(n-3)0.40.4x(n-3)+AAR2→AR3→x(n-2)0.30.3x(n-2)+AAR2→AR3→x(n-1)0.20.2x(n-1)+AAR2→AR3→x(n)0.10.1x(n)+AAR2→AR3→;存储y(n)y(n);输出y(n);循环;输入最新x(n+1),修正AR2x(n+1)AR2→2023/3/2955第6章应用程序设计链接命令文件:
FIR2.objvectors.obj-oFIR2.out-mFIR2.map-estartMEMORY{PAGE0:EPROM:org=0E000h,len=1000hVECS:org=0FF80h,len=0080hPAGE1:SPRAM:org=0060h,len=0020hDARAM:org=0080h,len=1380h}
;选定的目标文件
;生成FIR2的输出文件
;生成FIR2的存储器映像文件
;定义源程序的入口地址
;定义目标存储器空间
;第0页:程序存储器
;EPROM的起始地址:E000h
长度:4K
;VECS的起始地址:FF80h
长度:0080h
;第1页:数据存储器
;SPRAM的起始地址:0060h
长度:0020h
;DARAM的起始地址:0080h
长度:1380h
存储空间ROMRAMEPROM…………EPROM…0E0004k0EFFFVECS……VECS0FF8080h0FFEFSPRAM………SPRAM006020h007FDARAM………DARAM……00801380h13EF2023/3/2956第6章应用程序设计链接命令文件:
SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1xn:align(8){}>DARAMPAGE1b0:align(8){}>DARAMPAGE1.vections:VECSPAGE0};在存储器中定义输出段的位置;text段定位在程序存储器即源程序位于程序存储器;系数区定义在程序存储器
;bss段定义在暂存器
;从xn起8个单元定义在DARAM;从b0起8个单元定义在DARAM;vections定义在VECS区2023/3/2957第6章应用程序设计2.
FIR滤波器的实现(3)
系数对称FIR滤波器的实现
系数对称FIR滤波器具有线性相位的特性,在数字信号处理中应用十分广泛,常用于相位失真要求较高的场合。
设滤波器N=8,若系数bn=bN-1-n,则为对称FIR滤波器。其输出方程:
y(n)=b0x(n)+b1x(n-1)+b2x(n-2)+b3x(n-3)+b3x(n-4)+b2x(n-5)+b1x(n-6)+b0x(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/3/2958第6章应用程序设计(3)
系数对称FIR滤波器的实现
对称FIR滤波器的实现方法:
①在RAM中开辟两个N/2长度的循环缓冲区New和Old
,分别存放N/2个新数据和老数据;
NewOldx(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→③在程序存储器中设置系数表;
系数表b0b1b2b3COEF④进行(AR1)+(AR2)AH加法运算,并修改数据指针,AR1+1AR1,AR2-1AR2;
AHx(n)x(n)x(n-7)x(n-7)x(n)+x(n-7)x(n)+x(n-7)AR1→AR2→2023/3/2959第6章应用程序设计(3)
系数对称FIR滤波器的实现
对称FIR滤波器的实现方法:
系数表b0b1b2b3COEFNewx(n)x(n-3)x(n-2)x(n-1)x(n)AR1→Oldx(n-4)x(n-5)x(n-6)x(n-7)x(n-7)AR2→x(n)+x(n-7)AH⑤累加器B清0,完成块操作,重复执行4次;0000000000B乘法—累加:(AH)bi+BB;PAR→b0x(n)+x(n-7)0000000000b0[x(n)+x(n-7)]+0b0[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→b1x(n-3)+x(n-6)b0[x(n)+x(n-7)]b1[x(n-3)+x(n-6)]+Bb1[x(n-3)+x(n-6)]+BPAR→x(n-2)x(n-5)x(n-2)+x(n-5)x(n-2)+x(n-5)AR1→AR2→b2x(n-2)+x(n-5)b1[x(n-3)+x(n-6)]+Bb2[x(n-2)+x(n-5)]+Bb2[x(n-2)+x(n-5)]+BPAR→x(n-1)x(n-4)x(n-1)+x(n-4)x(n-1)+x(n-4)AR1→AR2→b3x(n-1)+x(n-4)b2[x(n-2)+x(n-5)]+Bb3[x(n-1)+x(n-4)]+Bb3[x(n-1)+x(n-4)]+BPAR→x(n)+x(n-7)x(n)+x(n-7)AR1→AR2→⑥保存和输出结果;2023/3/2960第6章应用程序设计(3)
系数对称FIR滤波器的实现
对称FIR滤波器的实现方法:
x(n)+x(n-7)AHBa3[x(n-1)+x(n-4)]+BAR2→Oldx(n-7)x(n-6)x(n-5)x(n-4)PAR→系数表b0b1b2b3Newx(n)x(n-3)x(n-2)x(n-1)AR1→⑦修正数据指针,
AR1指向New区的最老数据;
AR2指向Old区的最老数据。AR2→⑧用New区的最老数据替代Old区的最老数据,输入新数据替代New区的最老数据;x(n-3)x(n+1)⑨重复执行④~⑧。
2023/3/2961第6章应用程序设计(3)
系数对称FIR滤波器的实现
系数对称FIR滤波器指令:
格式:FIRSXmem,Ymem,Pmad
功能:PmadPAR;
当(RC)0,则B+AH(Pmem)B,
((Xmem)+(Ymem))16A,
PAR+1PAR,RC-1RC其中,Pmem是通过PAR寻址。2023/3/2962第6章应用程序设计(3)
系数对称FIR滤波器的实现
程序清单:
.title“FIR3.ASM”.mmregs.defstart.bssy,1x_new:.usect“DATA1”,4x_old:.usect“DATA2”,4size.set4PA0.set0PA1.set1.dataCOEF:.word1*32768/10.word2*32768/10.word3*32768/10
.word4*32768/10
;定义MMR寄存器符号名
;定义模块
;给y保留1个空间
;给DATA1段保留4个空间
;给DATA2段保留4个空间
;给符号size赋值
;给输出口地址PA0赋值
;给输入口地址PA1赋值
;在ROM中定义数据段
;定义数据0.1
;定义数据0.2
;定义数据0.3
;定义数据0.4
y(n)数据存储器…x(n)x(n-3)x(n-2)x(n-1)…x(n-4)x(n-5)x(n-6)x(n-7)…ySPRAMx_newDATA1x_oldDATA2程序存储器b0b1b2b3COEF系数表2023/3/2963第6章应用程序设计(3)
系数对称FIR滤波器的实现
程序清单:.textstart:LD#x_new,DPSSBXFRCTSTM#x_new,AR1STM#x_old+(size-1),AR2STM#size,BKSTM#-1,AR0PORTRPA1,#x_new
;设置页指针
;设置小数乘法
;AR1指向x_new单元
;AR2指向x_old+3单元
;设置循环缓冲区长度
;设置双操作数增量AR0=-1
;输入数据x(n)2023/3/2964第6章应用程序设计程序清单:FIR3:ADD*AR1+%,*AR2+0%,ARPTZB,#(size-1)FIRS*AR1+%,*AR2+0%,COEFSTHB,@yPORTW@y,PA0MAR*+AR1(2)%MAR*AR2+%MVDD*AR1,*AR2+0%BDFIR3PORTRPA1,*AR1.end
;完成AH=x(n)+x(n-7)
;B清0,设置重复次数
;乘法累加、加法操作
B
=
AH×bi
+
B
AH=(AR1)+(AR2)
;保存y(n)结果
;输出结果
;修正AR1,指向New区最老数据
;修正AR2,指向Old区最老数据
;New区向Old区传送数据
;循环
;输入最新数据至New区2023/3/2965第6章应用程序设计6.1FIR滤波器的DSP实现6.1.5
FIR滤波器的设计实例设计一个FIR低通滤波器,其设计参数:滤波器阶数:N=40;截止频率:wp=0.35,
ws=0.4。
2023/3/2966第6章应用程序设计6.1.5
FIR滤波器的设计实例根据给定的设计参数,滤波器系数可由MATLAB中的fir2函数产生,函数调用格式:1.由给定的设计参数确定滤波器的系数
f=[00.350.41];
m=[1100];
b=fir2(39,f,m)
利用freqz函数可绘制滤波器的幅频、相频特性,其格式:
freqz(b,512,1000)
2023/3/2967第6章应用程序设计滤波器的频率特性:1.由给定的设计参数确定滤波器的系数2023/3/2968第6章应用程序设计采用循环缓冲区实现FIR滤波器的源程序如下:
2.汇编源程序
.title“FIR.ASM”.mmregs.bssy,1K_FIR_BFFR.set40PA0.set0PA1.set1FIR_COFF_TABLE.usect“FIR_COFF”,40;定义数据存储空间D_DATA_BUFFER.usect“FIR_BFR”,40;定义数据存储空间.dataCOFF_FIR_START:.word-7*32768/10000,3*32768/10000
;b0,b1
.word14*32768/10000,10*32768/10000;b2,b3……….word3*32768/10000,-7*32768/10000;b38b392023/3/2969第6章应用程序设计
.text.defFIR_INIT.defFIR_TASKFIR_INIT:SSBXFRCT;设置小数乘法
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
RPTZA,#K_FIR_BFFR-1STLA,*AR4+STM#(D_DATA_BUFFER+K_FIR_BFFR-1),AR4STM#(FIR_COFF_TABLE+K_FIR_BFFR-1),AR52023/3/2970第6章应用程序设计STM#-1,AR0;设置双操作数减量
LD#D_DATA_BUFFER,DP;设置页指针
PORTRPA1,@D_DATA_BUFFER;输入x(n)FIR_TASK:STM#K_FIR_BFFR,BKRPTZA,#K_FIR_BFFR-1;重复操作
MAC*AR4+0%,*AR5+0%,A;双操作数乘法-累加
STHA,@y;暂存y(n)PORTW@y,PA0;输出y(n)BDFIR_TASK;循环PORTRPA1,*AR4+0%;输入最新样本,并修正AR3.end2023/3/2971第6章应用程序设计
在’C5402DSP硬件系统中,用户可使用的存储器资源:3.汇编源程序的链接命令文件
程序存储空间:片内0080H~3FFFH,片外48000H~4FFFFH;数据存储空间:片内0080H~3FFFH,片外4000H~7FFFH。2023/3/2972第6章应用程序设计FIR滤波器源程序的链接命令文件如下:
/*SOLUTIONFILEFORFIR.CMD*/vectors.objfir.obj-ofir.out-mfir.map-efir_initMEMORY{PAGE0:EPROM:org=0E000Hlen=1000HVECS:org=0FF80Hlen=0080HPAGE1:SPRAM:org=0060Hlen=0020HDARAM:org=0080Hlen=1380H}2023/3/2973第6章应用程序设计FIR滤波器源程序的链接命令文件如下:
SECTIONS{.text:>EPROMPAGE0.vectors:>VECSPAGE0.data:>EPRAMPAGE0.bss:>SPRAMPAGE1FIR_BFR:align(128){}>DARAMPAGE1FIR_COFF:align(128){}>DARAMPAGE1}2023/3/2974第6章应用程序设计6.2IIR滤波器的DSP实现
IIR滤波器与FIR滤波器相比,具有相位特性差的缺点,但它的结构简单、运算量小,具有经济、高效的特点,并且可以用较少的阶数获得很高的选择性。因此,也得到了较为广泛的应用。
6.2.1
IIR滤波器的基本结构
IIR滤波器差分方程的一般表达式:(6.2.1)
在零初始条件下,对式(6.2.1)进行z变换,得到传递函数:
具有N个零点zi和N个极点pi。若有极点位于单位圆外将导致系统不稳定。
2023/3/2975第6章应用程序设计对于IIR滤波器,系统稳定的条件如下:若|pi|<1,当n→时,h(n)→0,系统稳定;若|pi|>1,当n→时,h(n)→,系统不稳定。
6.2.1
IIR滤波器的基本结构
IIR滤波器具有多种形式,主要有:
直接型(也称直接Ⅰ型
标准型(也称直接Ⅱ型)
变换型
级联型
并联型2023/3/2976第6章应用程序设计6.2.1
IIR滤波器的基本结构二阶IIR滤波器,又称为二阶基本节,分为直接型、标准型和变换型。1.二阶IIR滤波器
对于一个二阶IIR滤波器,其输出:
y(n)=b0x(n)+b1x(n-1)+b2x(n-2)-a1y(n-1)-a2y(n-2)
(6.2.6)
2023/3/2977第6章应用程序设计(1)直接型(直接Ⅰ型)1.二阶IIR滤波器
根据式(6.2.6),可以得到直接型二阶IIR滤波器的结构图。4个延迟单元(z-1)b0b1b2z-1-a1-a2x(n)y(n)+++z-1z-1z-1+2023/3/2978第6章应用程序设计(1)直接型(直接Ⅰ型)直接型二阶IIR滤波器还可用下图的结构实现。+b0b1b2-a1-a2x(n)y(n)w(n)+++z-1z-1z-1z-12023/3/2979第6章应用程序设计(1)直接型(直接Ⅰ型)前向通道:+z-1z-1b0b1b2z-1z-1-a1-a2x(n)y(n)w(n)+++反馈通道:输出方程:2023/3/2980第6章应用程序设计(2)
标准型(直接Ⅱ型)1.二阶IIR滤波器
这种结构所使用的延迟单元最少(只有2个),因此得到了广泛地应用,故称之为标准型IIR滤波器。z-1z-1b0b1b2-a1-a2x(n)y(n)w(n)++++2023/3/2981第6章应用程序设计(3)
变换型1.二阶IIR滤波器
这种结构与标准型相比,延迟单元的数目和乘法的次数不变,但只需要三次累加。z-1b0b1b2-a1-a2x(n)y(n)z-1+++2023/3/2982第6章应用程序设计6.2.1
IIR滤波器的基本结构一个高阶IIR滤波器,可以由多个二阶基本节级联组成。其传递函数可以表示为:2.级联型IIR滤波器
H(z)=CH1(z)H2(z)…Hk(z)(6.2.10)
Hi(z)为一阶或二节阶的传递函数。级联型滤波器的结构:
x(n)y(n)···Hk(z)H2(z)H1(z)2023/3/2983第6章应用程序设计2.级联型IIR滤波器由三个标准二阶节级联构成的六阶IIR滤波器:+Z-1+++++Z-1Z-1Z-1Z-1Z-1x(n)b0b1b2a2a1d0d1d2c2c1f0f1f2e1e2y(n)由三个二阶节级联的六阶IIR滤波器2023/3/2984第6章应用程序设计6.2.1
IIR滤波器的基本结构高阶IIR滤波器可以由多个二阶基本节并联组成。其传递函数:3.并联型IIR滤波器
H(z)=C+H1(z)+H2(z)+…+Hk(z)2023/3/2985第6章应用程序设计3.并联型IIR滤波器并联型滤波器的结构:
x(n)y(n)H1(z)H2(z)Hk(z)C...++2023/3/2986第6章应用程序设计6.2IIR滤波器的DSP实现
IIR滤波器的设计可利用模拟滤波器原型来实现。6.2.2
IIR滤波器的设计①
根据模拟设计理论设计出满足要求的传递函数H(s);②
将H(s)变换成数字滤波器的传递函数H(z)。设计方法:2023/3/2987第6章应用程序设计1.
模拟滤波器的原型6.2.2
IIR滤波器的设计①
巴特沃思滤波器,其幅度响应在通带内具有最平特性;②
切比雪夫滤波器,在通带内具有等波纹特性,且阶数小于巴特沃思滤波器;③
椭圆滤波器,在通带和阻带内具有等波纹特性,且阶数最小。设计IIR滤波器的基础是设计模拟滤波器的原型,这些原型滤波器主要有:2023/3/29
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护士急救考试题及答案
- 护考试题及答案2016
- 高考语文模拟试题及答案
- 助产士试题及答案
- 航线专员考试题及答案
- 航法考试题及答案
- 焊工割刀考试题及答案
- 四川公司宣传片策划方案
- 回归澳门纪念日活动方案
- 国际文秘节活动方案
- 急性ST段抬高型心肌梗死的护理课件
- 期末模拟卷 2024-2025学年人教版数学六年级上册(含答案)
- 《无人机测绘技术》项目2任务1无人机航测任务规划
- Module7 Unit2 This Little Girl Can't Walk(说课稿)-2024-2025学年外研版(三起)英语五年级上册
- 第47届世界技能大赛江苏省选拔赛网络系统管理项目技术文件V1.1
- 平安资产管理介绍
- 国开(内蒙古)2024年秋《矿井通风(证书课程)#》形考测试1-3终考答案
- 浙江省教师招聘考初中科学专业知识(试卷)
- 人工智能在教育行业的创新应用研究
- 常州大学《工程热力学》2022-2023学年第一学期期末试卷
- 新能源行业光伏发电技术操作指南
评论
0/150
提交评论