125
第 8 第 第第第第第第第第第第第第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第 第第 C54x 第第第第第 第第第第第 体: 第第 第第第第第第 (FIR) 第第第第第 第第第第第第 (IIR) 第第第第第 第第第第第第第 (FFT)

第 8 章 数字信号处理典型算法程序设计

  • Upload
    caia

  • View
    166

  • Download
    0

Embed Size (px)

DESCRIPTION

第 8 章 数字信号处理典型算法程序设计. 本章将要讲解通信与信号处理中常见的下列几种具有代表性的算法在 C54x 芯片中的具体实现方法: 卷积 有限冲激响应 (FIR) 数字滤波器 无限冲激响应 (IIR) 数字滤波器 快速傅立叶变换 (FFT). 第 8 章 数字信号处理典型算法程序设计. 目录: 8.1 卷积运算的 DSP 实现 8.2 数字滤波器的 DSP 实现 8.3 IIR 滤波器的 DSP 实现 8.4 快速傅立叶变换的 DSP 实现. 第 8 章 数字信号处理典型算法程序设计. 8.1 卷积运算的 DSP 实现. - PowerPoint PPT Presentation

Citation preview

Page 1: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计 本章将要讲解通信与信号处理中常见的下列几种具有代表性的算法在 C54x 芯片中的具体实现方法:• 卷积• 有限冲激响应 (FIR) 数字滤波器• 无限冲激响应 (IIR) 数字滤波器• 快速傅立叶变换 (FFT)

Page 2: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计 目录:8.1 卷积运算的DSP实现8.2 数字滤波器的DSP实现 8.3 IIR滤波器的DSP实现8.4快速傅立叶变换的DSP实现

Page 3: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.1 卷积运算的 DSP 实现 数字卷积运算通常采用两种方法:

线性卷积圆卷积

Page 4: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.1.1 信号的卷积

函数 f(t) 与 h(t) 的卷积积分,用符号“﹡ ”表示,即:

( ) ( ) ( ) ( ) ( )y t f t h t f h t d

读作 f(t) 与 h(t) 的卷积积分,简称卷积。

Page 5: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.1.2 离散系统的卷积分析 1. 离散时间信号的时域分解

( )k i 根据单位序列 及单位移位序列 的选择性,( )k

可将任意序列 f(k) 用单位序列及其移位序列表示,即:

( ) ( 1) ( 1) (0) ( ) (1) ( 1) ( ) ( )i

f k f k f k f k f i k i

Page 6: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计例:如图所示离散时间序列,可表示为:

( ) 0 ( 0) 1 ( 1) 2 ( 2) 3 ( 3)f k k k k k

1

2

3

0 1 2 3

Page 7: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. 离散系统的卷积计算过程

1( )f k 2 ( )f k 1( )f k 2 ( )f k设两个离散时间信号为 和 ,定义 与的卷积和运算为:

1 2 1 2( ) ( ) ( ) ( )k

f k f k f i f k i

与卷积积分一样,离散卷积也可通过图解法来计算,分为反折、平移、相乘、取和等过程。

Page 8: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3. 卷积的计算在实际应用中,参与卷积运算的两个序

列长度往往差距较大,比如我们要实时的对一长序列语音信号进行“过滤”处理,可以采用有限冲激相应序列与该语音信号进行卷积的方法来实现。 比如:重叠保留法

Page 9: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.1.3. 重叠保留法卷积运算在 C54x 上的实现 1. 利用 C54x 自带的 dsplib 库函数实现TI 公司提供了以 C54x 系列芯片为基础的DSPLIB 库函数,在 CCS 开发系统内包含DSPLIB 库函数。这些库函数均为经过优化处理的符合 C 语言标准的函数。

Page 10: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计DSPLIB 库提供了一个直接进行线性卷积运算的函数,形式如下:

oflag = short convol (DATA *x, DATA *h, DATA *r, ushort nr, ushort nh)

其中 x , h 为输入数组,即进行卷积的两序列,r 为输出数组。

Page 11: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计其算法为:

0

( ) ( ) ( )nh

k

r j h k x j k

0 <=j <=nr

通常我们将分段后的待滤波数据放于 X 数组中,而将滤波器冲激响应序列放于 h 数组。按前述方法, x长度为 L+M-1 , h 长度为 M ,则 nr 应为 L+M-1 。计算得到结果后,舍弃 r 的前 M-1 个值。

Page 12: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计其算法为:

0

( ) ( ) ( )nh

k

r j h k x j k

, 0 <=j <=nr

C 程序代码为:#define Frame 240 // 输入数据长度#define FilterLength 8 // 滤波器长度for ( i = 0 ; i < (Frame-7) ; i ++ ) {  for ( j = 0 ; j <  FilterLength ; j ++ )  Acc0 = L_mac( Acc0, Filter[j], Spnt[i+j] ) ;  Spnt[i] = round( Acc0) ; // 小数 16 位精度}  注: L_mac : Acc0=Filter*Spnt, 参见 TMS320C54x-Optimizing C-C++ Compiler User’s Guide-spru103g-October 2002.pdf

Page 13: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. 汇编语言设计C54x 指令集内提供了单周期乘累加指令 MAC 和循环寻址方式,使每个样值的乘累加计算可以在一个周期内完成。 卷积运算就是实现两组数对应项乘积的累加和。可采用 RPTZ 和 MAC 指令,结合循环寻址方式去方便地实现这一运算:

RPTZ 累加器, N-1MAC (双访问数据),(双访问数据),累加器

Page 14: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计其中, RPTZ 指令将累加器清零初始化,并将立即数 N-1 ( 16 位)装入到重复计数器,使下一条指令重复执行 N 次。MAC 指令实现将两存储区数据的乘积累加到累加器,再通过存储区指针以循环寻址的方式指向下一个存储区。

