主要内容

thd

R2026b

总谐波失真

描述

r = thd(x) 返回实数值正弦信号 x 的总谐波失真 (THD),以 dBc 为单位。总谐波失真根据基频和前五个谐波确定,使用与输入信号长度相同的修正周期图。修正周期图使用 β = 38 的凯塞窗。

示例

r = thd(x,Fs,n) 指定采样率 Fs 以及在 THD 计算中使用的谐波数(包括基波)。

示例

r = thd(pxx,f,"psd") 将输入 pxx 指定为单边功率谱密度 (PSD) 估计值。f 是对应于 pxx 中 PSD 估计值的频率向量。

r = thd(pxx,f,n,"psd") 指定在 THD 计算中使用的谐波数(包括基波)。

示例

r = thd(sxx,f,rbw,"power") 将输入指定为单边功率谱。rbw 是每个功率估计在其上积分的分辨率带宽。

示例

r = thd(sxx,f,rbw,n,"power") 指定在 THD 计算中使用的谐波数(包括基波)。

r = thd(___,"aliased") 会报告基频中混叠到奈奎斯特范围内的谐波。当输入信号欠采样时,请使用此选项。如果您未指定此选项,或将其设置为 "omitaliases",则该函数会忽略基频中超出奈奎斯特范围的任何谐波。

示例

[r,harmpow,harmfreq] = thd(___) 返回谐波的功率(以 dB 为单位)和频率,包括基波。

示例

不带输出参量的 thd(___) 在当前图窗窗口中绘制信号频谱并注解谐波。它使用不同颜色绘制基波分量、谐波以及 DC 电平和噪声。THD 显示在绘图上方。标注基频和谐波。DC 项从测量中排除,且不标注。

示例

示例

全部折叠

此示例显式说明如何计算由基波和两个谐波组成的一个信号的以 dBc 为单位的总谐波失真。显式计算与 thd 返回的结果进行核对。

创建一个信号,其采样率为 1 kHz。该信号由振幅为 2 的 100 Hz 基波以及频率为 200 和 300 Hz、振幅为 0.01 和 0.005 的两个谐波组成。显式并使用 thd 获得总谐波失真。

f = 100*[1 2 3];
a = [2 0.01 0.005];
t = (0:0.001:1)';

x = cos(2*pi*f.*t)*a';

tharmdist = pow2db(sum(a(2:end).^2)/a(1)^2)
tharmdist = 
-45.0515
r = thd(x)
r = 
-45.0515

创建一个信号,其采样率为 1 kHz。该信号由振幅为 2 的 100 Hz 基波以及频率为 200、300 和 400 Hz、振幅为 0.01、0.005 和 0.0025 的三个谐波组成。

将谐波数设置为 3。这包括基波。因此,100、200 和 300 Hz 处的功率用于 THD 计算。

t = 0:0.001:1-0.001;
Fs = 1000;
x = 2*cos(2*pi*100*t) + 0.01*cos(2*pi*200*t)+ ...
    0.005*cos(2*pi*300*t) + 0.0025*sin(2*pi*400*t);

r3 = thd(x,Fs,3)
r3 = 
-45.0515

与具有所有谐波的信号的 THD 进行比较。将谐波数指定为 3 会在 THD 计算中忽略 400 Hz 处的功率。

r = thd(x,Fs);
table([r3;r],VariableNames="THD (dBc)", ...
    RowNames=["3" "All"] + " harmonics")
ans = 2×1 table
                     THD (dBc)
                     _________

    3 harmonics       -45.051 
    All harmonics      -44.84 

创建一个信号,其采样率为 1 kHz。该信号由振幅为 2 的 100 Hz 基波以及频率分别为 200、300 和 400 Hz、振幅分别为 0.01、0.005 和 0.0025 的三个谐波组成。

t = 0:0.001:1-0.001;
Fs = 1000;
x = 2*cos(2*pi*100*t) + 0.01*cos(2*pi*200*t)+ ...
    0.005*cos(2*pi*300*t) + 0.0025*sin(2*pi*400*t);

获得信号的周期图 PSD 估计值,并使用 PSD 估计值作为输入来计算 THD。将谐波数设置为 3。这包括基频分量。因此,100、200 和 300 Hz 处的功率用于 THD 计算。

[pxx,f] = periodogram(x,rectwin(length(x)),length(x),Fs);
r = thd(pxx,f,3,"psd")
r = 
-45.0515

通过输入使用汉明窗获得的功率谱以及该窗的分辨率带宽来确定 THD。

创建一个以 10 kHz 采样的信号。该信号由振幅为 2 的 100 Hz 基波以及频率分别为 300、500 和 700 Hz、振幅分别为 0.01、0.005 和 0.0025 的三个奇数阶谐波组成。

fs = 10000;
t = 0:1/fs:1-1/fs;
x = 2*cos(2*pi*100*t) + 0.01*cos(2*pi*300*t)+ ...
    0.005*cos(2*pi*500*t) + 0.0025*sin(2*pi*700*t);

根据信号的功率谱计算 THD。将谐波数指定为 7。

sigLength = length(x);
win = hamming(sigLength);
[sxx,f] = periodogram(x,win,sigLength,fs,"power");
rbw = enbw(win,fs);

r = thd(sxx,f,rbw,7,"power")
r = 
-44.8396

