大家帮我看一下程序的问题,ADC+DMA+TIME+DSP的FFT应用

2019-07-20 00:47发布

#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输入数组里,是不是我的计算有问题呀,请大神指导

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。