Page 15: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计程序设计的要点简要分析如下:为了能高效的利用 DSP 流水线,待卷积的两组数据都应存放在 DARAM 中如果使用双操作数指令,辅助寄存器只能用AR2~AR5 ,在此我们选择 AR3 和 AR4 作为双操作数寻址辅助寄存器汇编语言的代码设计要充分考虑到资源的优化等

Page 16: 第 8 章 数字信号处理典型算法程序设计

重叠保留法卷积运算算法程序在此经常使用一种零长度循环缓冲区,循环体对应的汇编程序如下: (修改书中的红色部分)

.bss x,239 .bss y,233 .bss h,8BEGIN STM # 233,BRC STM # x,AR1 STM # x,AR3 STM # h,AR4 STM # y,AR5 STM # -7, AR0 ; loop starts

RPTB next-1

Page 17: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计 LD #0, A ;LD *AR4+, 13, A ; 原先的程序是 IIR 滤波?! MAC *AR4 +, *AR3+, A MAC * AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +, *AR3+, A MAC *AR4 +0%, *AR3-, A ; 双操作数只有 +0% SFTA A, 2 ; 在此不需要 RND A ; 小数 16 位精度 MVMM AR1+, AR3 STL A, * AR5+

LD #0,A ; 上面第一行有了,这里不需要了 ; loop ends next:

Page 18: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.2 数字滤波器的 DSP 实现

本节主要介绍 FIR 和 IIR 滤波器 DSP 实现方法。首先简要介绍滤波器的基本原理、结构和设计方法,然后通过实例介绍滤波器设计在 C54x上的实现方法。

用 DSP 芯片实现数字滤波除了具有稳定性好、精确度高、不受环境影响等优点外,还具有灵活性好的特点。

Page 19: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.2.1 FIR 滤波器的结构与设计 1.FIR 滤波器的结构一般时域离散系统或网络的描述方式:

差分方程单位脉冲响应系统函数进行描述。

Page 20: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

则其系统函数,即滤波器的传递函数为:

0

1

( )1

Mk

kk

Nk

kk

b zH z

a z

如果系统输入、输出服从 N阶差分方程:

0 1

( ) ( ) ( )M N

k kk k

y n b x n k a y n k

Page 21: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计ka

相应的传递函数为:

0

( ) ( )M

k

k

H z b k z

若所有的 均为零,则有:

0

( ) ( )M

kk

y n b x n k

Page 22: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

据上两式可直接画 FIR 滤波器的直接型结构: ( )x n 1z 1z 1z 1z

(0)h (1)h (2)h ( 3)h N ( 2)h N ( 1)h N

( )y n

FIR 滤波器的直接型结构又称为卷积型结构,有时也称为横截型结构。

Page 23: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

FIR 滤波器主要具有如下几个特点: 可以在幅度特性随意设计的同时,保证精确、严格的线性相位

FIR 滤波器的单位脉冲响应是有限长序列,因此 FIR 滤波器系统总是稳定的

Page 24: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

由于 FIR 滤波器一般为非递归结构,在有限精度运算中,不会出现像递归机构的滤波器那样的极限震荡等不稳定现象,误差较小FIR 滤波器可采用 FFT 算法实现,从而

提高运算效率

Page 25: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. FIR 滤波器的设计方法

0

( ) ( )M

kk

y n b x n k

kb

kb

中,系数 (k=1~M )形成的序列( k=1~M )。

就是单位冲激响应序列,滤波器设计的目标就是找到合适的序列方法 1 :傅立叶级数法

( )dH 是以 s 为周期的周期函数,所以可展开为傅

立叶级数,即 :

(2 / )( ) sjkd k

k

H C e

Page 26: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计 / s 这里我们用 表示归一化频率,即 ,则有 :

2( ) j kd k

k

H C e

kC可由下式求得 :

1 2

1

1 ( )2

j nk dC H e d

Page 27: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计通常 ( )dH

为偶函数,这时 : 1 2

0

1 ( ) 02

j nk dC H e d k

且 。 k kC C

因为 FIR 的系数为有限个,因此需将上式中的系数进行截取,到近似的传递函数为 : 2( )

Qj k

a kk Q

H C e

式中 Q 为有限的正整数。

Page 28: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

2jz e 令 , 则有: ( )

Qk

a kk Q

H z C z

上式即为所求系统的 Z 域传递函数。近似传递函数的冲激响应是由系数决定。

Page 29: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

( )dh n

( )dh n( ) 0 1h n n N

方法 2 :窗函数法设计 FIR窗函数法的思路是寻找一有限长序列 逼近理想的滤波器脉冲响应 。 是对 做截取处理。用一个有限长度的窗函数序列 来截取 ,即:( )w n

( )dh n

( ) ( ) ( )dh n w n h n

Page 30: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计利用 ,就可得到一近似的传递函数 : ( )h n

( ) ( ) ( )Q

j jna d

n Q

H e w n h n e

如令 ,则有 : jz e

( ) ( ) ( )Q

na d

n Q

H z w n h n z

Page 31: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计同样,为使式 8-17 具有因果性,需延迟 Q 个样值,可得 :

( ) ( ) ( ) ( )Q

Q n Qa d

n Q

H z z H z w n h n z

令 ,n Q k 上式成为:

2

0

( ) ( ) ( )Q

kd

k

H z w n h n z

Page 32: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计( ) ( ) ( )dh k w k Q h k Q 再令 , 2N Q ,得到:

0

( ) ( )N

k

k

H z h k z

设计 FIR 滤波器时,加窗是一个重要的计算步骤。采用矩形窗函数是简单并且直接的方法。而在实际设计中,一般采用其他窗函数,比较常用的窗函数有 Hanning 、 Hamming 、 Blackman 、 Kaiser窗等。

