声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 4264|回复: 7

[综合] 非线性失真之总谐波失真(THD)测试

[复制链接]
发表于 2019-2-7 19:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 TestGuru 于 2019-2-7 19:34 编辑

非线性失真之总谐波失真(THD)测试

一、前言


本篇讲的是非线性失真之总谐波失真,呵呵,光解释这个名词就得发挥打破砂锅问到底的大无畏的革命精神。

首先什么是失真?简单地说如果一个信号通过一个系统后,其形状发生 了改变,那么这个信号就失真了。失真又可分为线性失真和非线性失真。

那么什么是线性失真?简单地说如果一个信号通过一个系统后,没有新的频率产生,那么就是线性失真。线性失真可由系统的幅频响应的非平坦性引起,也可由系统相频响应的非线性引起。

那么什么是非线性失真?简单地说如果一个信号通过一个系统后,有新的频率产生,那么就是非线性失真。非线性失真可分为谐波失真和非谐波失真。

那么什么是谐波失真?简单地说如果一个信号通过一个系统后,新产生的频率为原信号频率的整数倍,也就是说原信号频率为基波,新产生的频率为其谐波,那么这部分失真就是谐波失真。

那么什么是非谐波失真?简单地说如果一个信号通过一个系统后,新产生的频率与原信号频率不具备整数倍关系,也就是说不具备谐波与基波的关系,那么这部分失真就是非谐波失真。

本文将介绍与谐波失真相关的参数测量,包括THD、THD+N、SINAD、SNR、ENOB、NL、SFDR。其它的失真测量将另文描述。总谐波失真(Total Harmonic Distortion) 测试在很多领域都有用到,例如音响、供电和振动等, 其中音响业对失真测量的准确度要求最高。


回复
分享到:

使用道具 举报

 楼主| 发表于 2019-2-18 18:33 | 显示全部楼层
二、THD、THD+N、SINAD、SNR、ENOB、NL、SFDR的定义

THD、THD+N、SINAD、SNR、ENOB的定义有不同的变种,这里只给出其中比较常见的定义。测量这些参数时,通常采用信号发生器向被测设备发出超低失真的单频正弦波,同时采集从被测设备返回来的信号,然后通过快速傅里叶变换(FFT)将测得的信号功率分解为基波功率、各次谐波失真功率和噪声功率三大部分,如果有直流分量存在,通常滤掉而不用于计算,最后按这些参数的定义公式进行计算。

1、总谐波失真THD(Total Harmonic Distortion)的定义
总谐波失真THD是描述放大器、数模/模数转换器、传感器、能换器、供电等设备和系统的常见参数之一。它通常定义为各谐波功率之和与基波功率的比值的开方,以百分比表示:

Fig4-1.png

其中,Vi为第i次谐波的RMS幅度,V1为基波的RMS幅度,N为计算THD所用到的最高次谐波的次数。

如果以dB表示则:THDdB = 20log10(THD)。比如THD=0.0001%,则THDdB = -120 dB,总谐波失真只是对谐波失真的总体描述,它并不区分削顶失真、交越失真,也不区分各次谐波的相对比重。在描述一个系统的THD值时,还必须指明该THD值是在什么情况下测得的,包括测试信号(基波)的频率、计算所用到的最高次谐波的次数或计算的频率范围、测试信号的幅度等。

2、总谐波失真+噪声THD+N(Total Harmonic Distortion Plus Noise)的定义
总谐波失真+噪声THD+N通常定义为各谐波功率及噪声功率之和与信号总功率的比值的开方,以百分比表示:

其中,Vtotal为信号(包括基波、各次谐波和噪声)的总RMS幅度,V1为基波的RMS幅度。

Fig4-2.png

如果以dB表示则:(THD+N)dB = 20log10(THD+N)。比如THD+N = 0.0001%,则(THD+N)dB = -120 dB。在描述一个系统的THD+N值时,还必须指明该THD+N值是在什么情况下测得的,包括测试信号(基波)的频率、谐波和噪声计算的频率范围、信号的幅度、以及对噪声和失真是否按听感进行了加权(A、B、C、ITU-R 468)等。

3、信纳比SINAD(Signal to Nosie and Distortion Ratio)的定义
信纳比SINAD通常定义为信号总功率与各次谐波功率及噪声功率之和的比值的开方,以dB表示为:

