#include "sys.h"
#include "arm_math.h"
#include "fft.h"
#define FFT_LENGTH 1024 //FFT长度
extern volatile uint16_t ADC1OscConver[1024];//这是将ADC传到的DMA数据 DMA一次传1024个数据
float fft_inputbuf[FFT_LENGTH*2]; //FFT输入数组
float fft_outputbuf[FFT_LENGTH]; //FFT输出数组
float fft_outputbuf1[FFT_LENGTH];
uint32_t testIndex = 0;
float32_t maxValue;
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
",i,fft_inputbuf[i]*(3.3/4096));
}
arm_cfft_radix4_f32(&S,fft_inputbuf); //FFT计算(基4)
arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,2048); //把运算结果复数求模得幅值
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
",i,fft_outputbuf1[i]);
}
m=maxValue*(3.3/4096);
printf("maxValue=%f
",m);
}
我将结果直接转换成电压了,通过串口打印出来的幅值有问题,信号发生器给的幅值为3v,但数据有上百的结果,而且最大值有400多,ADC采集的电压已经测过了,是对的,也能正常的传到FFT输入数组里,是不是我的计算有问题呀,请大神指导
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>