第6章 应用程序设计(DSP原理及应用)_第1页
第6章 应用程序设计(DSP原理及应用)_第2页
第6章 应用程序设计(DSP原理及应用)_第3页
第6章 应用程序设计(DSP原理及应用)_第4页
第6章 应用程序设计(DSP原理及应用)_第5页
已阅读5页,还剩176页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章

应用程序设计内容提要

数字信号处理主要面向密集型的运算,包括乘法-累加、数字滤波和快速傅里叶变换等。’C54x具备了高速完成上述运算的能力,并具有体积小、功耗低、功能强、软硬件资源丰富等优点,现已在通信等许多领域得到了广泛应用。

本章结合数字信号处理和通信中最常见、最具有代表性的应用,介绍通用数字信号处理算法的DSP实现方法,主要包括:

有限冲激响应(FIR)数字滤波器

无限冲激响应(IIR)数字滤波器快速傅里叶变换(FFT)

正弦信号发生器。在简要介绍上述内容的基本原理、结构和算法之后,重点介绍设计方法和DSP实现的方法。

2022/10/111DSP原理及应用第6章应用程序设计

6.1

FIR滤波器的DSP实现

6.2

IIR滤波器的DSP实现6.3快速傅里叶变换(FFT)的DSP实现6.4正弦波信号发生器2022/10/112DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

在数字信号处理中,滤波占有极其重要的地位。数字滤波是语音处理、图像处理、模式识别、频谱分析等应用中的基本处理算法。用DSP芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好等特点。

数字滤波器是DSP的基本应用,分为有限冲激响应滤波器FIR和无限冲激响应滤波器IIR。

本节主要讨论FIR滤波器的基本结构、设计方法和DSP实现方法。

2022/10/113DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

6.1.1

FIR滤波器的基本结构

数字滤波是将输入的信号序列,按规定的算法进行处理,从而得到所期望的输出序列。

一个线性位移不变系统的输出序列y(n)和输入序列x(n)之间的关系,应满足常系数线性差分方程:(6.1.1)

x(n):输入序列,y(n):

输出序列,ai、bi:滤波器系数,N:滤波器的阶数。

2022/10/114DSP原理及应用第6章应用程序设计6.1.1

FIR滤波器的基本结构

在式(6.1.1)中,若所有的ai均为0,则得FIR滤波器的差分方程:

(6.1.2)

对式(6.1.2)进行z变换,可得FIR滤波器的传递函数:

(6.1.3)

2022/10/115DSP原理及应用第6章应用程序设计6.1.1

FIR滤波器的基本结构

FIR滤波器的结构:

z-1z-1+x(n)y(n)x(n-1)x(n-N+1)b0b1bN-2bN-1z-12022/10/116DSP原理及应用第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)。2022/10/117DSP原理及应用第6章应用程序设计6.1.1

FIR滤波器的基本结构

在数字滤波器中,FIR滤波器具有如下几个主要特点:

FIR滤波器无反馈回路,是一种无条件稳定系统;②

FIR滤波器可以设计成具有线性相位特性。2022/10/118DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

6.1.2

FIR滤波器的设计方法设计FIR滤波器的基本方法之一,是用有限项傅氏级数来逼近所要求的滤波器响应。1.

用傅氏级数设计FIR滤波器

Hd()的傅氏级数:

(6.1.5)

=f/fs为归一化频率,fs为采样频率,T=2f/fs

=2。2022/10/119DSP原理及应用第6章应用程序设计6.1.2

FIR滤波器的设计方法系数Cn的选择可在最小均方误差的条件下,使传递函数H(z)逼近Hd()来决定。1.

用傅氏级数设计FIR滤波器

(6.1.6)

且C-n=Cn。

设Hd()为偶函数,则

n

0(6.1.7)

2022/10/1110DSP原理及应用第6章应用程序设计理想的传递函数Hd()有无限多个系数Cn,而实际的滤波器的系数只能有有限多个。因此,可以将式(6.1.7)中的无限项级数进行截取,得到近似的传递函数:1.

用傅氏级数设计FIR滤波器

(6.1.8)

||<1,Q为有限的正整数。

(6.1.9)

令z=ej2,则有

