硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1109|回复: 1
收起左侧

[DSP] FFT 比值校正算法问题

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2023-6-16 18:10:28 | 显示全部楼层 |阅读模式
按照资料给的公式,采用比值校正,频率误差很大,看了别人matlab文件,问题应该出在不是使用 fft_outputbuf比值校正,请教使用什么数值校正。

[C] 纯文本查看 复制代码
void FFT()
{
	
	if(ADCConvEnd_FLAG==1)
	{
		ADCConvEnd_FLAG = 0;
		
		for(int i=0;i<FFT_LENGTH;i++)
		{
			fft_inputbuf[2*i] = ((ADC_Value[4*i]) * 100 * 3.3 / 4096) * hanning_window[i];
			fft_inputbuf[2*i+1] = 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[maxnum+1] > fft_outputbuf[maxnum-1])
		{
			dK = (2 * fft_outputbuf[maxnum+1] - fft_outputbuf[maxnum]) / ( fft_outputbuf[maxnum+1] + fft_outputbuf[maxnum]) ;
		}
		else
		{
			dK = (fft_outputbuf[maxnum] - 2 * fft_outputbuf[maxnum-1]) / ( fft_outputbuf[maxnum] + fft_outputbuf[maxnum-1]) ;
		}
		
		
		fre=(1.0 * Fs * (maxnum + dK) ) / FFT_LENGTH;
				
	}
}

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2023-6-17 08:52:30 | 显示全部楼层
造成这个的根本原因是频谱泄露。

波形频率是FFT频域分辨率整数倍,效果最佳。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 23:01 , Processed in 0.160898 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表