[资料分享] TMS320F28335 调用DSP函数介绍

fish001   2019-11-5 20:57 楼主

 第一个函数是: CFFT_f32_sincostable(&cfft) 

    其中cfft就是上述的一个结构体。这个函数的作用就是计算傅里叶变换的转化因子。转化因子由公式可知只与傅里叶变换的阶数有关,所以只要在结构体中对stage和FFTSize进行了赋值就可以计算转化因子了,而且转化因子是固定的,如果不需改变傅里叶变换的阶数,只需要计算一次就好了。

    第二个函数是: CFFT_f32(&cfft)

        这个函数就是做复数傅里叶变换的函数,需要注意的是该函数要求输入数组的数据格式对齐,即变量存储的起始地址为2*FFTsize*sizeof(float),实现方式在下面3中定义。如果数据格式不对齐,则该函数的计算结果不定。

        第三个函数是: CFFT_f32u(&cfft)

       这个函数同样是做FFT变换的,但是其不要求输入数据的格式对齐,适用于输入数据格式比较乱时,但是同样相对与前一个函数来说,其计算效果会比较差。

        第四个函数为 : CFFT_f32_mag(&cfft)

          这个函数是计算幅值的函数,主要作用就是计算*CurrentInPtr指向的复数数组中的复数的模值,将计算出来的模值保存在*CurrentOutPtr该成员指向的数组中,与其他成员无关。
    最后一个函数是: ICFFT_f32(&cfft)

    该函数计算FFT的逆变换。同样要求输入数组格式对齐。

4、 格式对齐的实现方式

    前面介绍的CFFT和ICFFT函数都要求输入的数组格式对齐,即变量存储的起始地址为2*FFTsize*sizeof(float)。例如256点的FFT变换,则变量的起始地址必须是1024的倍数。格式对齐的方式利用变量定义的方式进行。

        首先确定变量存储的区域,该代码与普通对存储空间分区的代码无区别,只是定义一个区域用来存储自己定义的变量: 

ZONE6C     : origin = 0x108000, length = 0x004000

然后在上面存储分区中定义变量存储的段,用来定义后续变量的具体位置,ALIGH的作用就是使该段的起始地址为2*FFTsize*sizeof(float)的倍数,但是其功能也仅仅如此,如果在该段中定义了多个变量,则不能保证每个变量的起始地址均为1024倍数。因此一般一个段只定义一个变量,可以在同一个区中定义出多个段,从而实现多个变量的定义。如下面例子中,在ZONE6C区中定义了四个段,每个段首地址均为1024的倍数。

ZONE6FFTinDATA            : > ZONE6C,    PAGE = 1     ALIGN(1024)      

ZONE6w_change_DATA        : > ZONE6C,    PAGE = 1     ALIGN(1024)    

ZONE6x_frequency_amp      : > ZONE6C,    PAGE = 1     ALIGN(1024) 

  ZONE6FFToutDATA           : > ZONE6C,    PAGE = 1     ALIGN(1024)

         然后定义变量所在的段,每个变量占了一个段:

#pragma DATA_SECTION(fft_data_1024,"ZONE6FFTinDATA");

#pragma DATA_SECTION(CFFToutBuff,"ZONE6FFToutDATA");

#pragma DATA_SECTION(x_frequency_amp_1024,"ZONE6x_frequency_amp");

#pragma DATA_SECTION(W_fft_change,"ZONE6w_change_DATA");

        最后定义变量类型和大小:

float32    fft_data_1024[512];             //定义FFT内部变换使用的复数数组

float32    CFFToutBuff[512];              //定义FFT处理复数结果数据

float32 W_fft_change[256];

float32 x_frequency_amp_1024[256];     //定义FFT处理幅值结果数据

       通过上面的定义的方式实现了对于变量格式对齐的定义。


 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复