Page 33: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计FIR 滤波器分为低通滤波、高通滤波、带通滤波和带阻滤波。下面给出各种滤波器具体的设计方法:1 )低通滤波器的设计

sin[2 ( / )] 2

c sn

n f fCn

Page 34: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2 )高通滤波器的设计 高通滤波器可以由一个幅度为 1 的响应减去一个低通滤波的响应来获得。 (n) 函数的表达式为: 1 0

0 0n

nn

高通滤波器的系数可由下式计算得到:sin[2 ( / )]( )

2c s

nn f fC nn

Page 35: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3) 带通滤波器的设计 带通滤波器可以由两个截止频率不同的低通滤波器获得,其系数等于两个低通滤波器的系数之差。

2 1sin[2 ( / )] sin[2 ( / )]

2 2c s c s

nn f f n f f

C -n n

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

Page 36: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计4) 带阻滤波器的设计

带阻滤波器可由 (n) 和带通滤波器相减获得,其系数可以由一个幅度为 1 的响应减去一个带通滤波的响应来获得。

Page 37: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3.FIR 滤波器的设计工具在 MATLAB 中,提供了两种 FIR 滤波器设计方法:一种是标准通带滤波器的设计 FIR1

一种是多带 FIR 滤波器的设计 FIR2

Page 38: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计函数 FIR1 :只能设计标准的低通、高通、带通和带阻线性相位 FIR 滤波器。 函数 FIR2 :还可设计加窗的 FIR 滤波器,但它针对任意形状的分段线性频率相应,这一点在FIR1

中是受到限制的。

Page 39: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计1) fir1 函数 具体调用格式为 :

(1)b = fir1(n,Wn);

(2) b = fir1(n,Wn,'ftype'); 

(3) b = fir1(n,Wn, Window);

(4)b=fir1(n , Wn ,‘ ftype’ , Window)

Page 40: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计n :滤波器的阶数;Wn :滤波器的截止频率;ftype :用来决定滤波器的类型:

当 ftype=high 时,可设计高通滤波器;当 ftype=stop 时,可设计带阻滤波器。 Window :用来指定滤波器采用的窗函数类型,其默认值为汉明( Hamming )窗。

Page 41: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计①设计低通 FIR 滤波器 : 使用 b=fir1(n , Wn) 可得到低通滤波。 0 Wn 1, Wn=1 相当于 0.5fs 。

格式: b=fir1(n , Wn)

②设计高通 FIR 滤波器 : 在 b=fir1(n , Wn, 'high') 中, 0 Wn 1, 。 格式: b=fir1(n , Wn, 'high')

Page 42: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计③设计带通 FIR 滤波器 : 在 b=fir1(n , Wn) 中,当Wn=[ W1 W2 ]

时,可得到带通滤波器,其通带为 W1 <w<W2 , W1 和 W2 分别为通带的下限频率和上限频率。

格式: b=fir1(n , [ W1 W2 ]) ④设计带阻 FIR 滤波器 在 b=fir1(n , Wn ,‘ ftype’) 中,当 ftype=

stop , Wn=[ W1 W2 ] 时, fir1 函数可得到带阻滤波器。

格式: b=fir1(n , [ W1 W2 ] ,‘ stop’)

Page 43: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计在上述滤波器设计中, Window 参数可采用的窗口函数有:

BoxcarHanningBartlettBlackmanKasierchebwin 等

默认的窗函数为汉明( Hamming )窗。

Page 44: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2) fir2 函数它可用来设计有任意频率响应的各种加窗 FIR 滤波器。

具体调用格式为: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)

Page 45: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计n :滤波器的阶数;f :频率点矢量,且 f[0 , 1] , f=1 对应于

0.5fs 。矢量 f 按升序排列,并且第一个元素必须为 0 ,最后一个元素必须为 1 ,并可以包含重复的频率点;m: 参数 m 为幅度点矢量,在矢量m 中包含了与 f 相对应的期望得到的滤波器幅度;

Page 46: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

Window :用来指定所使用的窗函数类型,其默认值为汉明( Hamming )窗;Npt :用来指定 fir2 函数对频率响应进行内插的点数;Lap :用来指定 fir2 函数在重复频率点附近插入的区域大小。

Page 47: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计4. FIR 滤波器在 C54x 上的实现1) 利用 C54x 自带的 dsplib 库函数实现

DSPLIB 库提供了几个与 FIR 滤波直接有关的函数,分别是 :cfirfirfirdecfirinterpfirsfirs2firlat

Page 48: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2) FIR 滤波运算的汇编语言程序设计

采用汇编的方法主要有:线性缓冲区法

循环缓冲区法

