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;
}
}
造成这个的根本原因是频谱泄露。
波形频率是FFT频域分辨率整数倍,效果最佳。
页:
[1]