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中。其中,前