DSP

DSP:关于28335的FFT

2019-07-13 11:44发布

头疼,昨天写了一天的文档,没内涵的文档。。 TI的资料可以说是很多了,但是很少中文的,看了文档,参照风华同学的blog,顺便整理下28335的CFFT。 (不了解的可先学习下FFT的知识链接,知乎总能带给我惊喜^_^https://zhuanlan.zhihu.com/p/19763358) 分析下DSP28335的C28X_FPU_LIB.lib库,学习计算复数域的CFFT(Complex Fast Fourier Transform),函数有void CFFT_f32(CFFT_F32_STRUCT *)。CFFT_F32_STRUCT为官方定义的一个结构体,如下
typedef struct 
{     float32 *InPtr; 
    float32 *OutPtr;
    float32 *CoefPtr; 
    float32 *CurrentInPtr;
    float32 *CurrentOutPtr; 
    Uint16 Stages; 
    Uint16 FFTSize; 
} CFFT_F32_STRUCT; 结构体成员: IInPtr为输入数组指针,假设你的CFFT的采样点1024个点,那么你的输入数组为inputdata[2*FFTSize]因为你是复数的FFT吗,所以实部和虚部都是需要进行存储的,所以输入数组的长度为2*FFTSize.其中实部和虚部的存储方式为inputdata[0]存储你第一点的实部,inputdata[1]存储第一点的虚部,接着依次向下inputdata[2]存储第二个点的实部,inputdata[3]第二个点的虚部...... OutPtr,为指向输出数组的指针,输出数组的大小也为2*FFTSize,存储方式同样的outputdata[0]为第一个点的实部,接着虚部,接着第二个点,第三个点。 CoefPtr,为指向转化因子数组的指针,长度为FFTSize,决定傅里叶转化因子的只有傅里叶变换的阶数,换句话说就是样本点的个数,如果又不知道傅里叶转化因子是什么的建议百度一下你就知道。第四个成员CurrentInPtr也是指向输入数组的指针,但是该输入数组不同于上面的输入数组,这个指针的用途是用来计算幅值所用的,如果你想计算某一复数数组的幅值直接把该数组指针指向那个数组就好了。比如你想得出傅里叶变换后结果数组的幅值趋势便可以直接将该指针指向outputdata[2*FFTSize],当然有输入就有输出,CurrentOutPtr来指向幅值输出的数组。 stage为傅里叶变换的阶数,FFTSize为FFT变换的长度FFTSize=2^stage ----------------------------------------------------------------------------------------------------- 上述结构体在后面函数的应用中重要。 (1)CFFT_f32_sincostable(&cfft) 其中cfft就是上述的一个结构体,这个函数的作用就是计算傅里叶变换的转化因子。转化因子由公式可知转化因子只与你傅里叶变换的阶数有关,所以只要你在结构体中对stage和FFTSize进行了赋值就可以计算转化因子了,而且转化因子是固定的,如果不需改变傅里叶变换的阶数,只需要计算一次就好了。 转化因子当然保存在*CoefPtr指向的数组中。 (2)CFFT_f32(&cfft)就是做复数傅里叶变换的函数,将*InPtr指向的数组中的复数进行傅里叶变换,然后将结果保存在*OutPtr指向的数组当中。此函数只与 float32 *InPtr; 
float32 *OutPtr;
float32 *CoefPtr; 
Uint16 Stages; 
Uint16 FFTSize; 这几个成员有关系,与另两个无关 (3)CFFT_f32_mag(&cfft)计算幅值的函数,只与float32 *CurrentInPtr; float32 *CurrentOutPtr这两个成员有关,主要作用就是计算*CurrentInPtr指向的复数数组中的复数的模值,将计算出来的模值保存在*CurrentOutPtr该成员指向的数组中,与其他成员无关。 (4)ICFFT_f32(&cfft),进行了傅里叶变化当然还不行,还要进行傅里叶反变换,将波形还原,直接调用它就好了,他会将*InPtr指向的数组中的复数进行傅里叶反变换,然后将值保存到输出数组中。 --------------------------------------------------------------------------------------------------------------------- 另外:接下来是FIR,其实本科那儿都做过DSP实验,年久忘光光。。TI的工程可参考,关键计算H[X]序列,用matlab的FDATOOL工具。(感谢风华同学推荐)