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

[复制链接]
7795|4
 楼主| chengyabcd 发表于 2014-11-4 14:40 | 显示全部楼层 |阅读模式
本帖最后由 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此谐波。。。。是怎么排列的?
经过运算输出的数值比较怪异,看不懂,见下图:

输出结果数组.jpg
最后上传我建立的工程,希望各位大侠明示! FFT_TEST.rar (4.44 MB, 下载次数: 250)
 楼主| chengyabcd 发表于 2014-11-5 08:15 | 显示全部楼层
呵呵低级错误!已经搞定!结贴!另外,附件中的例子例程是没有问题的!大家可以尽情使用!就算俺做贡献咧
hexieqianru 发表于 2015-2-9 16:46 | 显示全部楼层
到底是咋排列的 ,我也正在研究。
dandelion_lt052 发表于 2015-6-9 10:25 | 显示全部楼层
究竟是如何排列的呢?求指教~
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

粉丝
快速回复 在线客服 返回列表 返回顶部