365360082 发表于 2023-6-16 18:10:28

FFT 比值校正算法问题

按照资料给的公式,采用比值校正,频率误差很大,看了别人matlab文件,问题应该出在不是使用 fft_outputbuf比值校正,请教使用什么数值校正。

void FFT()
{
       
        if(ADCConvEnd_FLAG==1)
        {
                ADCConvEnd_FLAG = 0;
               
                for(int i=0;i<FFT_LENGTH;i++)
                {
                        fft_inputbuf = ((ADC_Value) * 100 * 3.3 / 4096) * hanning_window;
                        fft_inputbuf = 0;                //虚部全部为0       
                       
                }
                arm_cfft_f32(&arm_cfft_sR_f32_len256,fft_inputbuf,0,1);
      arm_cmplx_mag_f32(fft_inputbuf,fft_outputbuf,FFT_LENGTH);    //把运算结果复数求模得幅值                
                arm_max_f32(fft_outputbuf,FFT_LENGTH/2,&max,&maxnum);               
               
               
                if(fft_outputbuf > fft_outputbuf)
                {
                        dK = (2 * fft_outputbuf - fft_outputbuf) / ( fft_outputbuf + fft_outputbuf) ;
                }
                else
                {
                        dK = (fft_outputbuf - 2 * fft_outputbuf) / ( fft_outputbuf + fft_outputbuf) ;
                }
               
               
                fre=(1.0 * Fs * (maxnum + dK) ) / FFT_LENGTH;
                               
        }
}

eric2013 发表于 2023-6-17 08:52:30

造成这个的根本原因是频谱泄露。

波形频率是FFT频域分辨率整数倍,效果最佳。
页: [1]
查看完整版本: FFT 比值校正算法问题