{单值更新缓存法 区域更新缓存法

Page 49: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(1) 线性缓冲区法单值更新缓存法:具体实现步骤如下:

(1) 在数据存储器中开辟一个 N单元的缓冲区,用来存放最新的 N个输入样本; (2)从最老样本开始取数,每取一个数后,样本向下移位;(3) 读完最后一个样本后,输入最新样本并存入缓冲区的顶部。

Page 50: 第 8 章 数字信号处理典型算法程序设计

线性缓冲区法实现 FIR 滤波 .title " fir1.asm " .mmregs .def startX .usect “x”,8 ; 定义数据存储空间PA0 .set 0PA1 .set 1

Page 51: 第 8 章 数字信号处理典型算法程序设计

.dataCOEF: .word 1*32768/10 ;h6=0.1 .word 2*32768/10 ;h5=0.2 .word -4*32768/10 ;h4=-0.4 .word 3*32768/10 ;h3=0.3 .word -4*32768/10 ;h2=-0.4 .word 2*32768/10 ;h1=0.2 .word 1*32768/10 ;h0=0.1 .text

Page 52: 第 8 章 数字信号处理典型算法程序设计

start: SSBx FRCT ; 小数乘法编程时,设置 FRCT( 小数方式 )位 STM #x+7,AR2 STM #6,AR0 LD #x+1,DP ; PORTR PA1,@x+1

This instruction loads the upper9 bits of address x into DP (in ST0)

Page 53: 第 8 章 数字信号处理典型算法程序设计

FIR1: ;FIR 滤波运算 RPTZ A,#6 ; 累加器 A 清零 , 设置迭代次数 MACD *AR2-,COEF,A ; 完成乘法 - 累加并移位 STH A, *AR2 ; 暂存 y(n) PORTW *AR2+ ,PA0 ; 输出 y(n) BD FIR1 循环 PORTR PA1,*AR2+0 ; 输入最新样本,并修改 AR2=AR2+AR0, 并指向缓冲区底部 .END

Page 54: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(2) 用循环缓冲区实现 FIR 滤波器 循环缓冲区算法的过程如下:

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

(2)从最新样本开始取数;(3) 读完最老样本后,输入最新样本来代替最老样本,而其他数据位置不变; (4) 用 BK寄存器对缓冲区进行间接寻址,使缓冲区地址首尾相邻。

Page 55: 第 8 章 数字信号处理典型算法程序设计

2) 用循环缓冲区实现 FIR 滤波器FIR_TASK:STM #INPUT,AR6 ; 加载输入数据STM #OUTPUT,AR7 ; 指向输出数据地址单元STM #K_FRAME_SIZE-1,BRC ; 设定循环次数RPTBD FIR_FILTER_LOOP-1 ; 程序块循环STM #K_FIR_BFFR,BK ; 设置缓冲区长度LD *AR6+,A ; 读入输入数据,修改数据指针FIR_FILTER:STL A, *AR4+% ; 将读入的输入数据放到循环缓冲区中RPTZ A , (K_FIR_BFFR-1) ;A 清零,重复执行 37 次MAC *AR4+0%, *AR5+0% , A ; 输入数据与滤波器系数乘累加,并按模修正数据指针STH A,*AR7+ ; 保存输出数据到输出地址单元FIR_FILTER_LOOP.end

Page 56: 第 8 章 数字信号处理典型算法程序设计

循环缓冲区法实现 FIR 滤波器 .title " fir2.asm " .mmregs .def start .bss y,1xn .usect “xn”,7 ; 定义数据存储空间h0 .usect “h0”,7 ; 定义数据存储空间PA0 .set 0PA1 .set 1

Page 57: 第 8 章 数字信号处理典型算法程序设计

.dataTable: .word 1*32768/10 ;h0=0.1 .word 2*32768/10 ;h1=0.2 .word 3*32768/10 ;h2=0.3 .word 4*32768/10 ;h3=0.4 .word 5*32768/10 ;h4=0.5 .word 6*32768/10 ;h5=0.6 .word 7*32768/10 ;h6=0.7 .text

Page 58: 第 8 章 数字信号处理典型算法程序设计

start: SSBx FRCT; 小数乘法编程时,设置 FRCT( 小数方式 )位 STM #h0,AR1 RPT #6 MVPD table,*AR1+ STM #xn+6,AR2 STM #h0+6,AR3 STM #7,BK STM #-1,AR0 LD #xn,DP PORTR PA1,@xn

Page 59: 第 8 章 数字信号处理典型算法程序设计

FIR2: ;FIR 滤波运算 RPTZ A,#6 MAC *AR2+0%,*AR3+0%,A STH A,@y PORTW @y,PA0 BD FIR2 PORTR PA1,*AR2+0% ; 用最新的样本值替代最旧的样本值 .END

Page 60: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(2) 用循环缓冲区实现 FIR 滤波器 使用循环缓冲区进行滤波时程序中应注意的几个问题:① 实现 N 个循环缓冲区单元首尾相邻,须用 BK寄存器按模间接寻址来实现;② 缓冲区起始地址的 k 个最低有效位必须为 0 ,且必须满足 2k > N 。③ 采用 Ti 公司的 C54x 系列进行滤波仿真,要将滤波器系数和输入数据转化成 Q15 格式。

Page 61: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(3) 区域更新缓存法 区域更新缓存法就是每次批量输入一批( m+N-1个)新样值,然后对这一批数进行滤波处理后批量存储( m 个)结果,然后更新缓存。 采用前面卷积程序。

适合于采样与传输数据很快,而处理时间相对较慢的场合。

1

0

( ) ( )N

kk

y n b x n k

Page 62: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(4) 系数对称 FIR 滤波器的实现 对称 FIR 滤波器的实现方法如图所示:

b(0)

b(1)

b(2)

b(3)

x(n-4)

x(n-5)

x(n-6)

x(n-7) AR4

x(n)

x(n-1)

x(n-2)

x(n-3)

AR3

新 旧 系数

Page 63: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计具体过程如下: (1) 在 RAM 中开辟两个 N/2 长度的循环缓冲区New 和 Old ,分别存放 N/2 个新数据和老数据;

(2) 设置循环缓冲区指针: AR3 指向 New 区中的最新数据, AR4 指向 Old 区中的最老数据; (3) 在程序存储器中设置系数表; (4) 进行 (AR3)+(AR4)AH 加法运算,并修改数据指针, AR3+1AR3 , AR4-1AR4;

Page 64: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(5) 保存和输出结果 ;

(6)修正数据指针, AR3 指向 New 区的最老数据;AR4 指向 Old 区的最老数据。 (7) 用 New 区的最老数据替代 Old 区的最老数据,输入新数据替代 New 区的最老数据 ; (8) 重复执行 (4)~ (7) 。

