FFT浮点的DSP实现精

  • 格式:docx
  • 大小:59.86 KB
  • 文档页数:25

1前言

DSP结构可以分为定点和浮点型两种。其中,定点型DSP可以实现整数、小数

和特定的指数运算,它具有运算速度快、占用资源少、成本低等特点;灵活地使用定

点型DSP进行浮点运算能够提高运算的效率。目前对定点 DSP结构支持下的浮点

需求也在不断增长,主要原因是:实现算法的代码往往是采用 C/C++编写,如果其中有

标准型的浮点数据处理,又必须采用定点DSP器件,那么就需要将浮点算法转换成定 点格式进行运算。同时,定点DSP结构下的浮点运算有很强的可行性,因为C语言和 汇编语言分别具有可移植性强和运算效率高的特点 ,因此在定点DSP中结合C语言

和汇编语言的混合编程技术将大大提高编程的灵活度,以及运算速度。

大多数DSP的开发工具只是在C语言的基础上支持标准的浮点运算,而定点

DSP硬件一般都是面向定点的运算,不支持标准的浮点运算,缺乏硬件的支持极大地

限制了浮点的应用,因而标准的浮点运算在实际定点 DSP应用中并不多见。C5509

是一款16位定点DSP。在本文中,对C5509输入FTSK信号,用C语言和汇编语言 混合编程的方式对输入浮点型的FTSK信号进行相关运算,并输出浮点运算结果。

这里叶变换(FFT是一种高效实现离散傅里叶变换(DFT的快速算法,是数字信号处理 中最为重要的工具之一,它在声学,语音,电信和信号处理等领域有着广泛的应用。

2方案设计

2.1方案的提出

DSP (数字信号处理器与一般的微处理器相比有很大的区别 ,它所特有的系

统结构、指令集合、数据流程方式为解决复杂的数字信号处理问题提供了便利

本文选用TMS320C54X作为DSP处理芯片通过对其编程来实现 FFT的浮点DSP

实现。DSP应用系统设计的一般流程如下图所示:■<又热纯tff毎術杯实碣W汎砺九I,山ft

也刖FF机

来址詞试仃1*1能测试

图2.1 DSP系统流程图2.2方案的论证

旋转因子W N有如下的特性。 对称性:/2

k k N N N W W +=-

周期性:k

W W += 利用这些特性,既可以使DFT中有些项合并,减少了乘法积项,又可以将长序列

的DFT分解成几个短序列的DFT。FFT就是利用了旋转因子的对称性和周期性来

减少运算量的。

FFT的算法是将长序列的DFT分解成短序列的DFT。例如:N为偶数时,先

将N点的DFT分解为两个N/2点的DFT ,使复数乘法减少一半:再将每个N/2

点的DFT分解成N/4点的DFT ,使复数乘又减少一半,继续进行分解可以大大减少

计算量。最小变换的点数称为基数,对于基数为2的FFT算法,它的最小变换是

2 点 DFT。

一般而言,FFT算法分为按时间抽取的FFT (DIT FFT和按频率抽取的FFT(DIF

FFT两大类。D IF FFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短

序列进行计算。而DIF FFT算法是在频域内将每一级输入序列依次奇/偶分成2个

短序列进行计算。两者的区别是旋转因子出现的位置不同 ,得

算法是一样的。在DIF FFT算法中,旋转因子k N W出现在输入端,而在DIF

FFT

算法中它出现在输入端。

假定序列x(n的点数N是2的幕,按照DIF FFT算法可将其分为偶序列和奇序 列。

偶序列:

1(0,(2,(4,(N-2,(2,0,1,/21x x x x x x r r N ==-即

奇序列: 2(1,(3,(5,(1,(21,0,1,/21x x x x N x x r r N -=+=-即

则x(n的DFT表示为(3

/21

/21

2(210

0/21/21221

((((2(21(((2

N N nk

nk

N n n N N rk r k N

r r N N rk k rk N

+=

+EEEESa偶 数

为奇数

由于2

(2/

/2j N N

W n-? ? ===? ?,则(3式可表示为

/21

/211

/2

/2

12(((((

0,1,/21

N N rk (3

k rk N N

+=+=-刀刀

式中,(1k X和(2k X分别为(1n x和(2n x的N/2的DFT 。

由于对称性,

,2/K

N N k N W W -=+ 贝U 12(/2((k N X k N X k W X k +=-。因此,N 点(k X 可分为

两部分:

前半部分:12/,1,0

(((21-=+=N k k X W k X k X k

N (4

后半部分:12/,1,0

((2/(21-=-=+N k k X W k X N k X k N (5

从式(4和式(5可以看出,只要求出0~N/2-1区间(1k X和(2k X的值,就可求出 0~N-1区间(k X的N点值。-1

W N0

以同样的方式进行抽取,可以求得N/4点的DFT ,重复抽取过程,就可以使N点

的DFT用上组2点的DFT来计算,这样就可以大减少运算量。

基2 DIF FFT的蝶形运算如图(a所示。设蝶形输入为(1p x m -和(1q x m -,输出 为(p x

m和(q x m,则有

k N m m m W q x p x p x (((11--+= (6

k N m m m W q x p x q x (((11---= (7

在基数为2的FFT中,设N=2M

,共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有N N 2log 2/(个蝶形运算。

(1q x m - (p x m

(1q x m - (q x m

-1

图(a基2 DIF FFT的蝶形运算

例如:基数为2的FFT,当N=8时,共需要3级,12个基2 DIT FFT的蝶形运算。

其信号流程如图(b所示。

x(Ox(O

W N0

x(4x(1 7(

4(

x(2x(2

-1

W NOW N2

x(6x(3

-1-1

W NO

x(1x(4

-1

W NOW N1

x(5 x(5 -1-1

W NOW N2

x(3x(6

-1 -1

W NOW N2W N3

x(7 x(7 -1 -1 -1

图(b 8点基2DIF FFT蝶形运算 7(

4(

从图(b可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为2(

6(

0(x

x。输出是按自然顺序排列,其顺序为x

5(

3(

1( 0(x

7(

,1(

6(

2.3方案选择

此相关运算的输人是浮点型数据,相关系数是小于1的单精度浮点型数。对于 定点DSP,由于不能直接进行浮点数的乘法运算,因此必须对输入数据进行类型转 换。首先,相关运算的输入数据是FTSK浮点数据。在C语言中,单精度浮点数据是 以IEEE754标准存储的32位数据,而C5509中C语言调用汇编语言,是通过寄存器

AR0从C语言传递给汇编语言的是数据指针,这个指针是指向16位数据的,所以相 关的输入32位浮点数要先转化为16位整型数据。本文这样实现:C程序中先把浮 点数据乘以10后(提高运算精度,强制类型转化为整型数据,然后把此16

位数据的指针赋给调用汇编的入口参数,即通过寄存器AR0传递到汇编程序 中。然后,在汇编程序中,相关的系数是小于I的小数;在DSP中,汇编语言直接定义

的格式是将其转换为16位二进制2的补码表示形式(例如0.8用8X32 768/10来表 示。从汇编程序入口进入的、经过强制类型转换的整型数据也是以 16位二进制形

式存储的,通过与16位的小数相乘得到的是32位数,存储在累加器A中。其中,前