Fig4-3.png

其中,Vtotal为信号(包括基波、各次谐波和噪声)的总RMS幅度,V1为基波的RMS幅度。

4、信噪比SNR(Signal to Nosie Ratio)的定义
信噪比SNR通常定义为信号基波功率与噪声功率的比值的开方,以dB表示为:
其中,Vtotal为信号(包括基波、各次谐波和噪声)的总RMS幅度,Vi为第i次谐波的RMS幅度(包括基波),N为计算所用到的最高次谐波的次数。

Fig4-4.png

5、有效位数ENOB (Effective Number of Bits)
有效位数ENOB可直接由SINAD按下式推出:ENOB = (SINAD-1.76 dB) / 6.02。注意此式是在满程情况下测试的。如果被测的ADC或DAC的测试信号低于满程,则SINAD和ENOB会偏小,可通过将ENOB的结果加上下式来推算满程的ENOB:

Fig4-5.png


6、噪声电平NL(Noise Level)


噪声电平在这里定义为总的噪声的RMS幅度。

7、无寄生动态范围SFDR(Spurious Free Dynamic Range)

无寄生动态范围SFDR定义为第一个谱峰与第二个谱峰的功率比的开方,用dB表示。注意:第二谱峰不一定与基波构成谐波关系。




上述的总谐波失真THD等参数的计算式不算复杂,采用数字信号分析的方法貌似很容易,但要测准却不像表面上看起来的那么容易,涉及到多个参数的选择以及为什么要这样选择的问题,一个参数不对,全盘皆错。这包括测试信号频率的选择、采样频率的选择、采样位数的选择、采样长度的选择、FFT点数的选择、窗函数的选择、测量带宽的选择等。下面就THD失真测量中可能遇到的各种问题进行说明。



 楼主| 发表于 2019-3-1 00:44 | 显示全部楼层
三. 如何避免或减小频谱泄漏


3.1 什么是频谱泄漏

要测准总谐波失真THD首先要解决FFT最常见又最令人头痛的频谱泄漏问题。对一个信号做快速傅里叶变换(FFT)就必然要对其在时域进行截断,然后在有限长度的数据上进行分析。FFT算法假定在所截取的数据之外的信号正好是所截取数据的周期延拓,也就是所截取数据的周期性重复。如果一个FFT数据段正好包含了被测信号的整数个周期,则经过周期延拓出来的信号将与被测信号的实际情况完全一致,这时得到的频谱将真实反映原信号的频谱。否则在周期延拓的边界处,信号将出现不连续的现象,这与被测信号的实际情况不完全一致,反映到频谱上,就会出现所谓的频谱泄漏现象,其结果是本来应该属于某个单频点的能量向该频点以外的频点扩散开来。(关于频谱泄漏的更详细的解释,从时域乘以有限长度的矩形窗,等于频域卷积SINC函数,然后再频域抽样等就不在这里展开了,书上到处都是)。在失真测量中,频谱泄漏会造成所测试的正弦信号的基波和谐波幅度不准确,噪声成分增大,测得的结果完全不准确。

下图是一个存在严重频谱泄漏的例子。[采样频率] = 48 kHz,[信号频率] = 1 kHz(由于软件生成的理想信号),[FFT点数] = 32768,[信号周期数] = 1000 / 48000 × 32768 = 682.6667,[采样位数] = 24,[窗函数] = 矩形窗,FFT数据段尾部无补零(因为采样点数为48000,大于FFT点数32768,所以不用补零)。由于FFT数据段中包含的[信号周期数]不为整数,所以不是整周期采样,频谱泄漏严重,从图中可看到各次谐波谱线完全被泄漏的频谱所淹没,测得的结果为:THD = 0.1664 % (-55.85 dB), THD+N = 14.2383% (-16.93 dB),SINAD = 16.93 dB,SNR = 16.84 dB,ENOB = 2.52 Bit,很明显这些测量结果对于一个24位完全理想的正弦波是完全错误的。


Fig1.png

图1  非整周期采样+矩形窗(不加窗)导致严重频谱泄漏

 楼主| 发表于 2019-3-1 00:53 | 显示全部楼层