Page 65: 第 8 章 数字信号处理典型算法程序设计

系数对称 FIR 滤波器实现优点 : 乘法的次数减少了一半。

x[n-(M-1)/2]

x[n-(M+1)/2]

x[n-1] x[n-2]

x[n-M] x[n-M+1] x[n-M+2]

x[n]

Type II FIR filter

( -1)/2

0 0

- - -MM

k k

y n h k x n k h k x n k x n M k

, n 0,1,...,M h M n h n

Page 66: 第 8 章 数字信号处理典型算法程序设计

优点 : 乘法的次数减少了一半。实现方法 : 使用专门用于系数对称 FIR 滤波器的指令。 FIRS Xmem , Ymem , Pmad该指令的操作如下:

执行: Pmad→PAR 当 (RC)≠0 (循环计数器)

((Xmem)+ (Ymem)) 16→A≪ (B)+ (A(32- 16))×PAR→B

(PAR+ 1)→PAR (RC)- 1→RC

Page 67: 第 8 章 数字信号处理典型算法程序设计

说明: FIRS 指令在同一机器周期内,通过 C 和 D总线读两次数据存储器,同时通过 P总线读程序存储区的一个系数。注意两点:(1) 在数据存储器中开辟两个循环缓冲区,如 New 和 Old缓冲区,分别存放 N/2 个新数据和老数据,循环缓冲区的长度为N/2 。设置了循环缓冲区,就需要设置相应的循环缓冲区指针,如用 AR2 指向 New缓冲区中最新的数据, AR3 指向 Old缓冲区中最老的数据;(2) 将系数表存放在程序缓冲区内。

Page 68: 第 8 章 数字信号处理典型算法程序设计

.mmregs.def begin .bss y, 1

x_new: .usect ″DATA1″,4x_old: .usect ″DATA2″,4size .set 4PA0 .set 0PA1 .set 1

.dataCOEF .word 1*32768/10, 2*32768/10

.word 3*32768/10, 4*32768/10

.text

Page 69: 第 8 章 数字信号处理典型算法程序设计

begin: LD #y , DPSSBX FRCTSTM #x_new , AR2 ; AR2 指向新缓冲区第一个单元STM #x_old+(size-1),AR3 ; AR3 指向老缓冲区最后 1 个

单元STM #size, BK ;循环缓冲区长度STM #-1 , AR0LD #x_new , DPPORTR PA1,# x_new ;输入 x[n]

FIR : ADD * AR2+ 0%,* AR3+ 0%,A ;AH=x[n]+x[n-7]( 第一次 )

RPTZ B, # (size-1) ; B=0, 下条指令执行 size 次FIRS* AR2+0% , * AR3+ 0% , COEF

; B+=AH*h0, AH=x[n-1]+x[n-6],…

STH B , @y ;保存结果

Page 70: 第 8 章 数字信号处理典型算法程序设计

PORTW @y , PA0 ;输出结果MAR * +AR2(2)% ;修正 AR2 ,指向新缓冲区最老数

据MAR * AR3+% ;修正 AR3 ,指向老缓冲区最老数

据MVDD* AR2 , * AR3+0% ;新缓冲区向老缓冲区传送一个

数BD FIR

PORTR PA1 , * AR2 ;输入新数据至新缓冲区

.end

Page 71: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.2.2 FIR 滤波器在 C54x 上的实现举例

目标:设计一个 15阶 FIR低通滤波器,截止频率 0.6DSP 应用技术实验指导书 .pdfFIR_ 滤 _ 波 _ 器 _ 设 _ 计 .doc2011年 DSP 作业 FIR 滤波器在 DSP 上的实现FIR 滤波器的设计 .docDSP FIR IIR 课设说明书DSP课程设计(论文) -FIR 滤波器设计 .pdf

Page 72: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.3 IIR 滤波器的 DSP 实现 IIR 滤波器的结构简单,运算量小,具有经济、灵活、高效等特点 。8.3.1 IIR 滤波器的基本原理和设计方法1. IIR 滤波器的特点IIR 滤波器差分方程的一般形式为:

0 1

( ) ( ) ( )M N

k kk k

y n b x n k a y n k

Page 73: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计IIR 滤波器具有无限长的单位脉冲响应,在结构上存在反馈回路,即是递归型的。 当M=N 时,在零初始条件下,对上式进行 z 变换,得到传递函数:

-10 1

-111

... -( )... -

N N NN k

N NkN k

b z b z b z zH z Cz a z a z p

Page 74: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计 对于 IIR 滤波器,系统稳定的条件如下:

若 ,当 时, ,系统稳定;若 ,当 时, ,系统不稳定;

| | 1kp n n

( ) 0h n

( ) 0h n | | 1kp

IIR 滤波器结构具有多种形式: (1) 直接 I 型 ( 也称直接型 )(2) 直接 II 型 ( 也称标准型 )(3)级联型(4) 并联型(5)格型 (lattice)

Page 75: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. IIR 数字滤波器的结构与设计1)二阶 IIR 数字滤波器

0 1 2 1 2( ) ( ) ( -1) ( - 2) - ( -1) - ( - 2) y n b x n b x n b x n a y n a y n

二阶 IIR 数字滤波器是构成复杂 IIR 数字滤波器的基本单元,因此又称为二阶基本节。一个二阶 IIR 滤波器,其输出可写:

Page 76: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计直接型二阶 IIR 滤波器的结构图:

Page 77: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计直接 I 型的二阶 IIR 数字滤波器:

Page 78: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计标准型二阶 IIR 数字滤波器: x(n) y(n)

w(n)

a1

a2

b1

b2

1z

1z

Page 79: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2) 高阶 IIR 滤波器

