我一直试图在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);”时,它编译但我得到了错误的结果。
答案 0 :(得分:0)
您使用的是大小有限的链接器,32 k是IAR和Keil评估版本的通用大小。
您可以付费购买完整尺寸版本,也可以使用免费的arm gcc构建代码。
答案 1 :(得分:0)
32k限制是二进制限制而不是RAM限制 - 无法保证用于执行实际FFT的二进制将小于复数FFT 。
实际上,它可能是更加优化的算法,因此可能需要更少的ram / CPU周期来计算,但仍可能需要更多(更便宜)的操作才能完成。
我已经在这些部件上运行了4096 pt复合FFT,没有任何问题