关注

总谐波畸变率 THD 的计算公式整理:MATLAB 官方公式与论文常用公式对比

总谐波畸变率 THD 的计算公式整理:MATLAB 官方公式与论文常用公式对比

1. 前言

在电力电子、并网逆变器、储能变流器、电机驱动以及电能质量分析中,总谐波畸变率 Total Harmonic Distortion,简称 THD,是评价电压或电流波形质量的重要指标。

例如,在并网储能变流器实验中,通常需要给出并网电流 THD,用于说明控制策略是否能够满足较好的电流质量要求。很多论文中会写:

The current THD is reduced from 5.8% to 2.3%.

但是,THD 的计算公式并不是只有一种写法。尤其是在 MATLAB 中,thd() 函数默认返回的是 dBc,而不是百分比,这一点非常容易导致误用。

本文将系统梳理以下几个问题:

  1. THD 到底有哪些常见计算公式?
  2. MATLAB 官方 thd() 函数采用的公式是什么?
  3. 电力电子论文中最常用的 THD 公式是什么?
  4. THD、distortion factor 和 TDD 有什么区别?
  5. 实验和论文中应该如何规范表述 THD?

2. THD 的基本定义

假设一个周期性电压或电流信号可以分解为:

x(t)=x1(t)+x2(t)+x3(t)+⋯+xH(t) x(t)=x_1(t)+x_2(t)+x_3(t)+\cdots+x_H(t) x(t)=x1(t)+x2(t)+x3(t)++xH(t)

其中:

  • x1(t)x_1(t)x1(t):基波分量;
  • xh(t)x_h(t)xh(t):第 hhh 次谐波分量;
  • HHH:计算时考虑的最高谐波次数;
  • X1X_1X1:基波 RMS 值;
  • XhX_hXh:第 hhh 次谐波 RMS 值。

最经典、最常用的 THD 定义为:

THD=∑h=2HXh2X1×100 \mathrm{THD}=\frac{\sqrt{\sum_{h=2}^{H}X_h^2}}{X_1}\times100% THD=X1h=2HXh2×100

也就是:

THD=X22+X32+⋯+XH2X1×100 \mathrm{THD}=\frac{\sqrt{X_2^2+X_3^2+\cdots+X_H^2}}{X_1}\times100% THD=X1X22+X32++XH2×100

这个公式的含义非常明确:

THD = 所有谐波分量 RMS 合成值 / 基波 RMS 值。

注意,这里的分母是 基波 RMS 值,不是总 RMS 值。

3. 电压 THD 与电流 THD

对于电压信号,其总谐波畸变率可以写为:

THD∗v=∑∗h=2HVh2V1×100 \mathrm{THD}*v=\frac{\sqrt{\sum*{h=2}^{H}V_h^2}}{V_1}\times100% THDv=V1h=2HVh2×100

展开后为:

THDv=V22+V32+⋯+VH2V1×100 \mathrm{THD}_v=\frac{\sqrt{V_2^2+V_3^2+\cdots+V_H^2}}{V_1}\times100% THDv=V1V22+V32++VH2×100

其中:

  • V1V_1V1 为基波电压 RMS 值;
  • VhV_hVh 为第 hhh 次谐波电压 RMS 值。

对于电流信号,其总谐波畸变率可以写为:

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

展开后为:

THDi=I22+I32+⋯+IH2I1×100 \mathrm{THD}_i=\frac{\sqrt{I_2^2+I_3^2+\cdots+I_H^2}}{I_1}\times100% THDi=I1I22+I32++IH2×100

其中:

  • I1I_1I1 为基波电流 RMS 值;
  • IhI_hIh 为第 hhh 次谐波电流 RMS 值。

在并网变流器实验中,最常见的是计算并网电流 THD,即:

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

4. 论文中最常用的 THD 公式

在电力电子、并网逆变器、储能变流器、电机驱动等论文中,最常用的 THD 公式就是:

THD=∑h=2HXh2X1×100 \mathrm{THD}=\frac{\sqrt{\sum_{h=2}^{H}X_h^2}}{X_1}\times100% THD=X1h=2HXh2×100

其中,XXX 可以表示电压或电流。

例如,对于并网电流 THD,通常写为:

THD∗i=∑∗h=250Ih2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{50}I_h^2}}{I_1}\times100% THDi=I1h=250Ih2×100