一个高阶 IIR 滤波器可由多个二阶基本节级联组成。 其传递函数为 :

1 2( ) ( ) ( )... ( )kH z CH z H z H z

式中 Hi(z) 为一阶或二节阶的传递函数。

Page 80: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计其结构如图 :

x(n) y(n)Hk(z)H1(z)C H2(z)

此外,一个高阶 IIR 滤波器可由多个二阶基本节并联组成。其传递函数为 :

1 2( ) ( ) ( ) ... ( )kH z C H z H z H z

Page 81: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计并联型高阶 IIR 滤波器结构如图 :

H2 (z)

x(n) y(n)H1(z)

Hk(z)

C

Page 82: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

格型结构义可分为两种 :

一种是所谓的全极点结构 :全极点 IIR格型滤波器以多个基本节级联而成一种是即有极点又有零点的零极结构

Page 83: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计全极点格型 IIR 滤波器的基本节 :

yi(n) yi-1(n)

ei(n) ei-1(n)

-ki

ki

对于格型滤波器结构,只要 ik的绝对值小于 1 ,滤波器就是稳定的。

Page 84: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3. IIR 数字滤波器的设计方法

常用到的模拟滤波器的原型主要有以下几种: 1 )巴特沃思滤波器,其幅度响应在通带内具有最平特性;2 )切比雪夫滤波器,在通带内具有等波纹特性 ,且阶数小于巴特沃思滤波器;3 )椭圆滤波器,在通带和阻带内具有等波纹特性,且阶数最小。

Page 85: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计设计步骤如下:

( )H s

( )H s ( )H z

1 )根据模拟设计理论设计出满足要求的传递函数变换成数字滤波器的传递函数

2 )将常用的变换方法有 :

冲激不变法双线性变换法

Page 86: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计双线性变换的基本性质如下:

① s 平面上的 j轴映射到 z 平面的单位圆上;

② s 平面的左半平面映射到 z 平面的单位圆内;

③ s 平面的右半平面映射到 z 平面的单位圆外。

Page 87: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计由双线性变换法设计数字滤波器,首先要设计符合指标要求的模拟滤波器。但一般只给出归一化原型滤波器的设计数据。而对于截止频率为 Ωc 的滤波器,可通过适当的代换得到实际的模拟滤波器。 例如:对于低通滤波器,用 s/ Ωc 代替原型滤波器中的 s 即可。

Page 88: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计实际应用中,需要设计各种类型的数字滤波器,—般有下列两种方法: (1)把一个归一化模拟滤波器经频带变换化为所需类型的模拟滤波器,再通过双线性变换法数字化为所需类型的数字滤波器。(2) 将模拟低通原型用双线性变换法数字化为数字低通滤波器,再变换成各种类型的数字滤波器。

Page 89: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计第一种方法设计各型数字滤波器的一般步骤: (1) 根据数字频率指标计算预畸变的模拟频率指标, 计算方法为:

tan( / 2)T

(2) 根据通带或阻带允许的波动,确定滤波器类型。根据阻带的衰耗要求,确定滤波器的阶数,进而求得归一化模拟低通滤波器的传递函数 Ha(s),然后用 s/ Ωc 代替滤波器 Ha(s) 中的 s 即可得到实际的模拟滤波器传递函数 H(s) 。

Page 90: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计(3) 根据双线性变换法把模拟滤波器 H(s) 变换为数字滤波器 H(z) 。 H(s) 与 H(z)之间的对应关系为:

( ) | ( ) |s j z ej TH s H z

以上第 (2)步第 (3)步可以合并进行,即可参照下表给出的变换公式进行代换。

Page 91: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计模拟低通原型到各种数字滤波器的变换方法:

变换类型 变换方法 说明模拟低通原型→数字低通 表示低通预畸截

频模拟低通原型→数字高通 表示高通预畸截

1 11c

zsz

tan( T / 2)c c

tan( T / 2)c c ( 1)1

c zsz

Page 92: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

模拟低通原型→数字带通

模拟低通原型→数字带阻

2 1

2 1

cos[( + )T / 2] cos[( - )T / 2]

c c

c c

a

2 1 tan[( - )T / 2]a c c

2

2

( 1)2 1

a zsz az

2 1 tan[( - )T / 2]a c c

2 1

2 1

cos[( + )T / 2] cos[( - )T / 2]

c c

c c

a

2

2

1 2 11a

z azsz

2c 1c注: 表示通带或阻带的上截频, 表示通带或阻带的下截频, T 为采样周期

Page 93: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计例 8-1 设计一个低通滤波器。要求:带宽 BW=1rad/s ,采样频率 fs=100Hz 。 解:根据给定的指标,令c = BW=1rad/s ,

选择一个满足带宽条件的低通模拟T=1/ fs=0.01s 。滤波器,传递函数为:

1( ) s+1aH s

对进行预畸变,求 Ωc 。 1 tan( T / 2) tan(1 0.01/ 2)

200c c

Page 94: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计用 s/ Ωc 代换原型滤波器 ( )aH s中的 s ,得 :

根据表 8.1 得到: 1( )

200s+1H s

1 11c

zsz

代入上式得数字滤波器的传递函数 :1 1

1

z+1( ) ( ) 201z-199

c

zsz

H z H s

Page 95: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.3.2 IIR 滤波器的 C54x 实现 1.巴特沃思型滤波器的设计1)butter 函数 函数形式为: [b,a] = butter ( n,Wn ) [b,a] =

butter ( n,Wn,‘ftype’ ) •当设计截止频率为 Wn 的 n阶低通滤波器,其中截止频率应满足 0≤Wn≤1 , Wn=1 相当于 0.5fs 。

Page 96: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

•当 ftype = high 时,可设计截止频率为 Wn 的高通滤波器;•当 ftype = stop 时,可设计带阻滤波器,此时

