DSP:关于28335的FFT

4 篇文章 1 订阅
2 篇文章 0 订阅

头疼,昨天写了一天的文档,没内涵的文档。。

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工具。(感谢风华同学推荐)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
DSP28335是一款数字信号处理器,可以进行FFT(快速傅里叶变换)操作。引用\[1\]中提到,虽然例程中没有提供FFT的例程,但是可以使用C2000 ware库中的C2000系列库来进行FFT操作。同时,引用\[2\]中介绍了DSP28335的C28X_FPU_LIB.lib库中的CFFT_f32函数,该函数用于计算复数域的FFT。该函数需要传入一个CFFT_F32_STRUCT结构体作为参数,该结构体中包含了傅里叶变换的阶数和转化因子的计算。引用\[3\]中提到,可以使用CFFT_f32_sincostable函数来计算傅里叶变换的转化因子,只需要在结构体中对stage和FFTSize进行赋值即可。因此,通过使用C2000 ware库和C28X_FPU_LIB.lib库中的函数,可以在DSP28335上进行FFT变换。 #### 引用[.reference_title] - *1* [DSP28335FFT傅里叶变换](https://blog.csdn.net/weixin_30390075/article/details/95330151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [DSP:关于28335FFT](https://blog.csdn.net/Jason_nuc/article/details/81975630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值