我其实一直对matlab中分析FFT存在一定的疑问。今天从头开始梳理一下。1 电流THD的定义总谐波失真 Total Harmonic DistortionTHD 通常定义为各次谐波分量的均方根值之和与基波分量的均方根值之比用百分比表示。对于电流信号标准计算公式为其中 I1 为基波电流有效值Ih 为第 h 次谐波电流有效值。谐波次数通常计算到 40 次或 50 次。2 Simulink FFT Analyzer 分析结果与理论值对比构造信号我们构造一个模型对公式进行验证。信号1基波电流为 66.667Hz幅值为1A谐波电流为 5*66.667Hz幅值为0.1A此时电流 THD 理论值为此时Simulink FFT Analyzer 分析结果如下所示与理论一致。信号2基波电流为 66.667Hz幅值为1A谐波电流为 5*66.667Hz幅值为0.1A谐波电流为 7*66.667Hz幅值为0.2A谐波电流为 11*66.667Hz幅值为0.1A谐波电流为 13*66.667Hz幅值为0.2A此时电流 THD 理论值为此时Simulink FFT Analyzer 分析结果如下所示与理论一致。此时5次谐波幅值为0.1A纵轴幅值为10%此时7次谐波幅值为0.2A纵轴幅值为20%此时11次谐波幅值为0.1A纵轴幅值为10%此时13次谐波幅值为0.2A纵轴幅值为20%。整体THD大小为31.62%。对的上没有问题。3 Simulink FFT Analyzer 分析结果与理论值对比真实电流在分析真实电流的时候就出现了非常有意思的现象分析结果1分析结果2Max frequency for THD computation存在两个选项。Nyquist frequency 和 Same as Max frequency 分析的结果不同。其中Nyquist frequency这个选项会将THD计算的积分上限扩展到奈奎斯特频率。奈奎斯特频率 采样率 / 2它是该仿真系统在理论上能够处理的最高频率其中Same as Max frequency这个选项告诉软件只在你当前频谱图显示的频率范围内计算THD。通常这个范围的上限是你在FFT分析工具中设定的“最大频率”。一般来说用户设定的Max frequency会刚好覆盖到关心的最高次谐波就停止。4 直接计算与Nyquistfrequency 分析结果的区别我们将FFT的分析表格导出通过THD计算公式计算整体处理数据整体计算下来对平方和开根号最终电流THD计算结果为 2.64% 。相对的Nyquistfrequency 所得的电流THD为 5.61%。相对来说Nyquist frequency 要远大于纯粹通过谐波频次计算所得的电流THD。5 为什么Nyquist选项会让THD变高当选择“Nyquist frequency”时THD的计算公式变成了我尝试过 第2小节中构造信号的两种不同选项其中Nyquist frequency和Same as Max frequency 分析结果完全一致。这是因为构造的信号中完全没有高频噪声其分析结果完全是纯净的结果完全和理论对应。但是真实电流中混叠分量非常多、高频噪声份量多因此电流THD就不一样了。这也是为什么通过命令行计算电流THD与通过Simulink FFT Analyzer 分析电流THD之间存在较大区别的原因。6 命令行FFT函数结果与理论值对比信号1基波电流为 66.667Hz幅值为1A谐波电流为 5*66.667Hz幅值为0.1A此时电流 THD 理论值为此时通过命令行分析结果与Simulink FFT Analyzer一致与上面分析的理论一致。真实电流信号这个结果和通过整体处理数据后获得的电流THD相近但是与Simulink FFT Analyzer存在较大差距。并且通过命令行计算Nyquist frequency 的THD结果相对实现过程较为困难。7 总结1这一节文章内容梳理了一下我心中一直存在的一个疑问为什么谐波幅值被抑制得非常明显但是电流THD却降低不太明显。并且通过FFT谐波幅值表格结合正确的THD公式却永远计算不出来和Simulink FFT Analyzer 一样的值。2通过理想 构造信号 和 真实电流 之间的分析结果区别明细了问题的原因混叠分量的影响。