本帖最后由 viphotman 于 2019-10-10 16:24 编辑
NUCLEO-G431RB测评 FFT
一 文件位置
在STM32CubeG4_V1.1.0\STM32Cube_FW_G4_V1.0.0\Drivers\CMSIS\Lib\ARM 里有ARM 公司的库文件;
arm_cortexM4lf_math.lib 是小端模式的有浮点运算的M4的lib;
还要下面的.h文件;
二 FFT的函数
arm_cfft_f32 函数
void arm_cfft_f32(
const arm_cfft_instance_f32 * S,
float32_t * p1,
uint8_t ifftFlag,
uint8_t bitReverseFlag);
S 参数是是一个结构体指针是一个结构体指针,当一个常量用,和旋转因子有关,不同点的FFT选不同的参数;
p1 参数是输入数组,长度应该是运算点数的两倍,计算完输出的数据也放这里;
S 参数是FFT正反变换,=0是正变换,1是反变换
bitReverseFlag 参数是倒位序
三 工程修改
加入宏ARM_MATH_CM4;
加入头文件地址
加入lib
加入代码
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "arm_math.h"
#include "arm_const_structs.h"
加入变量
#define NPT 2048//4096
uint32_t fftSize = NPT/2; //NPT/2
uint32_t ifftFlag = 0;
uint32_t doBitReverse = 1;
float32_t fft_input[NPT];
float32_t fft_output[NPT]; //NPT/2
加入fft测试code ,再在main中调用这个函数;
void fft_test()
{
int i = 0;
//
for(i=0;i<NPT/2 ;i++)
{
// 100Hz sin, 1000 sample
fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*55*i/1000)+1;
fft_input[2*i+1] = 0;
}
/* Ö´ÐÐFFTÔËË㣬½á¹û´æ·ÅÔÚÊäÈëÊý×é */
arm_cfft_f32(&arm_cfft_sR_f32_len1024, fft_input, ifftFlag, doBitReverse); //´Ë´¦Ê¹ÓÃarm_cfft_sR_f32_len1024Òò×Ó£¬Êý¾Ý±ØÐëÊÇ2048 ÊÇ*SX2Åà¹Øϵ
//arm_cfft_f32(&arm_cfft_sR_f32_len2048, fft_input, ifftFlag, doBitReverse);
//arm_cfft_f32(&arm_cfft_sR_f32_len4096, fft_input, ifftFlag, doBitReverse);
/* È¡¸÷¼ÆËã½á¹ûµÄ¾ø¶ÔÖµÀ´µÃµ½ÆµÂÊÇ¿¶È(·ùÖµ) */ //FFTµãÊýΪ&arm_cfft_sR_f32_len32/2(³ýÒÔ2)²ÅÊÇFFTµÄµãÊý
arm_cmplx_mag_f32(fft_input, fft_output, fftSize);
/* È¡×î´óÖµ¼°ÆäÖ÷ƵλÖà */
//arm_max_f32(fft_output, fftSize, &maxValue, &testIndex);
//printf("maxValue=%f\r\n", maxValue);
for(i=0; i<fftSize; i++)
{
printf("fft %d = %f\r\n",i, fft_output);
}
}
修改下面code
fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*55*i/1000)+1; // 55Hz 的sin波 1000Hz采样率
打结果如下,索引56是最大值,计算现在信号的频率 = 1000/1024 *56 = 54.68Hz
fft_input[2*i] = 1.2f*arm_sin_f32(2*3.1415926f*100*i/1000)+1; // 100Hz 的sin波 1000Hz采样率
打结果如下,索引102是最大值,计算现在信号的频率 = 1000/1024 *102 =99.609Hz
此内容由EEWORLD论坛网友viphotman原创,如需转载或用于商业用途需征得作者同意并注明出处