这里取 H=50H=50H=50,表示计算到第 50 次谐波。

对于 50 Hz 系统,第 50 次谐波对应频率为:

f50=50×50=2500Hz f_{50}=50\times50=2500\mathrm{Hz} f50=50×50=2500Hz

因此,在 50 Hz 电力系统中,计算到第 50 次谐波通常意味着分析频率范围到 2500 Hz。

论文中建议写成:

The current THD is calculated as

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

where I1I_1I1 is the RMS value of the fundamental current component, IhI_hIh is the RMS value of the hhh-th harmonic current component, and HHH is the highest harmonic order considered in the analysis.

如果是中文论文,可以写为:

其中,I1I_1I1 为基波电流有效值,IhI_hIh 为第 hhh 次谐波电流有效值,HHH 为计算中考虑的最高谐波次数。

5. MATLAB 官方 thd() 函数的公式

MATLAB Signal Processing Toolbox 中提供了 thd() 函数用于计算总谐波畸变率。

需要特别注意的是:

MATLAB 的 thd() 函数默认返回的是 dBc,而不是百分比。

其官方计算本质为:

THD∗dBc=10log⁡∗10(∑h=2HAh2A12) \mathrm{THD}*{\mathrm{dBc}}=10\log*{10}\left(\frac{\sum_{h=2}^{H}A_h^2}{A_1^2}\right) THDdBc=10log10(A12h=2HAh2)

等价地,也可以写成:

THD∗dBc=20log⁡∗10(∑h=2HAh2A1) \mathrm{THD}*{\mathrm{dBc}}=20\log*{10}\left(\frac{\sqrt{\sum_{h=2}^{H}A_h^2}}{A_1}\right) THDdBc=20log10A1h=2HAh2

其中:

  • A1A_1A1 为基波幅值;
  • AhA_hAh 为第 hhh 次谐波幅值;
  • ∑h=2HAh2\sum_{h=2}^{H}A_h^2h=2HAh2 表示所有谐波分量的功率和。

因此,MATLAB thd() 的结果本质上是:

谐波总功率与基波功率之比,再转换为 dB 形式。

6. MATLAB dBc 与百分比 THD 的转换

如果 MATLAB 得到的结果为:

thd_dbc = thd(x,Fs,N);

那么该结果单位是 dBc。

若要转换成百分比形式,应使用:

KaTeX parse error: Expected '}', got 'EOF' at end of input: …rm{dBc}}}{20}}

对应 MATLAB 代码为:

thd_dbc = thd(x,Fs,N);
thd_percent = 100*10^(thd_dbc/20);

例如,如果 MATLAB 返回:

thd_dbc = -40;

则对应的百分比 THD 为:

thd_percent = 100*10^(-40/20);

即:

KaTeX parse error: Expected '}', got 'EOF' at end of input: …imes10^{-2}=1%

所以:

−40dBc⟺1 -40\mathrm{dBc}\quad\Longleftrightarrow\quad1% 40dBc1

这是实验数据处理中非常容易出错的地方。

7. MATLAB thd() 中谐波数参数的含义

MATLAB 中常用调用形式为:

r = thd(x,Fs,N);

其中:

  • x:输入信号;
  • Fs:采样频率;
  • N:参与计算的谐波数。

需要注意的是,MATLAB 中的 N 通常包含基波。

例如:

thd_dbc = thd(x,Fs,50);

表示计算基波到第 50 次谐波范围内的 THD。

如果想得到百分比形式:

thd_dbc = thd(x,Fs,50);
thd_percent = 100*10^(thd_dbc/20);

8. 由 RMS 值直接计算 THD

如果已经通过 FFT 或其他方法得到了各次谐波的 RMS 值,则可以直接计算 THD。

假设已经得到:

I1 = 10;      % 基波电流 RMS
I5 = 0.3;     % 5次谐波 RMS
I7 = 0.2;     % 7次谐波 RMS
I11 = 0.1;    % 11次谐波 RMS

则 THD 可以计算为:

THD_percent = sqrt(I5^2 + I7^2 + I11^2)/I1*100;

对应公式为:

THD∗i=I52+I72+I∗112I1×100 \mathrm{THD}*i=\frac{\sqrt{I_5^2+I_7^2+I*{11}^2}}{I_1}\times100% THDi=I1I52+I72+I112×100

