打印

C28x DSC傅立叶变换库解析

[复制链接]
1202|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2014-8-11 12:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   用于 C2000TM 微处理器的 controlSUITETM 是一套全面的软件基础设施和软件工具集,旨在最大程度地缩短软件开发时间。从特定于器件的驱动程序和支持软件到复杂系统应用中的完整系统示例,controlSUITETM 在每个开发和评估阶段都提供了程序库和示例

      TI公司的C28x+FPU架构以其高速的数据处理能力和简单易用的编程方法,必将成为后续高性能电机控制的发展趋势之一。上次讲了TI公司常用浮点单元函数库fastRTS的一些内容,一些常用的函数,如正余弦、正切、反正切、平方根等都可以供我们直接调用,不用费时去自己编写、优化了。同时,TI还提供了可供我们直接调用的、已经高度优化的傅立叶变换、反变换函数,包括RFFT_f32、RFFT_f32u、RFFT_f32_mag、RFFT_f32s_mag、RFFT_f32_phase以及RFFT_f32_sincostable。其具体的使用方法描述如下:

      在TI网站下载controlSUITE并安装。切换到:\Texas Instruments\controlSUITE\libs\dsp\FPU\v130文件夹,其结构与传统库的路径形式相同,仍然有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的缓冲区也没有关系啊。

相关帖子

沙发
comeon201208| | 2014-8-11 23:11 | 只看该作者
TI公司常用浮点单元函数库fastRTS的一些内容,一些常用的函数,如正余弦、正切、反正切、平方根等都可以供我们直接调用,不用费时去自己编写、优化。

使用特权

评论回复
板凳
tuyongfei| | 2014-8-12 08:13 | 只看该作者
好的,谢谢。

使用特权

评论回复
地板
lijiabaobei| | 2014-9-21 15:09 | 只看该作者
确实是好东西啊

使用特权

评论回复
5
edishen| | 2014-9-21 16:11 | 只看该作者
值得拥有哦

使用特权

评论回复
6
tianli1980| | 2014-10-10 12:43 | 只看该作者
感谢分享,难得的资料,相信对很多人有用的,学习。

使用特权

评论回复
7
595332542| | 2014-10-10 22:10 | 只看该作者
正在学习FFT的应用就看到您的帖子,真的很受用。

使用特权

评论回复
8
拿起书本| | 2014-11-13 11:49 | 只看该作者
最近遇到很多傅里叶的问题,哈哈,从应用角度上讲,不得不说,你的**对我的启发.

使用特权

评论回复
9
elecintop| | 2014-11-30 13:28 | 只看该作者
:handshake

使用特权

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

本版积分规则

460

主题

2188

帖子

12

粉丝