如何使用STM32F407G进行实际FFT?

时间:2018-04-30 13:16:20

标签: fft stm32

我一直试图在STM32F407G中使用fft来获取真实数据很长一段时间没有运气。但是,当我使用cfft函数进行复杂数据时,它的工作原理。但我不想处理想象的部分。所以我的问题是 - 如何在stm32中使用rfft函数? 这是我试过的代码 -

#include "stm32f407xx.h"
#include "arm_math.h"
#include "arm_const_structs.h"
#include "core_cm4.h"


#define TEST_LENGTH_SAMPLES 32

extern float32_t  ffttestrealip[TEST_LENGTH_SAMPLES];
static float32_t  ffttestrealop[TEST_LENGTH_SAMPLES];

uint32_t fftSize = 32;
uint8_t ifftFlag = 0;
uint8_t doBitReverse = 1;


int32_t main(void)
{
    arm_rfft_fast_instance_f32 *    S;
    arm_rfft_fast_init_f32  (S,fftSize);

arm_rfft_fast_f32   (S,ffttestrealip,ffttestrealop,ifftFlag )   ;
  while(1);                            
}

 /** \endlink */

但是当我编译它时,它说“错误:L6047U:此图像的大小(83968字节)超过了此版本链接器允许的最大值” 当我注释掉“arm_rfft_fast_init_f32(S,fftSize);”时,它编译但我得到了错误的结果。

2 个答案:

答案 0 :(得分:0)

您使用的是大小有限的链接器,32 k是IAR和Keil评估版本的通用大小。

您可以付费购买完整尺寸版本,也可以使用免费的arm gcc构建代码。

答案 1 :(得分:0)

32k限制是二进制限制而不是RAM限制 - 无法保证用于执行实际FFT的二进制将小于复数FFT 。

实际上,它可能是更加优化的算法,因此可能需要更少的ram / CPU周期来计算,但仍可能需要更多(更便宜)的操作才能完成。

我已经在这些部件上运行了4096 pt复合FFT,没有任何问题