如果谐波数据存储在数组中:

Ih = [10, 0.3, 0.2, 0.1];  % 第一个元素为基波,后面为谐波
I1 = Ih(1);
I_harmonic = Ih(2:end);

THD_percent = sqrt(sum(I_harmonic.^2))/I1*100;

9. 由总 RMS 计算 THD 的等效公式

如果信号中不含直流分量,或者直流分量已经被去除,则有:

Xrms2=X12+X22+X32+⋯+XH2 X_{\mathrm{rms}}^2=X_1^2+X_2^2+X_3^2+\cdots+X_H^2 Xrms2=X12+X22+X32++XH2

因此:

X22+X32+⋯+XH2=Xrms2−X12 X_2^2+X_3^2+\cdots+X_H^2=X_{\mathrm{rms}}^2-X_1^2 X22+X32++XH2=Xrms2X12

于是 THD 也可以写为:

THD=Xrms2−X12X1×100 \mathrm{THD}=\frac{\sqrt{X_{\mathrm{rms}}^2-X_1^2}}{X_1}\times100% THD=X1Xrms2X12×100

如果信号中包含直流分量 X0X_0X0,则需要扣除直流分量:

THD=Xrms2−X02−X12X1×100 \mathrm{THD}=\frac{\sqrt{X_{\mathrm{rms}}^2-X_0^2-X_1^2}}{X_1}\times100% THD=X1Xrms2X02X12×100

这种公式在实验数据处理中也很常见。

但是需要注意:

这种写法会把所有非基波成分都计入失真,包括噪声、间谐波、非整数频率分量和开关频率附近的成分。

因此,如果论文中采用该公式,需要说明数据处理方式,例如:

  • 是否去除直流分量;
  • 是否只统计整数次谐波;
  • 是否排除间谐波;
  • 是否限定最高谐波次数;
  • 是否采用稳态时间窗。

10. 另一种容易混淆的公式:以总 RMS 为分母

有些资料中还会出现如下定义:

THD∗R=∑∗h=2HXh2∑h=1HXh2×100 \mathrm{THD}*R=\frac{\sqrt{\sum*{h=2}^{H}X_h^2}}{\sqrt{\sum_{h=1}^{H}X_h^2}}\times100% THDR=h=1HXh2h=2HXh2×100

也就是:

THDR=X22+X32+⋯+XH2X12+X22+⋯+XH2×100 \mathrm{THD}_R=\frac{\sqrt{X_2^2+X_3^2+\cdots+X_H^2}}{\sqrt{X_1^2+X_2^2+\cdots+X_H^2}}\times100% THDR=X12+X22++XH2X22+X32++XH2×100

该定义的分母是总 RMS,而不是基波 RMS。

它与常用 THD 定义之间的关系为:

THDR=THDF1+THDF2 \mathrm{THD}_R=\frac{\mathrm{THD}_F}{\sqrt{1+\mathrm{THD}_F^2}} THDR=1+THDF2THDF

其中:

  • THDF\mathrm{THD}_FTHDF 表示以基波为分母的 THD;
  • THDR\mathrm{THD}_RTHDR 表示以总 RMS 为分母的失真率。

在电力电子论文中,通常采用的是 THDF\mathrm{THD}_FTHDF,即:

THD∗F=∑∗h=2HXh2X1×100 \mathrm{THD}*F=\frac{\sqrt{\sum*{h=2}^{H}X_h^2}}{X_1}\times100% THDF=X1h=2HXh2×100

而不是以总 RMS 为分母的 THDR\mathrm{THD}_RTHDR

11. THD 与 TDD 的区别

在电流谐波评价中,还经常会遇到另一个指标:TDD,Total Demand Distortion,即总需求畸变率。

THD 的定义为:

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

而 TDD 的定义为:

TDD=∑h=2HIh2IL×100 \mathrm{TDD}=\frac{\sqrt{\sum_{h=2}^{H}I_h^2}}{I_L}\times100% TDD=ILh=2HIh2×100

二者的区别在于分母不同:

指标分子分母常见用途
THD谐波电流 RMS 合成值当前基波电流 I1I_1I1波形质量评价、实验结果对比
TDD谐波电流 RMS 合成值最大需求负荷电流 ILI_LIL电能质量标准、并网点谐波合规性评价

