官方库函数定义了8~1024点的CFFT函数,要进行2048点CFFT变换,可以利用1024点的函数进行蝶形运算得到2048点的CFFT,这是很容易想到的方向,不过,还有另一种方法,库函数是开源的,所以可以仿照官方的8~1024点CFFT函数,写一个2048点的函数,这些都是汇编写的,不过函数大体上都一样,只用类比一下稍微做个改动,就能写一个自己可以调用的CFFT2048,不过这种方法要在硬件上存更多数据,比较浪费资源。
一、 CFFT2048文件的编写:
其相对CFFT1024改动有下面两个地方:
我们复制CFFT1024这个文件,将里面的1024都改为2048;
将execute部分由左图改为右图:
二、 SINTAB.Q15的改动:
CFFT2048调用了SINTAB.Q15文件,上面我们新增了sinb与cosb,所以要在这个文件中加入数据用于查表;根据注释说明:
可知:对2048个点进行变换,sinb需要 ((3*4/2048-1)+1)/3=512个值,cosb需要 3*4/2048-1-512=1023个值,sin为1/4个周期,cos对应sin之后的1/2个周期,最大值对应数据7FFFh,所以在matlab中可以求出我们所要的数据。程序如下:
数据保存在SINTAB.txt文件中,按照SINTAB.Q15文件的内容类比写出sinb与cosb的表值,完整文件过长,就不再贴图了哈。
三、在diplib.h文件中添加cfft2048的声明:
四、 搭建项目
搭建一个简单的工程调用函数我们会发现,即使改动了SINTAB.Q15文件,也在C:\CCStudio_v3.3\C5400\dsplib\54x_src路径下添加了CFFT2048函数文件,项目主函数还是找不到CFFT2048的定义,这是因为diplib.h文件并不是按照上面的路径找函数的定义文件的,而是用已经二进制编好的静态库文件54xdsp.lib,它在Project->Built options->Linker->Libraries路径下配置,如下图:
所以我们需要把编好的CFFT2048.asm文件加入到项目中,这样diplib.h在调用CFFT2048函数时就能找到位置了。
接下来,我们就能通过cbrev与cfft直接对2048点进行CFFT变换了。
完整项目链接已上传: