如何使用 STM32F407G 进行真正的 FFT?

How do I take real FFT using STM32F407G?

我已经尝试在 STM32F407G 中使用 fft 获取真实数据已有一段时间了,但没有成功。但是,当我对复杂数据使用 cfft 函数时,它起作用了。但是我不想处理虚part.So 我的问题是——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 */

但是当我编译这个时,它说 "error: L6047U: The size of this image (83968 bytes) exceeds the maximum allowed for this version of the linker" 当我注释掉 "arm_rfft_fast_init_f32 (S,fftSize);" 时,它会编译但我得到错误的结果。

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

您可以付费获得完整版,也可以使用免费的 arm gcc 构建您的代码。

32k 限制是 binary 限制而不是 RAM 限制 - 不能保证 binary 执行真正的FFT 将小于复数 FFT。

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

我在这些部件上 运行 进行了高达 4096 点的复杂 FFT