首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM CMSIS DSP FFT函数的适当fft长度

ARM CMSIS DSP FFT函数的适当fft长度
EN

Stack Overflow用户
提问于 2015-08-25 18:25:43
回答 1查看 5K关注 0票数 2

我目前正在尝试使用我的大脑皮层m3 PSoC 5lp芯片上的ARM CMSIS库。

我在使用一些函数时遇到了一些问题,我有一个关于如何使用函数arm_cfft_q15 (或任何arm_cfft_***函数)的问题。

说我有

代码语言:javascript
复制
    q15_t ADC_samples[1024];
    q15_t MAG_of_fft[1024];

我就跑了

代码语言:javascript
复制
    arm_cfft_q15(1024pt_fft, ADC_samples, sample_length);

这样就可以进行“就位”转换。正因为如此,由于FFT返回实值和虚值,它实际上只能返回长度512的fft,还是1024 FFT样本中的512?在得到FFT后我做了

代码语言:javascript
复制
    arm_cmplx_mag_q15(ADC_samples, MAG_of_fft, fftlength);

其中fftlength是1024。

它返回MAG_of_fft,当我绘制它时,它确实是我期待看到的形状,但我不知道如何确切地解释结果,因为我不知道我的FFT到底有多长。我告诉它,我正在做一个1024点FFT,但它似乎只返回一个512点FFT,或者只有一半的1024点FFT,一个或另一个。

我说得对吗?这意味着ADC_samples数组的长度必须是数据的两倍,这样我才能得到1024 pt FFT?然后我就可以用那个2048阵列来计算FFT的大小,告诉它FFT的长度是1024?

有人能向我解释如何正确地解释这些函数以及我期望的FFT长度吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-29 04:10:43

arm_cfft函数族对复值信号进行运算。换句话说,使用arm_cfft_q15执行的1024点快速傅立叶变换需要1024个复杂的输入样本,这些输入样本由2048个q15_t值表示(如CMSIS DSP软件库文档中所描述的,交错的实部和虚部)。在返回时,缓冲器包含与复输入信号的频域表示相对应的1024复值(2048 q15_t值)。

因此,使这个例子适应您的情况,您将使用以下方法计算快速傅立叶变换:

代码语言:javascript
复制
q15_t ADC_samples[2048];
arm_cfft_q15(1024pt_fft, ADC_samples, 0, 1);

随后的呼叫

代码语言:javascript
复制
q15_t MAG_of_fft[1024];
arm_cmplx_mag_q15(ADC_samples, MAG_of_fft, fftlength);

然后,使用fftlength=1024ADC_samples中的1024复值(2048 q15_t值)降为1024实际震级值(1024 q15_t值),并将结果存储在MAG_of_fft中。

另外,如果您实际上处理的是实值信号,那么您可以使用相同的函数,并使用零填充ADC_samples缓冲区的每秒钟索引(虚部分)(因此使用的ADC_samples缓冲区是实际样本数的两倍)。或者,您可以使用效率更高的arm_rfft系列函数(在文件的这一节中描述)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32211401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档