Wn = [ W1 W2] ,阻带为 W1< W<W2 。

•当Wn=[ W1 W2] 时, butter 函数产生一个 2n阶的数字带通滤波器,其通带为 W1 < w <W2 。

Page 97: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2)buttord 函数 函数形式为: [n , Wn] = buttord ( Wp,Ws,Rp,Rs )•当Wp > Ws 时,为高通滤波器;•当Wp, Ws 为二元矢量时,若Wp < Ws ,则为带通或带阻滤波器,此时 Wn 也为二元矢量。利用 buttord 函数可得到滤波器的最小阶数 n ,并使通带 (0,Wp) 内的纹波系数小于 Rp ,阻带 (Ws, 1) 内衰减系数大于 Rs 。

Page 98: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2.切比雪夫滤波器的设计分为两种类型:

ChebyshevⅠ 型:通带等波纹性能 ChebyshevⅡ 型:阻带等波纹性能

1)cheby1 函数函数形式为: [ b,a ] = cheby1 ( n,Rp,Wn ) [ b,a ] = cheby1 ( n,

Rp,Wn,‘ftype’ ) 可以设计低通、带通、高通和带阻 ChebyshevⅠ 型数字滤波器,其通带内为等波纹,阻带内为单调。

Page 99: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2)cheb1ord 函数

函数形式为: [n , Wn] = cheb1ord ( Wp, Ws, Rp, Rs ) 此函数用来选择 ChebyshevⅠ 型滤波器的阶数。 Wp 和 Ws 分别为通带和阻带滤波器的截止频率,其值为 0≤Wp(或Ws)≤1 。

Rp 和 Rs 分别是通带和阻带区的纹波系数。

Page 100: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3) cheby2 函数函数形式为: [ b,a ] = cheby2 ( n,Rs,Wn ) [ b,a ] = cheby2 ( n,Rs,Wn,‘ftype’ ) cheby2 函数与 cheby1 函数基本相同,但是其通带内为单调的,阻带内为等波纹,由 Rs 指定阻带内的波纹。 cheby2 函数可以设计 ChebyshevⅡ 型低通、带通、高通和带阻数字滤波器。

Page 101: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计4) cheb2ord 函数函数形式为:

[ n , Wn ] = cheb2ord ( Wp, Ws, Rp, Rs ) 可以利用该函数确定 ChebyshevⅡ 型数字滤波器的最小阶数 n 和截止频率Wn 。

Page 102: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3.椭圆滤波器的设计 1)ellip 函数函数形式为: [ b , a ] = ellip ( n, Rp, Rs, Wn )

[ b , a ] = ellip ( n, Rp, Rs, Wn,‘ftype’ ) 此函数用来设计 Elliptic (椭圆)型滤波器。

可设计 n阶低通或带通滤波器。也可设计 n阶高通或带阻滤波器。

Page 103: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2) ellipord 函数

函数形式为: [ n , Wn ] = ellipord ( Wp, Ws, Rp, Rs ) 此函数用来选择椭圆滤波器的阶数。

Page 104: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.4 快速傅立叶变换的 DSP 实现8.4.1 FFT 算法介绍FFT 算法的基本原理是把长序列的 DFT逐次分解为较短序列的 DFT 。按照抽取方式的不同可分为: DIT-FFT (按时间抽取)和 DIF-FFT (按频率抽取)算法。按照蝶形运算的构成不同可分为:基 2 、基 4 、基8 以及任意因子( 2n,n为大于 1 的整数)。

Page 105: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计1. 傅立叶变换和逆变换对于变换长度为 N 的序列 x(n) 其傅立叶变换可以表示如下:

-1

0

( ) ( ) , 0,1,..., 1

NknN

n

X k x n W k N

其中,W=exp(-2π/N), 称为旋转因子或蝶形因子。 上式即为 DFT 的定义式。

Page 106: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计NnkW 的特性:

1) 对称性: / 2nk nk N

N NW W 2) 周期性:

nk nk N nk NkN N NW W W

并由以上两条得到: ( ) ( )n N k n N k nk

N N NW W W / 2 ( / 2)1 1, ,nkN N k N k

N N N NW W W W

Page 107: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. 基 2 、 DIT-FFT (按时间抽取)

按时间抽取的算法是在时间域内将输入序列不断根据奇偶划分为 2 个短序列。这时要求序列的长度 N 为 2 的整数幂次,如不满足,可通过补零调整。在时间域上,将每一级输入序列依次按奇偶分为两个短序列进行计算。

Page 108: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计结果 N点 X(k) 可分为两部分:

1 2( ) ( ) ( ) 0,1,... / 2 1kNX k X k W X k k N

1 2( / 2) ( ) ( ) 0,1,... / 2 1kNX k N X k W X k k N

其中: / 2 1

1/ 2(2 ) ( )N

krN

r

x r W X k

0

/ 2 1

2/ 2(2 1) ( )N

krN

r

x r W X k

0

Page 109: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计蝶形运算单元如图所示 :

x (n)

x (n+N/2) x2 (n)

x1(n)

nNW

图 8-19 蝶形运算单元图 基 2 、 DIT-FFT (按时间抽取)

Page 110: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计另一种 FFT 算法——按频率抽取的 IF-FFT 算法,是把输出序列 X( k) ( 也是 N点序列 ) 按其顺序的奇偶分解为越来越短的序列 。其蝶形运算单元如图 8-20 所示:

X1 (k)

X2 (k)

X (k)

X (k+N/2)

nkNW

图 8-20 基 2 、 DIF-FFT (按频率抽取)蝶形运算单元图

Page 111: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计8.4.2 FFT 算法在 C54x 上的实现下面以 256 点的实数 FFT 算法为例,介绍 FFT 算法在 54x 系列 DSP 上的实现过程。