2022/10/1111DSP原理及应用第6章应用程序设计近似传递函数的冲激响应是由一系列的系数来决定:C-Q、C-Q+1、…、C-1、C0、…、CQ-1、CQ。1.

用傅氏级数设计FIR滤波器

(6.1.10)

为了解决这个问题,可引入Q个采样周期的延时,得

当n>0时,对应的Cnzn项代表的是一个非因果的滤波器,即输出先于输入,要得到n时刻的输出响应需用到n+1时刻的输出响应。

2022/10/1112DSP原理及应用第6章应用程序设计令i=-(n-Q),作变量置换得1.

用傅氏级数设计FIR滤波器

0

i

2Q(6.1.11)

令bi=CQ-i,N-1=2Q,则H(z)的表达式为

0

i

N-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

2022/10/1113DSP原理及应用第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项构成。

2022/10/1114DSP原理及应用第6章应用程序设计6.1.2

FIR滤波器的设计方法

FIR滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波,其设计可根据给出的滤波特性,通过下式计算系数Cn来实现。2.

滤波器的设计

n

0

2022/10/1115DSP原理及应用第6章应用程序设计

设低通滤波器的截止频率为fc,采样频率为fs,则系数表达式:

2.

滤波器的设计

(6.1.14)

(1)

低通滤波器的设计

2022/10/1116DSP原理及应用第6章应用程序设计

高通滤波器可以由一个幅度为1的响应减去一个低通滤波的响应来获得,如图所示。

2.

滤波器的设计

(n)响应

(2)

高通滤波器的设计

11fc1f00f0ffc(n)函数的表达式:

低通滤波

高通滤波

(n)=

1n=00

n

0高通滤波器的系数:

2022/10/1117DSP原理及应用第6章应用程序设计带通滤波器可以由两个截止频率不同的低通滤波器获得,如图所示。

2.

滤波器的设计

低通滤波2

(3)

带通滤波器的设计

11fc11f00f0ffc1低通滤波1

带通滤波

带通滤波器的系数,等于两个低通滤波器的系数之差:

fc2fc2

fc1和fc2为低通滤波器的截止频率,fs为采样频率。

2022/10/1118DSP原理及应用第6章应用程序设计带阻滤波器可由(n)和带通滤波器相减获得,如图所示。

2.

滤波器的设计

(n)响应(4)

带阻滤波器的设计

11fc11f00f0ffc1带通滤波

带阻滤波

带阻滤波器的系数:

fc2fc22022/10/1119DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

6.1.3

FIR滤波器的MATLAB设计

MATLAB是一种功能强、效率高、便于进行科学和工程计算的交互式软件包,它集数值分析、矩阵运算、信号处理和图形显示于一体,为用户提供了方便、友好的界面环境。MATLAB中的工具箱(Toolbox)包含了许多实用程序。它提供了多种FIR滤波器设计方法。

下面以标准频率响应设计法fir1和任意频率响应设计法fir2为例说明其使用方法。2022/10/1120DSP原理及应用第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)窗。

2022/10/1121DSP原理及应用第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(1)

采用汉明窗设计低通FIR滤波器

使用b=fir1(n,Wn)可得到低通滤波。0

Wn

1,Wn=1相当于0.5fs。

格式:

b=fir1(n,Wn)

2022/10/1122DSP原理及应用第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(2)

采用汉明窗设计高通FIR滤波器

在b=fir1(n,Wn,‘ftype’)中,当ftype=high时,可设计高通滤波器。

格式:

b=fir1(n,Wn,‘high’)2022/10/1123DSP原理及应用第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(3)

采用汉明窗设计带通FIR滤波器

在b=fir1(n,Wn)中,当Wn=[W1W2]时,可得到带通滤波器,其通带为W1<w<W2,W1和W2分别为通带的下限频率和上限频率。

格式:

b=fir1(n,[W1W2])2022/10/1124DSP原理及应用第6章应用程序设计使用fir1函数可设计标准的低通、高通、带通和带阻滤波器。1.

fir1函数

(4)

采用汉明窗设计带阻FIR滤波器

在b=fir1(n,Wn,‘ftype’)中,当ftype=stop,Wn=[W1W2]时,fir1函数可得到带阻滤波器。

格式:

