如何使用 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
我已经尝试在 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