本帖最后由 倔强的笨蛋 于 2017-3-11 13:12 编辑
常看到论坛有人提问说经过FFT得到离散频谱的幅度和相位不准(不添加噪声),其实离散频谱分析的误差产生的原因主要来自两方面,一方面是由于时域加窗截断和频域离散化,只要不是对信号进行整周期采样就会产出误差;另一方面是由于多频率谐波信号各频率之间相互干涉的影响。其中,加窗截断的影响使一个无穷长单频率信号在频域对应的一根谱线,变成一个连续谱,以加矩形窗为例,则是变成一个sinc型函数的形状,其峰值对应的频率即为单频信号的频率。但是由于频域的离散化,我们用FFT计算的频率一般都不会刚好会落在峰值处,这就是我们平时常说的泄露,这时我们就只能把计算得到的峰值谱线对应的频率做为估计的频率,在不修正的情况下,理论分析加矩形窗的幅度最大误差可达到36.4%,hanning窗的幅值最大误差可达15.3%,相位最大误差正负90度,频率误差最大正负0.5个频率分辨率。所以需要对离散频谱分析的各参数进行校正,以得到较为准确的频率幅度相位估计值。国内现在比较常用的方法有比值(插值)法、能量重心法、FFT+FT法和相位差法,都有其各自的特点和优缺点。论坛中现有宋老师提供的比值法程序https://www.ilovematlab.cn/thread-50688-1-1.html,这里我给出一个能量重心校正法的程序提供大家一起研究下。注意:不考率噪声情况下,能量重心法是一个精度较高的近似校正方法,校正后频率,幅值,相位不是理论值,但误差很小,其中加hanning窗校正的精度较高,这里给的就是加hanning窗的能量重心校正方法,程序如下:function resultCorrect=spectrumcorrectenergymethodshare(i