b=fir1(n,[W1W2],‘stop’)2022/10/1125DSP原理及应用第6章应用程序设计1.

fir1函数

(5)

采用其他窗口函数设计FIR滤波器使用Window参数,可以用其他窗口函数设计出各种加窗滤波器。Window参数可采用的窗口函数有:

Boxcar,Hanning,Bartlett,Blackman,Kasier和chebwin等,其默认时为Hamming窗。

例如,采用Bartlett窗设计带阻滤波器,其格式:

b=fir1(n,[W1W2],‘stop’,Bartlett(n+1))

2022/10/1126DSP原理及应用第6章应用程序设计1.

fir1函数

注意:用fir1函数设计高通和带阻滤波器时,所使用的阶数n应为偶数,当输入的阶数n为奇数时,fir1函数会自动将阶数增加1形成偶数。【例6.1.1】

采用Hamming窗设计一个48阶FIR带通滤波器,通带为0.35<w<0.65。

解:采用fir1函数的程序格式:

b=fir1(48,[0.350.65

]);

【例6.1.2】设计一个FIR高通滤波器,使用具有30dB波纹的Chebyshev窗,其阶数为34,截止频率为0.48。

解:采用fir1函数设计高通滤波器的程序格式为

Window=chebwin(35,30);

b=fir1(34,0.48,‘high’,Window);2022/10/1127DSP原理及应用第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)

2022/10/1128DSP原理及应用第6章应用程序设计2.

fir2函数

说明:

参数n为滤波器的阶数;

参数f为频率点矢量,且f[0,1],f=1对应于0.5fs。矢量f按升序排列,且第一个元素必须为0,最后一个必须为1,并可以包含重复的频率点;

参数m为幅度点矢量,在矢量m中包含了与f相对应的期望得到的滤波器幅度;

参数Window用来指定所使用的窗函数类型,其默认值为汉明(Hamming)窗;

参数npt用来指定fir2函数对频率响应进行内插的点数;

参数lap用来指定fir2函数在重复频率点附近插入的区域大小。

2022/10/1129DSP原理及应用第6章应用程序设计2.

fir2函数

【例6.1.3】

设计一个30阶的低通FIR滤波器,其截止频率为0.6。

解:采用fir2函数的程序格式:

f=[00.60.61];

m=[1100];

b=fir2(30,f,m);

在使用MATLAB设计FIR滤波器时,还可以使用freqz()和plot()函数。

freqz()函数:可求出传递函数的幅频响应和相频响应;

plot()函数:可绘出滤波器的幅频响应和相频响应曲线。

2022/10/1130DSP原理及应用第6章应用程序设计2.

fir2函数

例如,在例6.1.1~例6.1.3中,若希望得到滤波器的特性,可使用freqz()函数,其格式:

freqz(b,1,512)

得滤波器的特性如图。

2022/10/1131DSP原理及应用第6章应用程序设计2.

fir2函数

例6.1.1带通滤波器的特性2022/10/1132DSP原理及应用第6章应用程序设计2.

fir2函数

例6.1.2高通滤波器的特性2022/10/1133DSP原理及应用第6章应用程序设计2.

fir2函数

例6.1.3低通滤波器的特性2022/10/1134DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

6.1.4

FIR滤波器的DSP实现

FIR滤波器的输出表达式:

y(n)=b0x(n)+b1x(n-1)+…

+bn-1x(n-N+1)

(6.1.18)

bi为滤波器系数,x(n)为滤波器在n时刻的输入,y(n)为n时刻的输出。

基本算法:采用乘法累加运算。即不断地输入样本x(n),经过z-1延时后,再进行乘法-累加,最后输出滤波结果y(n)。

2022/10/1135DSP原理及应用第6章应用程序设计6.1.4

FIR滤波器的DSP实现1.

z-1算法的实现

常用的方法:

线性缓冲区法

循环缓冲区法。

(1)

线性缓冲区法

又称延迟线法。

特点:

①在数据存储器中开辟一个N单元的缓冲区(滑窗),用来存放最新的N个输入样本;

②从最老样本开始取数,每取一个数后,样本向下移位;

③读完最后一个样本后,输入最新样本并存入缓冲区的顶部。