本帖最后由 TestGuru 于 2019-3-1 01:15 编辑

3.2 频谱泄漏的解决方法
3.2.1整周期采样或称为相干采样(Coherent Sampling)法

避免频谱泄漏的方法是之一是采用所谓的整周期采样或称为相干采样(Coherent Sampling),就是要保证FFT数据段的采样时间正好是信号周期的整数倍,用公式表达为:[采样频率]/[信号频率]= [FFT点数]/ [信号周期数]。其中FFT点数取为2的N次方。为了避免重复采样,即避免在所采集到的各个信号周期中出现任何两个周期采集到同样一组数据的情况,这个[信号周期数]最好是除开2以外的质数。

下图是一个采用整周期采样的例子。[采样频率] = 48 kHz,[信号频率] = 1000.48828125 Hz(由于软件生成的理想信号),[FFT点数] = 32768,[信号周期数] =  1000.48828125 / 48000  × 32768 = 683,[采样位数] = 24,[窗函数] = 矩形窗,FFT数据段尾部无补零(因为采样点数为48000,大于FFT点数32768,所以不用补零)。由于FFT数据段中包含的[信号周期数]为整数,属整周期采样,无频谱泄漏,测得的结果为:THD = 0.0000032 % (-149.80 dB), THD+N = 0.0000032 % (-150.00 dB),SINAD = 150.00 dB, SNR = 1000 dB (溢出,因理想正弦波噪声几乎为零),  ENOB = 24 Bit,这些测量结果反映了软件在24位整周期采样情况下所能测得的最理想的数据,所测得THD和THD+N远小于常用的HIFI音频设备的失真与噪声,说明这些参数选择可用于高保真音频设备的测量,它们从软件层面保证了这些测量的准确性。那么为什么完全理想的正弦波仍然能测到失真和噪声?其实这些残余的失真与噪声主要是量化噪声以及数值计算的残留误差造成的,这将在后面详述。

Fig2.png
图2  整周期采样 + 矩形窗(不加窗)无频谱泄漏

 楼主| 发表于 2019-3-1 00:58 | 显示全部楼层
本帖最后由 TestGuru 于 2019-3-1 01:23 编辑

3.2.2加窗法


当无法实现整周期采样时,要减小频谱泄漏,就必须采取给截断后的数据加窗的方法。此法要求FFT数据段包含的信号周期数目不能过少,采样点数越多,包含的信号周期越多,周期延拓的边界不连续部分占所采集的数据的比例越小,对频谱泄漏的抑制效果越好。


对于THD测量,应选取能最大限度地将信号能量集中于主谱线附近的,就是主瓣比较大的大头窗,推荐Kaiser 6~ Kaiser 10。


下图是在图1的基础上,将矩形窗改为能极大压制频谱泄漏的Kaiser 8窗,其它参数完全不变测得的,其结果为:THD = 0.0000055 % (-145.23 dB), THD+N = 0.0000046% (-146.76 dB),SINAD = 146.76 dB, SNR = 1000 dB (溢出,因理想正弦波噪声几乎为零,且量化噪声能量在此参数下全都汇聚到谐波频率上,这将在后面介绍), ENOB = 24 Bit,这些测量结果反映了软件在24位非整周期采样且加窗分析的情况下所能测得的最理想的数据,所测得THD和THD+N远小于常用的高保真HIFI音频设备的失真与噪声,说明这些参数选择可用于高保真音频设备的测量,它们从软件层面保证了这些测量的准确性。同样地,为什么完全理想的正弦波仍然能测到失真和噪声?这些残余的失真与噪音主要是量化噪声以及数值计算的误差造成的,这将在后面详述。

Fig3.png
图3  非整周期采样 + Kaiser 8窗可极大减小频谱泄漏

仔细观察图3的1kHz的主谱线比图2略低也略宽,这是因为图3虽然采用了加窗的办法来抑制频谱泄漏,但它只是将泄漏的能量聚集在主谱线附近的多条谱线上以避免向更远的地方泄漏,却无法象图2那样将其汇聚到一条单一的谱线上,不过这已经足以通过软件算法来实现精准计算了。

 楼主| 发表于 2019-3-1 01:00 | 显示全部楼层
3.2.3选择整周期采样还是选择采集多个信号周期再加窗?


