MATLAB 帮助中心
总谐波失真
r = thd(x)
r = thd(x,Fs,n)
r = thd(pxx,f,"psd")
r = thd(pxx,f,n,"psd")
r = thd(sxx,f,rbw,"power")
r = thd(sxx,f,rbw,n,"power")
r = thd(___,"aliased")
[r,harmpow,harmfreq] = thd(___)
thd(___)
r = thd(x) 返回实数值正弦信号 x 的总谐波失真 (THD),以 dBc 为单位。总谐波失真根据基频和前五个谐波确定,使用与输入信号长度相同的修正周期图。修正周期图使用 β = 38 的凯塞窗。
r
x
示例
r = thd(x,Fs,n) 指定采样率 Fs 以及在 THD 计算中使用的谐波数(包括基波)。
Fs
n
r = thd(pxx,f,"psd") 将输入 pxx 指定为单边功率谱密度 (PSD) 估计值。f 是对应于 pxx 中 PSD 估计值的频率向量。
pxx
f
r = thd(pxx,f,n,"psd") 指定在 THD 计算中使用的谐波数(包括基波)。
r = thd(sxx,f,rbw,"power") 将输入指定为单边功率谱。rbw 是每个功率估计在其上积分的分辨率带宽。
sxx
rbw
r = thd(sxx,f,rbw,n,"power") 指定在 THD 计算中使用的谐波数(包括基波)。
r = thd(___,"aliased") 会报告基频中混叠到奈奎斯特范围内的谐波。当输入信号欠采样时,请使用此选项。如果您未指定此选项,或将其设置为 "omitaliases",则该函数会忽略基频中超出奈奎斯特范围的任何谐波。
"omitaliases"
[r,harmpow,harmfreq] = thd(___) 返回谐波的功率(以 dB 为单位)和频率,包括基波。
harmpow
harmfreq
不带输出参量的 thd(___) 在当前图窗窗口中绘制信号频谱并注解谐波。它使用不同颜色绘制基波分量、谐波以及 DC 电平和噪声。THD 显示在绘图上方。标注基频和谐波。DC 项从测量中排除,且不标注。
全部折叠
此示例显式说明如何计算由基波和两个谐波组成的一个信号的以 dBc 为单位的总谐波失真。显式计算与 thd 返回的结果进行核对。
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 = -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")
通过输入使用汉明窗获得的功率谱以及该窗的分辨率带宽来确定 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")
谐波在 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);
重复该计算,但现在将混叠谐波视为信号的一部分。
thd(x,Fs,7,"aliased");
创建一个以 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);
绘图显示用于计算比率的频谱以及被视为噪声的区域。DC 电平从计算中排除。标注基频和谐波。
实数值正弦输入信号,指定为行向量或列向量。
示例: cos(pi/4*(0:159))+cos(pi/2*(0:159))
cos(pi/4*(0:159))+cos(pi/2*(0:159))
数据类型: single | double
single
double
采样率,指定为正标量。采样率是单位时间内的采样数。如果时间单位是秒,则采样率的单位是赫兹。
如果将 Fs 指定为空数组 [],则 thd 假定输入信号 x 的采样率为 1 Hz。
[]
如果未指定 Fs,则 thd 假定输入信号 x 的采样率为 2π 弧度/采样点。
谐波数,指定为正整数。
单边 PSD 估计值,指定为实数值非负列向量。
功率谱密度必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。
db2pow
示例: [pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2)) 指定以 2π Hz 频率采样的含噪双通道正弦波的周期图 PSD 估计值及计算估计值时的频率。
[pxx,f] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2))
对应于单边 PSD 估计值 pxx 的周期性频率,指定为行向量或列向量。f 的第一个元素必须为 0。
数据类型: double | single
功率谱,指定为实数值非负行向量或列向量。
功率谱必须以线性单位而非分贝表示。使用 db2pow 将分贝值转换为功率值。
示例: [sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power") 指定在高斯白噪声中嵌入的双通道正弦波的周期图功率谱估计值及计算估计值时的归一化频率。
[sxx,w] = periodogram(cos(pi./[4;2]*(0:159))'+randn(160,2),"power")
分辨率带宽,指定为正标量。分辨率带宽是离散傅里叶变换的频率分辨率和窗的等效噪声带宽的乘积。
总谐波失真(以 dBc 为单位),以实数值标量形式返回。
谐波的功率,以实数值标量或向量形式返回(以 dB 为单位)。harmpow 是标量还是向量取决于您指定为输入参量 n 的谐波数。
谐波的频率,以非负标量或向量形式返回。harmfreq 是标量还是向量取决于您指定为输入参量 n 的谐波数。
函数 thd、sfdr、sinad 和 snr 用于测量由正弦波激励的弱非线性系统的响应。
sfdr
sinad
snr
当提供时域输入时,thd 使用带有大旁瓣衰减的凯塞窗执行周期图。为了找到基频,该算法会在周期图中搜索最大的非零频谱分量。然后,它会计算所有相邻箱的中心矩,这些箱从最大值单调递减。为了可被检测到,基频应至少位于第二个频率箱中。高阶谐波是基频的整数倍。如果一个谐波位于另一个谐波邻域中的单调递减区域内,则我们认为其功率属于较大的谐波。此较大的谐波不一定是基频。
如果基频不是信号中最高的频谱分量,则 thd 会失败。
请确保频率分量相距甚远,足以适应凯塞窗的旁瓣宽度。如果这种情况不可行,您可以使用 "power" 标志,并使用不同的窗计算周期图。
"power"
全部展开
用法说明和限制:
如果提供,输入参量 "power"、"psd"、"aliased" 和 "omitaliases" 必须为编译时常量。
"psd"
"aliased"
请参阅“C/C++ 代码生成”部分中的用法说明和限制。同样的用法说明和限制也适用于 GPU 代码生成。
backgroundPool
ThreadPool
thd 函数支持基于线程的环境,但存在以下用法说明和限制:
不支持不带输出参量的语法。
有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
此函数完全支持 GPU 数组。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
您可以在基于线程的环境中使用 thd。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
gpuArray
thd 函数支持 gpuArray 对象。您必须有 Parallel Computing Toolbox™ 才能使用此功能。
sfdr | sinad | snr | toi
toi
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处