打印

C28x DSC傅立叶变换库解析

[复制链接]
2374|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gygp|  楼主 | 2012-12-3 23:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI公司的C28x+FPU架构以其高速的数据处理能力和简单易用的编程方法,必将成为后续高性能电机控制的发展趋势之一。上次讲了TI公司常用浮点单元函数库fastRTS的一些内容,一些常用的函数,如正余弦、正切、反正切、平方根等都可以供我们直接调用,不用费时去自己编写、优化了。同时,TI还提供了可供我们直接调用的、已经高度优化的傅立叶变换、反变换函数,包括RFFT_f32、RFFT_f32u、RFFT_f32_mag、RFFT_f32s_mag、RFFT_f32_phase以及RFFT_f32_sincostable。其具体的使用方法描述如下:
在TI网站下载《C28x Floating Point Unit Library》并安装。切换到:\data\tidcs\c28\C28x_FPU_fastRTS\V100\doc文件夹,其结构与传统库的路径形式相同,仍然有doc、include、lib、source几个文件夹。在doc下有各函数的说明
在ccs的build选项中打开“-g -o3 -d"_DEBUG" -d"LARGE_MODEL" -ml -v28 --float_support=fpu32”
如果使用浮点格式,则引用FPU.h 这个头文件,其中包含的数据类型有:
#ifndefDSP28_DATA_TYPES
#defineDSP28_DATA_TYPES
typedefint int16;
typedeflong int32;typedeflong long int64;typedefunsignedint Uint16;typedefunsignedlong Uint32; typedefunsignedlonglongUint64;typedef float float32;typedeflong double float64;
#endif
如果使用定点格式,则引用IQmath格式

然后就可以调用了。以单精度浮点的快速傅里叶变换FFT为例,其具体调用方法为:
首先声明函数,即voidRFFT_f32(RFFT_F32_STRUCT*)

其结构体内部的定义为:


typedefstruct{

float32 *InBuf;float32 *OutBuf; float32 *CosSinBuf; float32 *MagBuf;float32 *PhaseBuf;Uint16 FFTSize; Uint16 FFTStages;

}RFFT_F32_STRUCT;

实际的调用为:

#includeFPU.h

#defineFFT_SIZE 128 /*32,64,128,256,etc */

#defineFFT_STAGES 7 /*log2(FFT_SIZE) */

/*AligntheINBUFsectionto2*FFT_SIZEinthelinkerfile */

#pragmaDATA_SECTION(Inbuf,"INBUF");

float32InBuffer[FFT_SIZE];

float32OutBuffer[FFT_SIZE];float32 TwiddleBuffer[FFT_SIZE];RFFT_F32_STRUCT fft;

main()

{


fft.InBuf=InBuffer; /*Inputdatabuffer */ fft.OutBuf =OutBuffer; /*FFToutputbuffer */ fft.CosSinBuf=TwiddleBuffer;/*Twiddlefactorbuffer*/ fft.FFTSize=FFT_SIZE; /*FFTlength */ fft.FFTStages=FFT_STAGES; /*FFTStages */

…………………

RFFT_f32_sincostable(&fft)/*Initializetwiddlebuffer*/

RFFT_f32(&fft); /*Calculateoutput */

}


最终的性能测试为:


FFTSize
C-CallableASM

32
608cycles

64
1278cycles

128
2784cycles

256
6170cycles

512
13672cycles


上面的性能指标中,所有的缓存区与堆栈都是放在DSP的片内RAM中的(零等待)。曾经为了节省片内资源,放在片外扩展的RAM中做过测试,发现结果总是不对。后来才发现每次调用片外RAM的数据都需要几十个ns,几千次读写下来这个总延时已经远远超过了中断周期,自然不能正常执行了。现在想想,像28335这样的高性能大容量芯片,其片内存储再多放几个fft的缓冲区也没有关系啊。

相关帖子

沙发
hwdpaley| | 2013-2-14 14:15 | 只看该作者
学习了,谢谢

使用特权

评论回复
板凳
hawksabre| | 2013-2-16 18:41 | 只看该作者
学习了   呵呵   软件这一块还要下大功夫   呵呵  fft在波形分析中用的很多   呵呵   需要仔细研究研究  

使用特权

评论回复
地板
njtl0925| | 2013-2-18 21:30 | 只看该作者
楼主 你好 我想问下 如果我用55系列的定点dsp 调用dsplib中的fft函数,想问下还要考虑输入数据的 Q格式吗?如果要考虑的话,能不能麻烦讲解下 啊 谢谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

7940

帖子

15

粉丝