FFT浮点的DSP实现精Word格式文档下载.docx
- 文档编号:13213741
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:15
- 大小:220.12KB
FFT浮点的DSP实现精Word格式文档下载.docx
《FFT浮点的DSP实现精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《FFT浮点的DSP实现精Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
/2
kkNNNWW+=-
周期性:
k
kN
NN
WW+=
利用这些特性,既可以使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(DITFFT和按频率抽取的FFT(DIFFFT两大类。
DIFFFT算法是在时域内将每一级输入序列依次按奇/偶分成2个短序列进行计算。
而DIFFFT算法是在频域内将每一级输入序列依次奇/偶分成2个短序列进行计算。
两者的区别是旋转因子出现的位置不同,得
算法是一样的。
在DIFFFT算法中,旋转因子kNW出现在输入端,而在DIFFFT
算法中它出现在输入端。
假定序列x(n的点数N是2的幂,按照DIFFFT算法可将其分为偶序列和奇序列。
偶序列:
1(0,(2,(4,(N-2,(2,0,1,/21xxxxxxrrN==-即
奇序列:
2(1,(3,(5,(1,(21,0,1,/21xxxxNxxrrN-=+=-即
则x(n的DFT表示为
1
/21
2(210
0/21/21221
2
((((2(21(((2
NNnk
nk
N
NnnNNrkrkN
rrNNrkkrkN
rrXkxnW
xnWnnxrW
xrW
W
--==--+==--===+=+
+=
+∑∑∑∑∑∑为偶数
为奇数
由于2
(2/
/2jNN
NWe
Wπ-⎡⎤===⎣⎦,则(3式可表示为
/211
12(((((
0,1,/21
(3
NNrk
krkNN
Nrrk
NXkxrW
XkWXkkN--===
+=+=-∑∑
式中,(1kX和(2kX分别为(1nx和(2nx的N/2的DFT。
由于对称性,
2/K
NNkNWW-=+则12(/2((kNXkNXkWXk+=-。
因此,N点(kX可分为
两部分:
前半部分:
12/,1,0
(((21-=+=NkkXWkXkXk
N(4
后半部分:
((2/(21-=-=+NkkXWkXNkXkN(5
从式(4和式(5可以看出,只要求出0~N/2-1区间(1kX和(2kX的值,就可求出0~N-1区间(kX的N点值。
以同样的方式进行抽取,可以求得N/4点的DFT,重复抽取过程,就可以使N点的DFT用上组2点的DFT来计算,这样就可以大减少运算量。
基2DIFFFT的蝶形运算如图(a所示。
设蝶形输入为(1pxm-和(1qxm-,输出为(pxm和(qxm,则有
kNmmmWqxpxpx(((11--+=(6
kNmmmWqxpxqx(((11---=(7
在基数为2的FFT中,设N=2M
共有M级运算,每级有N/2个2点FFT蝶形运算,因此,N点FFT总共有NN2log2/(个蝶形运算。
(1qxm-(pxm
(1qxm-(qxm
-1
图(a基2DIFFFT的蝶形运算
基数为2的FFT,当N=8时,共需要3级,12个基2DITFFT的蝶形运算。
其信号流程如图(b所示。
x(0x(0
WN0
x(4x(1
x(2x(2
WN0WN2
x(6x(3
-1-1
x(1x(4
WN0WN1
x(5x(5-1-1
x(3x(6
WN0WN2WN3
x(7x(7-1-1-1
图(b8点基2DIFFFT蝶形运算
从图(b可以看出,输入是经过比特反转的倒位序列,称为位码倒置,其排列顺序为7(
4(
x
0(x
x。
输出是按自然顺序排列,其顺序为x
5(
3(
1(
2(
6(
x。
7(
1(
2.3方案选择
此相关运算的输人是浮点型数据,相关系数是小于1的单精度浮点型数。
对于定点DSP,由于不能直接进行浮点数的乘法运算,因此必须对输入数据进行类型转换。
首先,相关运算的输入数据是FTSK浮点数据。
在C语言中,单精度浮点数据是以IEEE754标准存储的32位数据,而C5509中C语言调用汇编语言,是通过寄存器AR0从C语言传递给汇编语言的是数据指针,这个指针是指向16位数据的,所以相关的输入32位浮点数要先转化为16位整型数据。
本文这样实现:
C程序中先把浮点数据乘以10后(提高运算精度,强制类型转化为整型数据,然后把此16
位数据的指针赋给调用汇编的入口参数,即通过寄存器AR0传递到汇编程序中。
然后,在汇编程序中,相关的系数是小于l的小数;
在DSP中,汇编语言直接定义的格式是将其转换为16位二进制2的补码表示形式(例如0.8用8×
32768/lO来表示。
从汇编程序入口进入的、经过强制类型转换的整型数据也是以16位二进制形式存储的,通过与16位的小数相乘得到的是32位数,存储在累加器A中。
其中,前16位是运算结果的整数部分,后16位是小数部分。
由于从汇编语言程序返回C程序的参数是16位的,故取运算结果的高16位(此前已经把输入数据乘以lO,最大限度地提高了运算精度,这里直接取高16位。
把这16位数据返回C程序,得到整型数据,再强制类型转化为单精度浮点型数据,再除以10,即得到了最后相关运算的结果。
经实际运算检验,通过这种方法在C5509里进行浮点运算,最终结果实现了很高的精度,而且通过调用汇编语言,极大地提高了运算的效率。
在IEEE754单精度浮点标准中,明确包含了符号位,第32位用作符号位。
尾数进行了归一化,以产生一个1.f格式的数,f是小数部分,占用分配的23位。
因为规格化的数最左一位总是所以不需要存储该位,在该格式中它是隐式的。
这样一个
n位的尾数实际上存放了一个n+l位数。
为使尾数规格化,指数被适当增减,来跟踪
规格化所需的左右移位数以及小数点。
最常用的是用8位指数表示0~255,即127(12(1.s
ef--⨯
其中:
s是符号位,0为正数,1为负数;
e是指数位,无符号8位;
f是尾数的
小数部分,23位。
IEEE754格式下浮点正数00110001001111l000000001000000000的十进制表示为:
符号位=0(因为它是一个正数尾数=2
34561512
22222------++++++
=1.48440551758
指数=65
222++
十进制等值数=(98127
1.484405517582-⨯
=9
2.7649207368110-⨯
IEEE754格式下浮点负数
111000*********0000000000000000的十进制表示为:
符号位=1(因为它是一个负数尾数=1
3
5
6
12222----++++
指数=7
612
22++
十进制等值数=(194127
1.68752--⨯
=20
2.4903104499510-⨯
3硬件设计
3.1CS开发环境
CCS提供了配置、建立、调试、跟踪和分析程序的工具,它便于实时、嵌入式
信号处理程序的编制和测试,它能够加速开发进程,提高工作效率。
CCS提供了基本的代码生成工具,它们具有一系列的调试、分析能力。
CCS
支持如下图1.1所示的开发周期的所有阶段。
图3.1CCS开发周期阶段图
3.2SEED-DEC2812开发实验箱
SEED-DECxxxx系列嵌入式DSP开发板本着模块化、总线型、开放式、系
列化的设计思想,采用统一的系统结构、模块结构和机械结构,以多种典型DSP处理器构成具有标准总线和相同物理尺寸的高性能嵌入式DSP开发板。
SEED-DEC2812嵌入式DSP开发板原理框图如图1.2所示:
图3.2DSP开发板原理框图
4程序代码
DATE:
09/15/2006
AUTHOR:
CHENPENG
VERSION:
ORIGINAL09/15/2006
voidfft_r4_real_512(shortx[],shortw[],shortrs[],shortpoints{
intn1,n2,n3,ie;
intiw1,iw2,iw3;
intrw1,rw2,rw3;
intrx0,rx1,rx2,rx3;
intix0,ix1,ix2,ix3;
intiStage,iButterfly,counter;
intxe_real,xe_imag,xo_real,xo_imag;
longreal0,real1,real
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FFT 浮点 DSP 实现