因此:

  • 如果是评价变流器输出电流质量,通常使用 THD;
  • 如果是按照 IEEE 519 等电能质量标准评价公共连接点谐波水平,则可能需要使用 TDD。

12. FFT 计算 THD 时的注意事项

在 MATLAB 中,如果自己通过 FFT 计算 THD,需要注意以下几点。

12.1 基波频率要准确

对于 50 Hz 系统,应保证基波频率为:

f1=50Hz f_1=50\mathrm{Hz} f1=50Hz

hhh 次谐波频率为:

fh=hf1 f_h=h f_1 fh=hf1

例如:

f5=5×50=250Hz f_5=5\times50=250\mathrm{Hz} f5=5×50=250Hz

f7=7×50=350Hz f_7=7\times50=350\mathrm{Hz} f7=7×50=350Hz

f50=50×50=2500Hz f_{50}=50\times50=2500\mathrm{Hz} f50=50×50=2500Hz

12.2 尽量使用整周期采样

如果采样窗口不是基波周期的整数倍,会产生频谱泄漏,导致谐波幅值计算不准确。

例如,50 Hz 系统的一个周期为:

T1=150=0.02s T_1=\frac{1}{50}=0.02\mathrm{s} T1=501=0.02s

如果选取 10 个周期,则时间窗为:

Twin=10T1=0.2s T_{\mathrm{win}}=10T_1=0.2\mathrm{s} Twin=10T1=0.2s

12.3 明确 RMS 还是峰值

THD 公式中通常使用 RMS 值。

如果 FFT 得到的是峰值幅值,只要基波和谐波均采用同一种幅值定义,则比例中 2\sqrt{2}2 会相互抵消。因此,用峰值或 RMS 计算出的 THD 比例是一致的。

但是论文中建议统一表述为 RMS 值:

THD=∑h=2HXh2X1×100 \mathrm{THD}=\frac{\sqrt{\sum_{h=2}^{H}X_h^2}}{X_1}\times100% THD=X1h=2HXh2×100

where XhX_hXh denotes the RMS value of the hhh-th harmonic component.

12.4 明确是否包含直流分量

THD 计算一般不包含直流分量。若信号存在直流偏置,应先去除直流分量:

x = x - mean(x);

12.5 明确是否包含间谐波和噪声

标准 THD 通常只统计整数次谐波:

2f1,3f1,4f1,⋯ ,Hf1 2f_1,3f_1,4f_1,\cdots,Hf_1 2f1,3f1,4f1,,Hf1

而不包括间谐波、宽频噪声和非整数倍频率分量。

如果采用总 RMS 减基波 RMS 的方法,可能会把这些成分也纳入计算,因此需要谨慎。

13. MATLAB 手动计算 THD 示例

下面给出一个简单示例,假设信号由基波、5 次谐波和 7 次谐波组成。

clear; clc;

Fs = 10000;          % 采样频率
f1 = 50;             % 基波频率
T = 0.2;             % 采样时长,10个基波周期
t = 0:1/Fs:T-1/Fs;

% 构造信号
x1 = 10*sqrt(2)*sin(2*pi*f1*t);       % 基波 RMS = 10
x5 = 0.3*sqrt(2)*sin(2*pi*5*f1*t);    % 5次谐波 RMS = 0.3
x7 = 0.2*sqrt(2)*sin(2*pi*7*f1*t);    % 7次谐波 RMS = 0.2

x = x1 + x5 + x7;

% 理论 THD
I1 = 10;
I5 = 0.3;
I7 = 0.2;

THD_percent_theory = sqrt(I5^2 + I7^2)/I1*100

理论结果为:

THD=0.32+0.2210×100 \mathrm{THD}=\frac{\sqrt{0.3^2+0.2^2}}{10}\times100%=3.606% THD=100.32+0.22×100

如果使用 MATLAB thd()

thd_dbc = thd(x,Fs,7);
thd_percent = 100*10^(thd_dbc/20);

其中:

  • thd_dbc 为 dBc;
  • thd_percent 为百分比 THD。

14. 论文中推荐的英文表述

在 IEEE 风格论文中,建议不要只写:

The THD is calculated by FFT.

这种表述过于简单,不够规范。

建议写为:

The current total harmonic distortion (THD) is calculated based on the RMS values of the harmonic components as

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