2022/10/1136DSP原理及应用第6章应用程序设计1.

z-1算法的实现

(1)

线性缓冲区法

缓冲区:数据存储器

顶部为低地址单元,存放最新样本;缓冲区顶部最新样本

底部为高地址单元,存放最老样本;缓冲区底部最老样本

指针ARx指向缓冲区底部。

←ARx2022/10/1137DSP原理及应用第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,指向缓冲区的底部。

2022/10/1138DSP原理及应用第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)2022/10/1139DSP原理及应用第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→2022/10/1140DSP原理及应用第6章应用程序设计(1)

线性缓冲区法

Z-1的运算是通过执行存储器延时指令来实现的。即将数据存储器中的数据向较高地址单元移位来进行延时。

其指令:

DELAYSmem

;(Smem)

Smem+1

DELAY*AR3-

;AR3指向源地址

将延时指令与其他指令结合使用,可在同样的机器周期内完成这些操作。例如:

LD+DELAY→

LTDMAC+DELAY→MACD

2022/10/1141DSP原理及应用第6章应用程序设计(1)

线性缓冲区法注意:用线性缓冲区实现z-1运算时,缓冲区的数据需要移动,这样在一个机器周期内需要一次读和一次写操作。因此,线性缓冲区只能定位在DARAM中。

优点:

在存储器中新老数据的位置直观明了。

2022/10/1142DSP原理及应用第6章应用程序设计1.

z-1算法的实现

(2)循环缓冲区法特点:

①在数据存储器中开辟一个N个单元的缓冲区(滑窗),用来存放最新的N个输入样本;

②从最新样本开始取数;

③读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变;

④用BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。

2022/10/1143DSP原理及应用第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)+y62022/10/1144DSP原理及应用第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→2022/10/1145DSP原理及应用第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)2022/10/1146DSP原理及应用第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单元。2022/10/1147DSP原理及应用第6章应用程序设计(2)循环缓冲区法循环寻址的算法:

if0≤index+step<BK

index=index+stepelseifindex+step≥BK

index=index+step-BKelseifindex+step<0

index=index+step+BK

index:存放在辅助寄存器中的地址指针;step:步长,可正可负,|step|≤BK。2022/10/1148DSP原理及应用第6章应用程序设计(2)循环缓冲区法

用BK规定循环缓冲区的长度N;

缓冲区起始地址的k个最低有效位必须为0,且满足2k>N。要求:例如:N=31,k的最小值为5,则缓冲区的起始地址:XXXXXXXXXXX00000B

若N=32,k的最小值为6,缓冲区的起始地址:XXXXXXXXXX000000B2022/10/1149DSP原理及应用第6章应用程序设计6.1.4

FIR滤波器的DSP实现2.

FIR滤波器的实现

’C54x提供的乘法-累加指令MAC和循环寻址方式,可使FIR数字滤波器在单周期内完成每个样值的乘法-累加计算。而每个样值的乘法-累加计算,可采用RPTZ和MAC指令结合循环寻址方式来实现。

为了实现对应项乘积运算,输入的样值x(n)和滤波系数bi必须合理的存放,并正确初始化存储块和块指针。样值x(n)和滤波系数bi的存放可用线性缓冲区或循环缓冲区实现。

2022/10/1150DSP原理及应用第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*AR1-,b,A功能:A=A+(AR1)×(b),AR1-1→AR1,(AR1)→(AR1+1)AAR1→x(n-6)b6x(n-6)b6×x(n-6)+Ab6×x(n-6)+AAR1→x(n-5)2022/10/1151DSP原理及应用第6章应用程序设计(1)

用线性缓冲区实现FIR滤波器

程序清单:

.title“FIR1.ASM”

.mmregs

.defstartx.usect“x”,8

PA0.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)2022/10/1152DSP原理及应用第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.end

A;设置小数乘法

;设置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→2022/10/1153DSP原理及应用第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)DARAMb0b1b2b3b4b5b6yb0xn2022/10/1154DSP原理及应用第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.72022/10/1155DSP原理及应用第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→2022/10/1156DSP原理及应用第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}

;选定的目标文件

;生成FIR4的输出文件

;生成FIR4的存储器映像文件

;定义源程序的入口地址

;定义目标存储器空间

