#include "sys.h"
#include "arm_math.h"
#include "fft.h"
#define FFT_LENGTH 1024 //FFT长度,默认是1024点FFT
float F=21000000/1024;
extern volatile uint16_t ADC1OscConver[1024];
float fft_inputbuf[FFT_LENGTH*2]; //FFT输入数组
float fft_outputbuf[FFT_LENGTH]; //FFT输出数组
float fft_outputbuf1[FFT_LENGTH];
float fft_outputbuf2[FFT_LENGTH];
uint32_t testIndex = 0;
float32_t maxValue=0;
float m;
void FFT()
{
int i=0;
arm_cfft_radix4_instance_f32 S;
arm_cfft_radix4_init_f32(&S,FFT_LENGTH,0,1);//初始化scfft结构体,设定FFT相关参数
for(i=0;i<1024;i++)
{
fft_inputbuf[2*i]=(float32_t)ADC1OscConver[i]; //实部
fft_inputbuf[2*i+1]=0; //虚部全部为0
printf("fft_inputbuf[%d]:%f\r\n",i,fft_inputbuf[i]*(3.3/4096));
}
arm_cfft_radix4_f32(&S,fft_inputbuf); //FFT计算(基4)
arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH); //把运算结果复数求模得幅值
arm_max_f32(fft_outputbuf,FFT_LENGTH,&maxValue,&testIndex);
for(i=0;i<FFT_LENGTH;i++)
{
fft_outputbuf1[i]=fft_outputbuf[i]*(3.3/4096);
printf("fft_outputbuf[%d]:%f\r\n",i,fft_outputbuf1[i]);
}
m=maxValue*(3.3/4096);
printf("maxValue=%f\n",m);
printf("F=%f",F);
for(i=0;i<FFT_LENGTH;i++)
{
fft_outputbuf2[i]=(i-1)*F;
printf("fft_outputbuf2[%d]:%f\r\n",i,fft_outputbuf2[i]);
}
}
|