where I1I_1I1 denotes the RMS value of the fundamental current component, IhI_hIh denotes the RMS value of the hhh-th harmonic current component, and HHH is the highest harmonic order considered in the calculation.

如果需要说明采用第 50 次谐波,可以写为:

In this study, the harmonic components up to the 50th order are considered in the THD calculation.

如果需要说明基波频率为 50 Hz,可以写为:

The fundamental frequency is 50 Hz, and the harmonic components from the 2nd to the 50th order are included.

如果需要说明 MATLAB 处理方式,可以写为:

The THD obtained by the MATLAB thd function is converted from dBc to percentage using

KaTeX parse error: Expected '}', got 'EOF' at end of input: …thrm{dBc}}/20}

15. 论文中推荐的中文表述

中文论文或实验报告中可以写为:

本文采用各次谐波有效值计算并网电流总谐波畸变率,其表达式为:

THD∗i=∑∗h=2HIh2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{H}I_h^2}}{I_1}\times100% THDi=I1h=2HIh2×100

式中,I1I_1I1 为基波电流有效值,IhI_hIh 为第 hhh 次谐波电流有效值,HHH 为计算中考虑的最高谐波次数。本文计算至第 50 次谐波。

也可以进一步说明:

在 MATLAB 中,thd() 函数默认输出单位为 dBc,本文将其转换为百分比形式:

KaTeX parse error: Expected '}', got 'EOF' at end of input: …thrm{dBc}}/20}

16. 常见误区总结

误区 1:把 MATLAB thd() 的结果直接当成百分比

错误写法:

THD_percent = thd(x,Fs,50);

这是不对的,因为 thd() 返回的是 dBc。

正确写法:

THD_dbc = thd(x,Fs,50);
THD_percent = 100*10^(THD_dbc/20);

误区 2:把总 RMS 当成分母

常用 THD 的分母是基波 RMS:

X1 X_1 X1

而不是总 RMS:

Xrms X_{\mathrm{rms}} Xrms

论文中最常用的是:

THD=∑h=2HXh2X1×100 \mathrm{THD}=\frac{\sqrt{\sum_{h=2}^{H}X_h^2}}{X_1}\times100% THD=X1h=2HXh2×100

误区 3:没有说明谐波次数上限

不同的 HHH 会得到不同的 THD。

例如:

H=20 H=20 H=20

H=50 H=50 H=50

计算结果可能不同。

因此论文中应说明:

Harmonic components up to the 50th order are considered.

误区 4:没有区分 THD 和 TDD

THD 的分母是当前基波电流:

I1 I_1 I1

TDD 的分母是最大需求负荷电流:

IL I_L IL

二者不能混用。

误区 5:没有去除直流分量

THD 一般不包括直流分量,因此在数据处理时应注意去除直流偏置:

x = x - mean(x);

17. 总结

THD 最常用、最标准的公式为:

THD=∑h=2HXh2X1×100 \mathrm{THD}=\frac{\sqrt{\sum_{h=2}^{H}X_h^2}}{X_1}\times100% THD=X1h=2HXh2×100

其中:

  • X1X_1X1 为基波 RMS 值;
  • XhX_hXh 为第 hhh 次谐波 RMS 值;
  • HHH 为最高谐波次数。

MATLAB thd() 函数的官方输出为 dBc:

THD∗dBc=10log⁡∗10(∑h=2HXh2X12) \mathrm{THD}*{\mathrm{dBc}}=10\log*{10}\left(\frac{\sum_{h=2}^{H}X_h^2}{X_1^2}\right) THDdBc=10log10(X12h=2HXh2)

若要转换为百分比,应使用:

KaTeX parse error: Expected '}', got 'EOF' at end of input: …rm{dBc}}}{20}}

对于电力电子和并网变流器论文,推荐采用:

THD∗i=∑∗h=250Ih2I1×100 \mathrm{THD}*i=\frac{\sqrt{\sum*{h=2}^{50}I_h^2}}{I_1}\times100% THDi=I1h=250Ih2×100

并在文中明确说明:

  1. 基波频率;
  2. 谐波次数上限;
  3. 是否去除直流分量;
  4. 是否只统计整数次谐波;
  5. MATLAB 输出是否已由 dBc 转换为百分比。

这样可以避免 THD 计算结果在 MATLAB、实验报告和论文表述之间出现不一致。

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_44114030/article/details/160922671

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--