;第0页:程序存储器

;EPROM的起始地址:E000h

长度:4K

;VECS的起始地址:FF80h

长度:0080h

;第1页:数据存储器

;SPRAM的起始地址:0060h

长度:0020h

;DARAM的起始地址:0080h

长度:1380h

存储空间ROMRAMEPROM…………EPROM…0E0004k0EFFFVECS……VECS0FF8080h0FFEFSPRAM………SPRAM006020h007FDARAM………DARAM……00801380h13EF2022/10/1157DSP原理及应用第6章应用程序设计链接命令文件:

SECTIONS{.text:>EPROMPAGE0.data:>EPROMPAGE0.bss:>SPRAMPAGE1

xn:align(8){}>DARAMPAGE1b0:align(8){}>DARAMPAGE1.vections:VECSPAGE0};在存储器中定义输出段的位置;text段定位在程序存储器即源程序位于程序存储器;系数区定义在程序存储器

;bss段定义在暂存器

;从xn起8个单元定义在DARAM;从b0起8个单元定义在DARAM;vections定义在VECS区2022/10/1158DSP原理及应用第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次加法2022/10/1159DSP原理及应用第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→2022/10/1160DSP原理及应用第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→⑥保存和输出结果;2022/10/1161DSP原理及应用第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)⑨重复执行④~⑧。

2022/10/1162DSP原理及应用第6章应用程序设计(3)

系数对称FIR滤波器的实现

系数对称FIR滤波器指令:

格式:

FIRSXmem,Ymem,Pmad

功能:

PmadPAR;

当(RC)0,则B+AH(Pmem)B,

((Xmem)+(Ymem))16A,

PAR+1PAR,RC-1RC

其中,Pmem是通过PAR寻址。2022/10/1163DSP原理及应用第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系数表2022/10/1164DSP原理及应用第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)2022/10/1165DSP原理及应用第6章应用程序设计程序清单:FIR3:ADD*AR1+0%,*AR2+0%,ARPTZB,#(size-1)FIRS*AR1+0%,*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区2022/10/1166DSP原理及应用第6章应用程序设计6.1FIR滤波器的DSP实现

6.1.5

FIR滤波器的设计实例设计一个FIR低通滤波器,其设计参数:滤波器阶数:N=40;截止频率:wp=0.35,

ws=0.4。

2022/10/1167DSP原理及应用第6章应用程序设计6.1.5

FIR滤波器的设计实例

根据给定的设计参数,滤波器系数可由MATLAB中的fir2函数产生,函数调用格式:

1.由给定的设计参数确定滤波器的系数

f=[00.350.41];

m=[1100];

b=fir2(39,f,m)

利用freqz函数可绘制滤波器的幅频、相频特性,其格式:

freqz(b,512,1000)

2022/10/1168DSP原理及应用第6章应用程序设计滤波器的频率特性:1.由给定的设计参数确定滤波器的系数

2022/10/1169DSP原理及应用第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;b38b392022/10/1170DSP原理及应用第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),AR52022/10/1171DSP原理及应用第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

.end2022/10/1172DSP原理及应用第6章应用程序设计

在’C5402DSP硬件系统中,用户可使用的存储器资源:3.汇编源程序的链接命令文件

程序存储空间:片内0080H~3FFFH,

片外48000H~4FFFFH;

数据存储空间:片内0080H~3FFFFH,

片外4000H~7FFFH。2022/10/1173DSP原理及应用第6章应用程序设计FIR滤波器源程序的链接命令文件如下:

/*SOLUTIONFILEFORFIR.CMD*/vectors.obj

fir.obj

-ofir.out

-mfir.map

-efir_initMEMORY{PAGE0:EPROM:org=0E000Hlen=1000HVECS:org=0FF80Hlen=0080HPAGE1:SPRAM:org=0060Hlen=0020HDARAM:org=0080Hlen=1380H}2022/10/1174DSP原理及应用第6章应用程序设计FIR滤波器源程序的链接命令文件如下:

SECTIONS{

.text:>EPROMPAGE0

.vectors:>VECSPAGE0

.data:>EPRAMPAGE0

.bss:>SPRAMPAGE1FIR_BFR:align(128){}>DARAM

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论