正如前面的图2和图3两个例子,如果条件允许,两种方法都可以用,结果差不多。如果实际测量中存在某些限制,则需要做出正确选择。比如说,如果采样点数有限,无法在一个FFT段内采集较多的信号周期数,则应选择整周期采样,因为即使只采集一个整周期,也能正常工作。而当采集的周期数目较少时,加窗法的误差会比较大。


如果测量仪器的ADC和DAC不共用同一采样时钟,则应采用加窗法来测量,因为两个时钟的不同步抖晃(Jitter)同样会造成一定程度的频谱泄漏。那么满足整周期采样条件时,能将矩形窗(即:不加窗)改为比如Kaiser 6窗吗?当然可以,测得的THD和THD+N等参数不会有太大的区别,只是这时加窗反而会造成轻微的频谱泄漏,信号能量不会集中于一条单一的谱线上,而是集中到主谱线周围相邻的几条谱线上,当然这仍然可通过软件来实现精准测量。

 楼主| 发表于 2019-4-12 13:17 | 显示全部楼层
本帖最后由 TestGuru 于 2019-4-12 13:35 编辑

四、如何避免将量化噪声误测为谐波失真

4.1  避免采样频率与信号频率之比为整数或可相约

ADC/DAC设备采集/输出正弦波过程中产生的量化噪声容易被误认为是在0~1/2采样频率之间均匀分布的白噪声。其实不一定,量化噪声的频谱与信号频率可能产生严重相关。当采样频率与信号频率之比为整数时,量化噪声会被周期化而会汇聚到信号的谐波频率上,造成测得的THD和SFDR严重超高。前面的图3显示的就是24位量化噪声聚集到各谐波频率上的情况,而其它频点处几乎看不到任何噪音。这时测得的THD就会虚假地偏高。图3的采样频率与信号频率之比为48000/1000=48(整数)。如果将信号频率改为997,则采样频率与信号频率之比变为48000/997=48.144433(非整数且48000与997不可相约),这就大大减小了量化噪声与信号频率之间的相关,很大程度上白化了量化噪音,参考下图。比较图3和图4可见,图4中的底噪抬高了,但谐波失真大幅下降,THD从图3中的0.0000055 % (-145.23 dB)降低到图4中的0.0000033 % (-149.70 dB),THD+N则从图3中的0.0000046% (-146.76 dB)降低到图4中的0.0000028% (-151.09 dB)。需要说明的是,这里的THD+N竟然比THD还小,其原因可从前述的公式解释,THD反映的是[谐波功率]/ [基波功率]之比的开方,而THD+N是[谐波功率+噪声功率]/[基波功率+谐波功率+噪声功率]之比的开方,当噪声功率极小时(不妨假设为0),按公式THD+N是有可能大于THD的,不过这种特殊情况在实际测量中由于噪声的存在而几乎不会出现。

Fig4.png


图4  采样频率与信号频率之比不为整数(48000/997=48.144433)以白化量化噪声(24位)

如果说24位量化噪声与信号频率的相关情形还不算太严重,在实际测量中甚至可以忽略不计,那么当采样位数为16位或8位时,情况就愈加严重了。下面两图是采样位数为16位的情形,前一个图的采样频率与信号频率之比为48000/1000=48,后一个图为48000/997=48.144433。从前者到后者,THD从0.0013751 % (-97.23 dB)降低到0.0009004 % (-100.91 dB),THD+N则从0.0013751 % (-97.23 dB)略升到0.0014608 % (-96.71 dB)。
Fig5.png
图5  采样频率与信号频率之比为整数(48k/1k=48)时量化噪声变为谐波失真(16位)
Fig6.png
图6  采样频率与信号频率之比不为整数(48000/997=48.144433)以白化量化噪声(16位)

下面两图是采样位数为8位的情形,前一个图的采样频率与信号频率之比为48000/1000=48,后一个图为48000/997=48.144433。从前者到后者,THD从0.2767016 % (-51.16 dB)降低到0.0910077 % (-60.82 dB),THD+N则从0.2767005 % (-51.16 dB)略升到0.2918477 % (-50.70 dB)。

