关于matlab分析电流THD的一些探究和记录

我其实一直对matlab中分析FFT存在一定的疑问。今天从头开始梳理一下。

1 电流THD的定义

总谐波失真 Total Harmonic Distortion(THD) 通常定义为各次谐波分量的均方根值之和与基波分量的均方根值之比,用百分比表示。对于电流信号,标准计算公式为:

其中 I1 为基波电流有效值,Ih 为第 h 次谐波电流有效值。谐波次数通常计算到 40 次或 50 次。

我们构造一个模型,对公式进行验证。

信号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%。对的上没有问题。

在分析真实电流的时候就出现了非常有意思的现象:

分析结果1:

分析结果2:

Max frequency for THD computation存在两个选项。Nyquist frequency 和 Same as Max frequency 分析的结果不同。

其中Nyquist frequency :这个选项会将THD计算的积分上限扩展到奈奎斯特频率。奈奎斯特频率 = 采样率 / 2,它是该仿真系统在理论上能够处理的最高频率

其中Same as Max frequency: 这个选项告诉软件,只在你当前频谱图显示的频率范围内计算THD。通常,这个范围的上限是你在FFT分析工具中设定的"最大频率"。一般来说,用户设定的 Max frequency 会刚好覆盖到关心的最高次谐波就停止。

4 直接计算与Nyquist frequency 分析结果的区别?

我们将FFT的分析表格导出,通过THD计算公式计算:

整体处理数据:

整体计算下来:

对平方和开根号;最终电流THD计算结果为 2.64% 。相对的Nyquist frequency 所得的电流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)通过理想 构造信号 和 真实电流 之间的分析结果区别,明细了问题的原因(混叠分量的影响)。

相关推荐
Wenweno0o1 天前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
简简单单做算法1 天前
基于GA遗传优化的Transformer-LSTM网络模型的时间序列预测算法matlab性能仿真
深度学习·matlab·lstm·transformer·时间序列预测·ga遗传优化·电池剩余寿命预测
chenjingming6661 天前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch89181 天前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳1 天前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发1 天前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense1 天前
设计模式之工厂模式
java·开发语言·设计模式
‎ദ്ദിᵔ.˛.ᵔ₎1 天前
STL 栈 队列
开发语言·c++
勿忘,瞬间1 天前
数据结构—顺序表
java·开发语言
张張4081 天前
(域格)环境搭建和编译
c语言·开发语言·python·ai