使用 FFT
参考https://blog.csdn.net/m0_51220742/article/details/124869371
#include "fft_test.h"
#include "arm_math.h"
#include "arm_const_structs.h"
#include "stdio.h"
#define Fs 100000
#define FFT_LENGTH 1024
float32_t lBufInArray[FFT_LENGTH*2] = {0};
float32_t lBufOutArray[FFT_LENGTH / 2] = {0};
uint16_t ADC_Value[FFT_LENGTH] = {0};
void InitBufInArray(void)
{
unsigned short i;
float fx;
for(i = 0; i < FFT_LENGTH; i++)
{
fx = 1024 * sin(2 * PI * i * 13500.0 / Fs)
+ 512 * sin(2 * PI * i * 8500.0 / Fs)
+ 512 * sin(2 * PI * i * 3500.0 / Fs);
ADC_Value[i] = fx + 2048;
}
}
void FFT(void)
{
InitBufInArray();
for (int i = 0; i < FFT_LENGTH; i++)
{
lBufInArray[i * 2] = ADC_Value[i]; //实部赋值
lBufInArray[i * 2 + 1] = 0; //虚部赋值
}
arm_cfft_f32(&arm_cfft_sR_f32_len1024, lBufInArray, 0, 1);
arm_cmplx_mag_f32(lBufInArray, lBufOutArray, FFT_LENGTH);
for (int i = 1; i < FFT_LENGTH/2; i++)
{
lBufOutArray[i] /= 512;
}
for(int16_t i = 1; i < FFT_LENGTH/2; i++)
{
printf("%f\n", lBufOutArray[i]);
}
}
License:
CC BY 4.0