Fig7.png
图7  采样频率与信号频率之比为整数(48k/1k=48)时量化噪声变为谐波失真(8位)
Fig8.png
图8  采样频率与信号频率之比不为整数(48000/997=48.144433)以白化量化噪声(8位)

可见当采样位数低的时候,测量THD时更应该避开采样频率为信号频率整数倍或两者可相约(将在后面介绍)的情形,以避免将量化噪音误为谐波失真。这一点在实际测量中,当电路的本底噪音很低的时候尤其重要。当电路的本底噪音高于±0.5 bit的采样位数时,由于抖动(Dithering)效应,可大大降低量化噪音与输入信号相关性,对量化噪声起到白化作用。

前面只列举了采样频率与信号频率之比为整数倍时量化噪声的能量全部聚集到谐波频率处的情形,实际上它只是下面更通用的表述中的一个特例,即如果采样频率fs与信号频率f之间存在一个最大公约数fM,则量化噪声的能量将全部汇聚到fM及其谐波频率上。而且,对于单频信号,当采样频率fs与信号频率f之比为偶数时,量化噪声仅含奇次谐波;否则量化噪声含奇次和偶次谐波。fs、f、fM不一定为整数。

在前面的fs=48000Hz,f=1000Hz例子中,fs/f=48000/1000=48/1,即:fM=1000Hz,因此量化噪声的能量全部汇聚到1000Hz及其谐波上,且因为fs/f=48000/1000=48为偶数,因此仅含奇次谐波,这由前面的相关图片可以看出。

而在前面的fs=48000Hz,f=997Hz例子中,由于fs与f互质而不可约,即:不存在大于1的最大公约数,因此量化噪声的能量在频率轴上基本上是均匀分布的,不会产生完全向某些频率汇聚的现象。

下图给出一个当采样频率fs与信号频率f之比为奇数时,量化噪声含奇次和偶次谐波的例子。此例子中,fs=44100Hz,f=100Hz,fs/f=44100/100=441(奇数),因此量化噪声的能量全部汇聚到100Hz及其奇次和偶次谐波上,这由下图可以看出。

Fig8-1.png
图8-1  采样频率与信号频率之比为奇数(44100/100=441)时,量化噪声能量向信号的奇次和偶次谐波汇聚

下图给出一个采样频率fs与信号频率f可以相约的例子,fs=44100Hz,f=250Hz,fs/f=44100/250=882/5,即:fM=50Hz,因此量化噪声的能量全部汇聚到50Hz及其谐波上,这由下图可以看出。注意:量化噪声频率50Hz的部分谐波频率与测试信号频率250Hz及其谐波重合。就是说有部分量化噪声能量会被测量为谐波失真。

Fig8-2.png
图8-2  采样频率fs=44100Hz,信号频率f=250Hz,最大公约数:fM=50Hz,量化噪声能量向50Hz及其谐波汇聚

可见当采样频率与信号频率之间存在一个大于1的最大公约数时,量化噪声也会部分或全部汇聚到信号的谐波频率上,从而是造成THD虚高。最大公约数越大,这种情况越严重,极限情况就是采样频率与信号频率之比为整数,最大公约数等于信号频率本身。最大公约数越小,这种情况越轻微。如果采样频率和信号频率皆为整数,极限情况就是采样频率与信号频率之间不可约(互质),最大公约数等于1。

4.2 为测试信号添加抖动(Dithering)

当采样频率与信号频率之比为整数或可相约时,尤其当测试信号幅度较小因而量化噪声所占比重相对较高的情况下,可以在单频正弦测试信号上叠加峰值为±0.5~1bit的白噪声,来尽量白化量化噪声,以降低THD和SFDR。下图是一个采样位数为8的理想正弦波,与图7一样,采样频率与信号频率之比为整数48000/1000=48,不同的是下图中采用软件多音合成方式在理想正弦波的基础上添加了峰值为±1 bit的白噪声。与图7相比,THD从0.2767016 % (-51.16 dB)大幅降低到0.0753697 % (-62.46 dB),THD+N则从0.2767005 % (-51.16 dB)升到0.4113034 % (-47.72 dB)。

Fig9.png
图9 采样频率与信号频率之比为整数(48k/1k=48)时添加抖动以白化量化噪声(8位)

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-23 01:24 , Processed in 0.069931 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表