1. 存储区分配由于 FFT 算法中大量使用了乘 - 累加指令,因而应尽可能将被乘数和乘数安排在 DARAM 中,以便程序能高速并行地执行。

Page 112: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

0000h015Fh

程序空间

FF80hFFFFh

中断向量设置

FFT 实现程序存储器和数据存储器空间分布 : 程序存储器

复位

Page 113: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计0000h-0005Fh 存储器初始化0060h 记数组0061h 图形指标0062h 数据处理缓冲器指

标0070h-007Fh 正弦0800h-09FFh 余弦0C00h-3FFh 数据处理区输入的

数据存入下一半1400h-17FFh 数据输出空间

数据存储器: d_grps_cnt

d_twid_idx

d_data_idx

正弦数据表

余弦数据表

real_fft_input

real_fft_output

Page 114: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计2. 算法分析

根据傅立叶变换的对称性和周期性,可以将 DFT运算中某些项合并。 一般来说,输入被假定为连续、合成的。当输入为纯粹的实数的时候,我们就可以利用傅立叶变换的基本性质更高效地计算 DFT 。

Page 115: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计将 2N点实数序列打包成为 N点复数序列,此过程称为“进包”。由复数 FFT 运算结果合成为 2N点的实数 FFT 结果的过程称为“解包” 其原理和过程如下:

(1)首先将变换序列 x(n) 分为偶序列 r(n) 和奇序列 i(n)

(2)构造 d(n)=r(n)+j*i(n)

(3) 对 d(n) 作复数 FFT, 则有:

Page 116: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计[ ( )] [ ( ) * ( )] [ ( )] * [ ( )]FFT d n FFT r n j i n FFT r n j FFT i n

令 : [ ( )] ( ) ( )FFT r n a k jb k

由此二式可得:* [ ( )] ( ) ( )j FFT i n c k jd k

[ ( )] ( ) ( ) ( ) ( ) ( ) ( ) ( ) [ ( ) ( )]FFT d n D k a k jb k c k jd k a k c k j b k d k

根据 DFT 的性质,序列的傅立叶变换可分为共轭对称和共轭反对称序列,其各自对应的傅立叶原序列分别是序列的实部和虚部乘 j 。

Page 117: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计这样把 D(k) 分为共轭对称对称序列 De(k) 和共轭反对称序列 Do(k) ,即:

*1( ) [ ( ) ( )] ( ) ( )2eD k D k D N k RP k jIP k

*1( ) [ ( ) ( )] ( ) ( )2oD k D k D N k RM k jIM k

对应的是输入序列的实部部分即 r(n), 而 ( )eD k ( )oD k

对应的是输入序列的虚部部分乘以 j 即 j*i(n)

,

Page 118: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计对比可得 :

( ) ( )RP k a k ( ) ( )IP k b k( ) ( )RM k c k ( ) ( )IM k d k

展开 x(n) 的 FFT最终为: 2 2 2 2[ ( )] [ ( ) ( ) cos( ) ( )sin( )] [ ( ) ( ) cos( ) ( ) sin( )];FFT x n a k c k k d k k j b k d k k c k kN N N N

2 2 2 2[ ( )] [ ( ) ( ) cos( ) ( ) sin( )] [ ( ) ( ) cos( ) ( ) sin( )];FFT x n a k c k k d k k j b k d k k c k kN N N N

这说明通过计算 N点的复数 FFT,然后附加一次迭代运算,可得到 2N点的实数 FFT 结果。

Page 119: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计3. 程序组成针对于 C54x 的 RFFT 算法是基 -2 的按时间抽取( DIT )算法。它由 5 个阶段构成:

N 点位翻转使输入按新的次序排列;进包过程;N 点 FFT 的计算;解包过程;产生最终的输出。

Page 120: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计程序由以下几个部分组成:

1)主文件中的宏定义文件: fft_size.inc2) 汇编文件:Bit_rev.asm 、 Fft.asm 、 Initcfft.asm 、 Power.asm 、 Rfft.asm 、 Unpack.asm 、 Vectors.asm 。 各个文件的功能如下: Bit_rev.asm :第一步,对最原始的输入数据进行位翻转后的从新排序。

Page 121: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计Initcfft.asm :设置变量、缓存和平台。Rfft.asm :进行函数调用,把 FFT 计算按步骤组合起来。 Vectors.asm :设置中断向量。Fft.asm :第二步,对翻转后的数据进行 FFT计算。库文件: RTS.LIB, 作用:提供主文件的函数。

Page 122: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计下面分 5 个阶段对 FFT 算法的实现做一个说明:第一阶段:使用文件 Bit_rev.asm 对最原始的输入数据进行位翻转后的从新排序。第二阶段:使用文件 Fft.asm 对翻转后的数据进行 FFT 计算。

第三阶段:使用文件 Unpack.asm它包含了第三、四阶段,把输入数据分成实数的偶对称部分RP(k), 实数的奇对称部分 RM (k) ,虚数的偶对称部分 IP(k) 和虚数的奇对称部分 IM(k) ,计算出RFFT 。

Page 123: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计第四阶段:此阶段主要为了符合最初的 2N点的实数输入,由 N点复数 FFT最终产生 2N点实数序列的 FFT 结果,还需经过一个蝶形运算。输出数据保存在数据处理缓冲器中。第五阶段:使用文件 Power.asm ,用来做计算结果的输出。把计算出来的功率谱输出,输出地址为 0x1400 。

Page 124: 第 8 章 数字信号处理典型算法程序设计

第 8 章 数字信号处理典型算法程序设计

Page 125: 第 8 章 数字信号处理典型算法程序设计

作业习题 8.2,8.3