以 2.1 kHz 频率分量作为输入,生成一个类似弱非线性放大器输出的信号。此信号以 10 kHz 频率采样,采样时间为 1 秒。计算并绘制该信号的功率谱。使用 β = 38 的凯塞窗进行计算。重置随机数生成器以获得可重现的结果。

rng("default")
Fs = 10000;
f = 2100;

t = 0:1/Fs:1; 
x = tanh(sin(2*pi*f*t)+0.1) + 0.001*randn(1,length(t));

periodogram(x,kaiser(length(x),38),[],Fs,"power")

Figure contains an axes object. The axes object with title Periodogram Power Spectrum Estimate, xlabel Frequency (kHz), ylabel Power (dB) contains an object of type line.

谐波在 4.2 kHz、6.3 kHz、8.4 kHz、10.5 kHz、12.6 kHz 和 14.7 kHz 的频率下明显区别于噪声。除第一个频率外,所有频率都大于奈奎斯特频率。谐波分别混叠到 3.7 kHz、1.6 kHz、0.5 kHz、2.6 kHz 和 4.7 kHz 的位置。

计算信号的总谐波失真。默认情况下,thd 将混叠谐波视为噪声的一部分。

thd(x,Fs,7);

Figure contains an axes object. The axes object with title THD: -29.11 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 13 objects of type line, text. These objects represent Fundamental, Harmonics, DC and Noise (excluded).

重复该计算,但现在将混叠谐波视为信号的一部分。

thd(x,Fs,7,"aliased");

Figure contains an axes object. The axes object with title THD: -22.54 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 18 objects of type line, text. These objects represent Fundamental, Harmonics, DC and Noise (excluded).

创建一个以 10 kHz 采样的信号。该信号由振幅为 2 的 100 Hz 基波以及频率为 300、500 和 700 Hz、振幅为 0.01、0.005 和 0.0025 的三个奇数阶谐波组成。将谐波数指定为 7。确定 THD、谐波处的功率以及对应频率。

Fs = 10000;
t = 0:1/Fs:1-1/Fs;
x = 2*cos(2*pi*100*t) + 0.01*cos(2*pi*300*t) + ...
    0.005*cos(2*pi*500*t) + 0.0025*sin(2*pi*700*t);
[r,harmpow,harmfreq] = thd(x,10000,7);
[harmfreq harmpow]
ans = 7×2

  100.0000    3.0103
  201.0000 -321.0983
  300.0000  -43.0103
  399.0000 -281.9259
  500.0000  -49.0309
  599.0000 -282.1066
  700.0000  -55.0515

偶数阶谐波处的功率约为 -300 dB,对应的振幅为 10-15。

生成以 50 kHz 频率采样的 2.5 kHz 正弦波。将标准差为 0.00005 的高斯白噪声添加到信号中。重置随机数生成器以获得可重现的结果。使结果通过弱非线性放大器。绘制 THD。

rng("default")
fs = 5e4;
f0 = 2.5e3;
N = 1024;
t = (0:N-1)/fs;

ct = cos(2*pi*f0*t);
cd = ct + 0.00005*randn(size(ct));

amp = [1e-5 5e-6 -1e-3 6e-5 1 25e-3];
sgn = polyval(amp,cd);
thd(sgn,fs);

Figure contains an axes object. The axes object with title THD: -72.39 dB, xlabel Frequency (kHz), ylabel Power (dB) contains 16 objects of type line, text. These objects represent Fundamental, Harmonics, DC and Noise (excluded).

绘图显示用于计算比率的频谱以及被视为噪声的区域。DC 电平从计算中排除。标注基频和谐波。

输入参数

全部折叠

实数值正弦输入信号,指定为行向量或列向量。

示例: cos(pi/4*(0:159))+cos(pi/2*(0:159))

数据类型: single | double

采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率的单位是赫兹。

  • 如果将 Fs 指定为空数组 [],则 thd 假定输入信号 x 的采样率为 1 Hz。

  • 如果未指定 Fs,则 thd 假定输入信号 x 的采样率为 2π 弧度/采样点。

谐波数,指定为正整数。

单边 PSD 估计值,指定为实数值非负列向量。

功率谱密度必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。

示例: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) 指定以 2π Hz 频率采样的含噪双通道正弦波的周期图 PSD 估计值及计算估计值时的频率。

数据类型: single | double

对应于单边 PSD 估计值 pxx 的周期性频率,指定为行向量或列向量。f 的第一个元素必须为 0。

数据类型: double | single

功率谱,指定为实数值非负行向量或列向量。

功率谱必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。

示例: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power") 指定在高斯白噪声中嵌入的双通道正弦波的周期图功率谱估计值及计算估计值时的归一化频率。

分辨率带宽,指定为正标量。分辨率带宽是离散傅里叶变换的频率分辨率和窗的等效噪声带宽的乘积。

输出参量

全部折叠

总谐波失真(以 dBc 为单位),以实数值标量形式返回。

谐波的功率,以实数值标量或向量形式返回(以 dB 为单位)。harmpow 是标量还是向量取决于您指定为输入参量 n 的谐波数。

谐波的频率,以非负标量或向量形式返回。harmfreq 是标量还是向量取决于您指定为输入参量 n 的谐波数。

详细信息

全部折叠

扩展功能

全部展开

版本历史记录

在 R2013b 中推出

全部展开

另请参阅

| | |