打印
[STM32F1]

请教关于CMSIS中DSP算法库中RFFT输出结果问题

[复制链接]
6970|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 chengyabcd 于 2014-11-4 14:42 编辑

在ARM官网下载了CMSIS 4.20版本,准备使用其中DSP算法库做FFT,没有直接使用编译好的lib库文件,而只是使用与arm_rfft_fast_f32函数相关的所有文件和函数,现在工程已经编译通过,程序中使用下列算法产生一个采样点值序列,然后送到arm_rfft_fast_f32运算。
FS = 50 * 64; for(i=0;i<64;i++)
  {
   sample_data
= 1*sin(2*PI*50*i/FS) + 1;
  }
status = arm_rfft_fast_init_f32(&aa,64);
if(status == ARM_MATH_SUCCESS)
   arm_rfft_fast_f32(&aa,sample_data,out_data,0);

输出数组是out_data,现在的问题是不知道输出数据是怎么排列的,实部和虚部是怎么排列的?直流分量、基波、2此谐波。。。。是怎么排列的?
经过运算输出的数值比较怪异,看不懂,见下图:


最后上传我建立的工程,希望各位大侠明示! FFT_TEST.rar (4.44 MB)
沙发
chengyabcd|  楼主 | 2014-11-5 08:15 | 只看该作者
呵呵低级错误!已经搞定!结贴!另外,附件中的例子例程是没有问题的!大家可以尽情使用!就算俺做贡献咧

使用特权

评论回复
板凳
hexieqianru| | 2015-2-9 16:46 | 只看该作者
到底是咋排列的 ,我也正在研究。

使用特权

评论回复
地板
dandelion_lt052| | 2015-6-9 10:25 | 只看该作者
究竟是如何排列的呢?求指教~

使用特权

评论回复
5
pkuzhx| | 2015-7-29 16:59 | 只看该作者
排列如下:
假设输入是in[N],输出是out[N],(N=2^n)
那么函数输出out和fft输出的N个复数的对应如下:
out[0]~y[0]
out[1]~y[N/2]
out[2]~y[1].real
out[3]~y[1].imag
out[4]~y[2].real
out[5]~y[2].imag
……
out[N - 2]~y[N/2 - 1].real
out[N - 1]~y[N/2 - 1].imag

这样存储是利用了实数fft的以下性质:
(1)y[0]和y[N/2]的虚部必定为0;
(2)y[N/2 - i]和y[N/2 + i]是共轭的,也就是实部相等,虚部相反,所以只要存储一个就可以
这样如果计算幅值的话,需要把out[1]挪到它该去的地方,然后置0。不过一般也不会用到fft结果的第一个值,所以不管它也可以。

另外,某些版本CMSIS DSP库是有问题的,我被坑了一个小时才发现。
还有就是关于对应关系,对于实部的描述肯定是没有问题的,虚部有可能跟我说的是反的,即out[3]~-y[1].imag

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

70

帖子

1

粉丝