转换器连接教程:Python分析混合模式信号链中噪声的方法

转换器连接教程:Python分析混合模式信号链中噪声的方法,第1张

本教程是转换器连接教程的延续。1,2它将关注单个信号链元素的噪声,并使用 Python/SciPy 3和 LTspice®对其进行建模。然后,它将通过 libm2k 和 Linux ®工业输入输出 (IIO) 框架使用 Python 驱动ADALM2000多功能 USB 测试仪器来验证结果。所有源代码和其他讨论都可以在配套的主动学习实验室练习中找到。

混合模式信号链无处不在。简而言之,任何将现实世界的信号转换为电表示,然后进行数字化的系统都可以归类为混合模式信号链。在链上的每一点,信号都会以各种方式劣化,通常可以将其表征为某种形式的失真或附加噪声。一旦进入数字域,数字化数据的处理也并不完美,但至少从所有实际目的来看,它不受许多影响模拟信号的因素的影响——元件容差、温度漂移、来自相邻信号的干扰、或电源电压变化。

随着行业不断突破物理极限,有一点是确定的:仪器仪表的模拟和混合信号组件总是有改进的空间。如果市场上出现的模数转换器 (ADC) 或数模转换器 (DAC) 在速度、噪声、功率、精度或价格方面提升了最先进的技术水平,制造商将很乐意应用它现有的问题,然后要求更多的改进。然而,为了为您的应用程序实现最佳采集系统,了解组件的限制并相应地选择它们是至关重要的。

通用混合模式信号链

图 1 显示了精密仪器应用的典型通用信号链,具有物理输入和数字输出。有许多关于 ADC 的背景参考资料,4并且大多数读者会感觉到 ADC 在某个时间点对输入信号进行采样(或测量某个观察时间内信号的平均值)并生成该信号的数字表示— 通常是一个二进制数,其值介于 0 和 2 (N – 1)之间,其中 N 是输出字中的位数。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 1. 在混合模式信号链中,温度、光强度、pH、力或扭矩等一些物理现象被转换为电气参数(电阻、电流或直接转换为电压)。 然后,该信号被放大、低通滤波,并由 ADC 数字化,其中可能包括内部数字滤波。,第2张

图 1. 在混合模式信号链中,温度、光强度、pH、力或扭矩等一些物理现象被转换为电气参数(电阻电流或直接转换为电压)。然后,该信号被放大、低通滤波,并由 ADC 数字化,其中可能包括内部数字滤波。

ADC 噪声源

虽然图 1 中有几个噪声源,但经常被忽略或过分强调的一个是 ADC 数字输出中的位数。从历史上看,ADC 的位数被认为是最终的品质因数,其中假设 16 位转换器比 14 位转换器好 4 倍。5但在现代高分辨率转换器的情况下,可以放心地忽略位数。注意信号链设计的一般原则:

“一级的输入噪声应该比前一级的输出噪声低一些。”

与任何信号链一样,ADC 中的一个噪声源通常占主导地位。因此,如果将无噪声信号应用于 N 位 ADC:

  • 导致单个输出代码或两个相邻输出代码,然后量化噪声占主导地位。信噪比 (SNR) 可以不大于 (6.02 N + 1.76) dB。6
  • 导致许多输出代码的高斯分布,然后热噪声源占主导地位。SNR 不大于:
转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 1,第3张

在哪里:

V IN (pp) 是满量程输入信号。
σ 是以电压为单位的输出代码的标准偏差。

非常高分辨率的转换器,例如AD7124-8,稍后将用作示例,很少受到量化噪声的限制;热噪声在所有增益/带宽设置中占主导地位,短路输入总是会产生相当高斯分布的输出代码。图 2 显示了 AD7124-8 的接地输入直方图,24 位 Σ-Δ ADC,内部可编程增益放大器 (PGA) 分别设置为 1 和 128。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 2. 在 PGA 增益为 1(左)时,AD7124 输出噪声中有 13 个代码,标准偏差约为 2.5 个代码。 虽然量化是可见的,但热噪声更为显着。 在 PGA 增益为 128(右)时,表示了 187 个代码,量化噪声微不足道。 截断一个或两个最低有效位(双倍或四倍量化噪声)不会导致信息丢失。,第4张

图 2. 在 PGA 增益为 1(左)时,AD7124 输出噪声中有 13 个代码,标准偏差约为 2.5 个代码。虽然量化是可见的,但热噪声更为显着。在 PGA 增益为 128(右)时,表示了 187 个代码,量化噪声微不足道。截断一个或两个最低有效位(双倍或四倍量化噪声)不会导致信息丢失。

ADC 噪声建模和测量

对热噪声受限 ADC 的噪声进行建模非常简单。如果噪声“表现良好”(高斯,如图 2 所示)并且在 ADC 的输入范围内保持恒定,则可以使用 NumPy 的7随机正态函数对 ADC 的时域噪声进行建模,然后通过取标准偏差进行验证,如图 3 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 3. 使用 NumPy 对高斯噪声建模。,第5张

图 3. 使用 NumPy 对高斯噪声建模。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 4. ADALM2000 是一款多功能 USB 测试仪器,具有两个通用模拟输入和两个输出,采样率分别为 100 MSPS 和 150 MSPS。 它可以用作测量ADC噪声带宽和滤波器响应的简单信号源。 运行支持 AD7124 设备驱动程序的内核的 Raspberry Pi 4 充当 AD7124 和主机之间的简单桥梁。,第6张

图 4. ADALM2000 是一款多功能 USB 测试仪器,具有两个通用模拟输入和两个输出,采样率分别为 100 MSPS 和 150 MSPS。它可以用作测量ADC噪声带宽和滤波器响应的简单信号源。运行支持 AD7124 设备驱动程序的内核的 Raspberry Pi 4 充当 AD7124 和主机之间的简单桥梁。

AD7124 设备驱动程序属于行业标准 IIO 框架,该框架具有完善的软件 API(包括 Python 绑定)。应用程序代码可以在本地(在 Raspberry Pi 上)或通过网络、串行或 USB 连接在远程机器上运行。此外,pyadi-iio 8抽象层负责与 IIO 设备接口所需的大部分样板设置,大大简化了软件接口。图 5 说明了如何打开与 AD7124-8 的连接、对其进行配置、捕获数据块,然后关闭连接。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 5. AD7124-8 基本数据采集。,第7张

图 5. AD7124-8 基本数据采集

与 AD7124-8 建立通信后,可以执行极其简单但非常有用的测试:直接测量输入噪声。简单地将 ADC 的输入短路并查看 ADC 代码的最终分布是表征信号链设计的重要步骤。AD7124输入模式设置为单极性,所以只有正值有效;图 6 所示的测试电路确保输入始终为正。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 6. 电阻分压器用于在 AD7124-8 上产生 1.25 mV 偏置,第8张

图 6. 电阻分压器用于在 AD7124-8 的输入端产生 1.25 mV 偏置,克服 15 µV 的最大失调电压并确保 ADC 读数始终为正。

图 7 显示了两个 1024 点测量。下面的(蓝色)迹线是在最初通电后立即拍摄的。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 7. 两个 AD7124-8 数据采集是在施加 1.25 mV 偏压的情况下进行的。 下面的迹线显示了上电后电路升温时的初始漂移。 上部曲线显示半小时预热时间后读数稳定。,第9张

图 7. 两个 AD7124-8 数据采集是在施加 1.25 mV 偏压的情况下进行的。下面的迹线显示了上电后电路升温时的初始漂移。上部曲线显示半小时预热时间后读数稳定。

“漂移”可能是由于多种因素造成的——内部参考升温、外部电阻升温(并因此漂移)或寄生热电偶,其中稍微不同的金属会在存在热梯度的情况下产生电压。预热后测得的噪声约为 565 nV rms——与数据表噪声规范相当。

将 ADC 噪声表示为密度

如果所有元素都包括噪声密度规格,模拟信号链设计的一般原则(一个阶段的输入噪声应该略低于前一级的输出噪声)是一个简单的计算 - 就像大多数指定良好的传感器和几乎所有放大器做。

与放大器和传感器不同,ADC 数据表通常不包括噪声密度规范。将 ADC 的噪声表示为密度,可以直接将其与模拟信号链中最后一个元件(可能是 ADC 驱动器级、增益级或传感器本身)输出端的噪声进行比较。

ADC 的内部噪声必然会出现在 DC 和采样率的一半之间。理想情况下,这种噪声是平坦的,或者至少是可预测的形状。事实上,由于 ADC 的总噪声分布在已知带宽上,因此可以将其转换为可以直接与信号链中的其他元素进行比较的噪声密度。精密转换器通常具有直接给出的总噪声,以伏特 rms 为单位:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 2,第10张

其中 e RMS是总 rms 噪声,根据接地输入直方图的标准偏差计算得出。

使用正弦信号测试和表征的高速转换器通常具有 SNR 规范。如果提供,总 rms 噪声可以计算为:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 3,第11张

其中 ADCp-p 是 ADC 的峰峰值输入范围。

然后可以计算等效噪声密度:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 4,第12张

其中 f S是以样本/秒为单位的 ADC 采样率。

图 7 中的总噪声在预热后为 565 nV,数据速率为 128 SPS。噪声密度约为:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 5,第13张

现在可以将 ADC 直接包含在信号链噪声分析中,从而为优化信号链增益提供指导:

  • 将增益增加到 ADC 前最后一级的噪声密度略高于 ADC 的点,然后停止。无需再费心增加信号链增益——您只是放大了噪声并减小了允许的输入范围。

这与“填充”ADC 输入范围的传统观念背道而驰。如果 ADC 的传递函数存在阶跃或不连续性,则使用更多 ADC 的输入范围可能会有好处,但对于“表现良好”的 ADC(大多数 sigma-delta ADC 和现代高分辨率逐次逼近寄存器 (SAR) ADC),通过噪声进行优化是首选方法。

测量 ADC 滤波器响应

AD7124-8 是一款 sigma-delta ADC,其中调制器产生高采样率但噪声(低分辨率)的模拟输入表示。然后,这些噪声数据由内部数字滤波器过滤,产生较低速率、较低噪声的输出。滤波器的类型因 ADC 而异,具体取决于预期的最终应用。AD7124-8 是通用型的,面向精密应用。因此,数字滤波器响应和输出数据速率是高度可配置的。虽然数据表中明确定义了滤波器响应,但有时可能需要测量滤波器对给定信号的影响。AD7124-8 滤波器响应代码块(参见图 9)通过将正弦波应用于 ADC 输入并分析输出来测量滤波器响应。这种方法可以很容易地适用于测量其他波形——小波和模拟的物理事件。ADALM2000 连接到 AD7124-8 电路,如图 8 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 8. ADALM2000 波形发生器用于生成一系列正弦波频率,允许 AD7124-8,第14张

图 8. ADALM2000 波形发生器用于生成一系列正弦波频率,从而可以直接测量 AD7124-8 的滤波器响应。虽然脚本将正弦波幅度和偏移设置为安全水平,但 1 kΩ 电阻器可在发生故障时保护 AD7124-8。(ADALM2000 输出电压范围为 –5 V 至 +5 V,而 AD7124-8 的绝对最大限值为 –0.3 V 和 +3.6 V。)

AD7124-8 滤波器响应代码块(参见图 9)将设置 ADALM2000 的波形发生器以生成 10 Hz 的正弦波,捕获 1024 个数据点,计算 rms 值,然后将结果附加到列表中。send_sinewave 和 capture_data 是实用函数,它们分别向 ADALM2000 发送正弦波并从 AD7124 接收数据块。2然后,它将逐步检查高达 120 Hz 的频率,然后绘制结果,如图 10 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 9. ADALM2000 的滤波器响应块程序。,第15张

图 9. ADALM2000 的滤波器响应块程序。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 10. AD7124 滤波器响应在 64 SPS、sinc4 模式下的测量显示滤波器,第16张

图 10. AD7124 滤波器在 64 SPS、sinc4 模式下的响应测量显示了滤波器的通带、第一瓣和前两个零点。

虽然测量高衰减值需要更安静且失真更低的信号发生器,但在此设置中前几个主要波瓣的响应很明显。

ADC 滤波器建模

测量 ADC 的滤波器响应的能力是用于台架验证的实用工具。但是,为了完全模拟信号链,需要滤波器模型。许多转换器(包括 AD7124-8)并未明确提供这一点,但可以根据数据表中提供的信息逆向设计一个可行的模型。

请注意,以下仅为 AD7124-8 滤波器的模型;它不是位精确的表示。有关所有保证参数,请参阅AD7124-8 数据手册。

AD7124 的滤波器都具有由各种 sinc 函数组合而成的频率响应(频率响应与 (sin{f}/f) N成正比)。这些过滤器相当容易构建,并且在已知空值时进行逆向工程。

图 11 显示了 AD7124-8 的 10 Hz 陷波滤波器。高阶 sinc3 和 sinc4 滤波器的各种组合也可用。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 11. AD7124-8 10 Hz 陷波滤波器具有 sinc1 幅度响应; 滤波器的脉冲响应只是 100 ms 时间间隔内样本的未加权(矩形)平均值。,第17张

图 11. AD7124-8 10 Hz 陷波滤波器具有 sinc1 幅度响应;滤波器的脉冲响应只是 100 ms 时间间隔内样本的未加权(矩形)平均值。

图 12 所示的同时 50 Hz/60 Hz 抑制滤波器是一个重要的例子。该滤波器旨在强烈抑制来自交流电源线的噪声,即 50 Hz(如欧洲)或 60 Hz(如美国)。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 12. AD7124-8 50 Hz/60 Hz 抑制滤波器响应是 50 Hz sinc3 滤波器和 60 Hz sinc1 滤波器的组合。,第18张

图 12. AD7124-8 50 Hz/60 Hz 抑制滤波器响应是 50 Hz sinc3 滤波器和 60 Hz sinc1 滤波器的组合。

高阶 sinc 滤波器可以通过卷积 sinc1 滤波器生成。例如,卷积两个 sinc1 滤波器(在时间上具有矩形脉冲响应)将产生三角形脉冲响应和相应的 sinc2 频率响应。AD7124 滤波器代码块(参见图 13)生成一个在 50 Hz 处具有零点的 sinc3 滤波器,然后添加一个在 60 Hz 处具有零点的第四个滤波器。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 13. 50 Hz/60 Hz sinc 滤波器的 AD7124-8 代码示例。,第19张

图 13. 50 Hz/60 Hz sinc 滤波器的 AD7124-8 代码示例。

滤波器的最终脉冲(时域)形状如图 14 所示。滤波器系数(抽头)值针对零频率下的单位 (0 dB) 增益进行归一化。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 14. 反复卷积矩形脉冲响应产生三角形,然后是高斯式脉冲响应。,第20张

图 14. 反复卷积矩形脉冲响应产生三角形,然后是高斯式脉冲响应。

最后,可以使用 NumPy 的 freqz 函数计算频率响应,如图 16 所示。响应如图 15 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 15. 将 sinc3、50 Hz 陷波滤波器与 sinc1、60 Hz 滤波器进行卷积会产生一个复合响应,该响应强烈抑制 50 Hz 和 60 Hz。,第21张

图 15. 将 sinc3、50 Hz 陷波滤波器与 sinc1、60 Hz 滤波器进行卷积会产生一个复合响应,该响应强烈抑制 50 Hz 和 60 Hz。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 16. 带有 sinc 60 Hz 滤波器的 sinc3 50 Hz 陷波滤波器的 AD7124-8 代码示例。,第22张

图 16. 带有 sinc 60 Hz 滤波器的 sinc3 50 Hz 陷波滤波器的 AD7124-8 代码示例。

电阻是徒劳的:一个基本的传感器限制

所有传感器,无论多么完美,都有一些最大输入值(以及相应的最大输出,可能是电压、电流、电阻,甚至是刻度盘的位置)和有限的本底噪声——输出端“摆动”甚至存在如果输入完全静止。在某些时候,具有电输出的传感器将包括一个具有有限电阻(或更一般地,阻抗)的元件,由图 17 中的 R SENSOR表示。这代表了一个无法改进的基本噪声限制——该电阻将产生en(RMS) 伏噪声,至少:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 6,第23张

在哪里:

e N (RMS) 是总噪声。

K 是玻尔兹曼常数 (1.38 e-23 J/K)。

T 是电阻器的绝对温度 (Kelvin)。

F2 和 F1 是感兴趣频带的上限和下限。

将带宽归一化为 1 Hz 表示噪声密度,以 V/√ Hz为单位。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 17. 传感器通常包含一个内部缓冲器,以简化与下游电路的连接。 虽然输出阻抗较低(通常接近 0 Ω),但来自高阻抗传感元件的噪声与信号一起被缓冲。,第24张

图 17. 传感器通常包含一个内部缓冲器,以简化与下游电路的连接。虽然输出阻抗较低(通常接近 0 Ω),但来自高阻抗传感元件的噪声与信号一起被缓冲。

将带宽归一化为 1 Hz 表示噪声密度,以 V/√ Hz为单位。

传感器的数据表可能会指定低输出阻抗(通常接近 0 Ω),但这很可能是一个缓冲级——它可以简化与下游电路的接口,但不能消除信号链早期阻抗引起的噪声。

还有许多其他传感器限制——机械的、化学的、光学的——每一个都有自己的理论限制,其影响可以在以后建模和补偿。但噪音是一种无法做到的缺陷

实验室噪声源

经过校准的噪声发生器充当“世界上最差的传感器”,它可以模拟传感器的噪声,而无需实际感测任何东西。这种发生器允许直接测量信号链对噪声的响应。图 18 所示电路使用 1 MΩ 电阻器作为 127 nV/√ Hz(室温下)噪声源,具有“还可以”的精度和带宽。虽然准确度还可以,但这种方法具有以下优点:

  • 它基于第一原理,因此在某种意义上可以充当未经校准的标准。
  • 它是真正随机的,没有重复的模式。

OP482是一款 超低偏置电流放大器,具有相应的低电流噪声和足够低的电压噪声,1 MΩ 输入阻抗引起的噪声占主导地位。配置增益为 2121,输出噪声为 269 µV/√ Hz。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 18. 1 MΩ 电阻器用作可预测的噪声源,然后由低噪声运算放大器放大到可用水平。,第25张

图 18. 1 MΩ 电阻器用作可预测的噪声源,然后由低噪声运算放大器放大到可用水平。

使用 Scopy GUI 的频谱分析仪,使用 ADALM2000 USB 仪器验证噪声源,如图 19 所示。9

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 19. 基于电阻的实验室噪声发生器的输出具有大约 10 kHz 的可用带宽。,第26张

图 19. 基于电阻的实验室噪声发生器的输出具有大约 10 kHz 的可用带宽。

在所示的分析仪设置下,ADALM2000 本底噪声为 40 µV/√ Hz,远低于噪声源的 269 µV/√ Hz。

虽然 Scopy 对于单一的视觉测量很有用,但可以使用 SciPy 周期图功能轻松复制该功能。原始数据是使用 libm2k 10和 Python 绑定从 ADALM2000 收集的,经过最低限度的处理以去除 DC 内容(否则会泄漏到低频箱中)并缩放到 nV/ √Hz。这种方法如图 20 所示,可以应用于任何数据采集模块,只要采样率是固定的且已知的,并且数据可以格式化为电压矢量。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 20. ADALM2000 的 Python 噪声源测量代码。,第27张

图 20. ADALM2000 的 Python 噪声源测量代码。

我们现在拥有一个已知的噪声源和一种测量该源的方法,这两者都可以用来验证信号链。

在 LTspice 中对信号链进行建模

LTspice ®​​ 是一款免费提供的通用模拟电路仿真器,可应用于信号链设计。它可以执行瞬态分析、频域分析(AC 扫描)和噪声分析,其结果可以使用 Python 导出并合并到混合信号模型中。

图 21 显示了模拟噪声发生器的噪声仿真,与实验结果非常吻合。使用与 OP482 具有相似特性的运算放大器进行仿真。 

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 21. 实验室噪声源的 LTspice 仿真显示与测量电路大致相同的可用带宽。,第28张

图 21. 实验室噪声源的 LTspice 仿真显示与测量电路大致相同的可用带宽。

图 22 的电路噪声对建模来说相当简单,因为它在某些带宽(感兴趣的信号所在的位置)内是恒定的,在该带宽之上它会以大约一阶低通响应滚降。这种技术派上用场的地方是对非平坦本底噪声进行建模,这可能是由于高阶模拟滤波,也可能是有源元件本身。典型的例子是 LTC2057 等自动调零放大器中经常存在的噪声山峰,如图 23 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 22. LTC2057 噪声密度在低频时是平坦的,在 50kHz 处有一个峰值(内部振荡器的一半,第29张

图 22. LTC2057 噪声密度在低频时是平坦的,峰值在 50 kHz(内部振荡器 100 kHz 频率的一半)。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 23. LTspice 用于在 +10 的同相增益配置中模拟 LTC2057 的输出噪声。 LTspice 提供了用于集成噪声的简单工具,但任何模拟结果都可以导出并导入 Python 以进行进一步分析。,第30张

图 23. LTspice 用于在 +10 的同相增益配置中模拟 LTC2057 的输出噪声。LTspice 提供了用于集成噪声的简单工具,但任何模拟结果都可以导出并导入 Python 以进行进一步分析。

在 Python 中导入 LTspice 噪声数据以进行频域分析是一个设置仿真命令的问题,以便仿真分析向量中的精确频率。在这种情况下,噪声仿真设置为最大频率为 2.048 MHz,分辨率为 62.5 Hz,对应于采样率为 4.096 MSPS 的第一奈奎斯特区。图 23 显示了 LTC2057 在 10 的同相增益、仿真输出和导出数据格式下的仿真。

为了确定给定噪声频带对信号的影响(信噪比),噪声在感兴趣的带宽上进行了平方根积分。在 LTspice 中,可以通过设置绘图限制来集成绘图参数,然后控制单击参数标签。整个 2.048 MHz 仿真的总噪声为 32 µV rms。在 Python 中实现此 *** 作的函数如图 24 所示。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 24. 平方根实现的 Python 代码。,第31张

图 24. 平方根实现的 Python 代码。

读入导出的噪声数据并传递给integrate_psd 函数,总噪声为3.21951e-05,非常接近LTspice 的计算。

产生测试噪音

扩展纯模拟噪声发生器的功能,不仅能够产生平坦而且任意的噪声曲线非常有用——平坦的噪声带、粉红噪声或模拟某些放大器中的峰值的噪声山峰。从图 25 中的半频谱代码块生成的时间序列以所需的噪声频谱密度(可以手动生成,或从 LTspice 仿真中获取)和时间序列的采样率开始,然后生成一个时间序列可以发送到 DAC 的电压值。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 25. 生成任意噪声曲线的 Python 代码。,第32张

图 25. 生成任意噪声曲线的 Python 代码。

可以通过 libm2k 脚本控制一个 ADALM2000,然后使用第二个 ADALM2000 和 Scopy GUI 中的频谱分析仪验证噪声分布来验证此功能。ADALM2000 代码片段的推送噪声时间序列(参见图 26)在 ADALM2000 W2 输出上生成四个 1 mV/√ Hz噪声频段(在 W1 上带有一个正弦波,用于双重检查功能)。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 26. 使用 ADALM2000 验证任意噪声。,第33张

图 26. 使用 ADALM2000 验证任意噪声。

图 27 显示了由一个 ADALM2000 产生的四个 1 mV/√ Hz噪声频段。输入向量长 8192 个点,采样率为 75 kSPS,带宽为每点 9.1 Hz。每个频段为 512 点,或 4687 Hz 宽。~20 kHz 以上的滚降是 DAC 的 sinc 滚降。如果 DAC 能够提供更高的采样率,则可以通过插值滤波器对时间序列数据进行上采样和滤波。11

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 27. Scopy 频谱分析仪用于验证任意噪声发生器。 噪声带之间的深凹口暴露了分析仪,第34张

图 27. Scopy 频谱分析仪用于验证任意噪声发生器。噪声带之间的深陷波暴露了分析仪的本底噪声,表明可以准确地生成任意噪声曲线。

该噪声发生器可与纯模拟发生器结合使用,以验证信号链的抑制特性。

建模和验证 ADC 噪声带宽

高于 f S /2 的外部噪声源和杂散音将折回(混叠)到 DC 至 f S /2 区域,并且转换器可能对远远超过 f S /2 的噪声敏感。以LTC2378-20 为例,它具有 1 MSPS 的采样率和 34 MHz 的 –3 dB 输入带宽。虽然在如此高的频率下性能可能不是最好的,但该转换器将数字化超过 68 个奈奎斯特噪声区域并将它们折叠回您的信号之上。这说明了抗混叠滤波器对于宽带 ADC 的重要性。用于精密应用的转换器通常是 sigma-delta(如 AD7124-8)或过采样 SAR 架构,其中输入带宽受设计限制

考虑滤波器的等效噪声带宽 (ENBW) 通常很有用,包括 ADC 的内置滤波器。ENBW 是平坦通带“砖墙”滤波器的带宽,它允许通过与非平坦滤波器相同数量的噪声。一个常见的例子是一阶 RC 滤波器的 ENBW,即:

转换器连接教程:Python分析混合模式信号链中噪声的方法,等式 7,第35张

其中 f C是滤波器的截止频率。如果从“直流到日光”的宽带噪声同时应用于 1 kHz 一阶低通滤波器和 1.57 kHz 砖墙低通滤波器的输入,则输出端的总噪声功率将为相同的。

图 28 中的 ENBW 示例代码块接受滤波器幅度响应并返回有效噪声带宽。计算单极点滤波器的幅度响应并用于验证 ENBW = f C × π/2 关系。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 28. 计算有效噪声带宽的 Python 代码示例。,第36张

图 28. 计算有效噪声带宽的 Python 代码示例。

该函数可用于计算任意滤波器响应的 ENBW,包括 AD7124 的内部滤波器。AD7124 sinc4 滤波器的频率响应,128 SPS 采样率可以通过类似于前面 50 Hz/60 Hz 抑制滤波器示例的方法计算。arb_anbw 函数返回大约 31 Hz 的 ENBW。

ADALM2000 噪声发生器可用于验证该结果。将测试噪声发生器设置为生成 1000 µV/ √Hz的频带应导致总噪声约为 5.69 mV rms,测量结果约为 5.1 mV rms 总噪声。ADC 输入信号的示波器捕获绘制在 ADC 输出数据旁边,如图 29 所示。注意测得的峰峰值噪声为 426 mV,而 ADC 峰峰值噪声约为 26 mV。虽然如此高的 10 使用 Python 分析混合模式信号链中的噪声的简单方法(希望)在实际的精密信号链中是不现实的,但本练习表明,可以依靠 ADC 的内部滤波器充当信号链中的主要带宽限制和降噪元件。

转换器连接教程:Python分析混合模式信号链中噪声的方法,图 29. 1 mV/√Hz 噪声带被驱动到​​ AD7124-8 输入。 噪音的质量降低是显而易见的; ADC 输入处的 426 mV 峰间噪声导致 ADC 输出处的大约 25 mV 峰间噪声。 考虑到 ADC 滤波器的 1 mV/√Hz 噪声密度和 31 Hz ENBW,5.1 mV rms 总输出噪声接近预测的 5.69 mV rms。,第37张

图 29. 1 mV/√ Hz噪声带被驱动到​​ AD7124-8 输入。噪音的质量降低是显而易见的;ADC 输入处的 426 mV 峰间噪声导致 ADC 输出处的大约 25 mV 峰间噪声。考虑到 ADC 滤波器的 1 mV/√ Hz噪声密度和 31 Hz ENBW,5.1 mV rms 总输出噪声接近预测的 5.69 mV rms 。

结论

噪声是任何信号链中的限制因素;一旦噪声污染了信号,信息就会丢失。在构建信号采集系统之前,必须了解应用需求,相应地选择组件,并测试原型电路。本教程提供了一系列可在设计和测试过程中使用的精确建模和测量传感器和信号链噪声的方法。

本教程中详细介绍的技术单独来说并不是什么新鲜事。然而,为了实现一个合适的系统,拥有一组基本的、易于实现的和低成本的技术来实现信号链建模和验证是很有价值的。尽管制造商继续提供性能更高的零件,但始终存在一定的限制,人们必须注意这一点。这些技术不仅可用于在构建混合模式信号链之前验证部件,还可用于识别现有信号链中的设计缺陷。

参考

1  “转换器连接教程。” Analog Devices Wiki,2021 年 1 月。

2  ADI 教育工具库。泽诺多,2021 年 7 月。

3  Pauli Virtanen、Ralf Gommers 等人。“SciPy 1.0:Python 中科学计算的基本算法。”《自然方法》,17(3),2020 年 2 月。

4 史蒂文·W·史密斯。科学家和工程师数字信号处理指南。加利福尼亚技术出版社,1999 年。

5 清满。“ MT-229:量化噪声:方程的扩展推导,SNR = 6.02 N + 1.76。” ADI 公司,2012 年 8 月。

6 沃尔特·凯斯特。“ MT-001:从臭名昭著的公式中解开谜团,'SNR = 6.02N + 1.76dB',以及为什么你应该关心。” 模拟设备公司,2009 年。

7  Charles R. Harris、K. Jarrod Millman 等人。“使用 NumPy 进行数组编程。” 自然,585,2020 年 9 月。

8  “ pyadi-iio:IIO 驱动程序的设备特定 Python 接口。” Analog Devices Wiki,2021 年 5 月。

9  “窥视。” Analog Devices Wiki,2021 年 2 月。

10  “什么是Libm2k?” Analog Devices Wiki,2021 年 10 月。

11 沃尔特·凯斯特。“ MT-017:过采样插值 DAC。” 模拟设备公司,2009 年。

致谢
  • Jesper Steensgaard,他从 LTC2378-20 开始启用/推动了对信号链设计的思考范式转变。
  • Travis Collins,Pyadi-iio 的建筑师(在许多其他方面)。
  • Adrian Suciu,软件团队经理和 libm2k 贡献者。
归因

本文首次出现在 2021 年科学计算与 Python 会议的论文集中,标题为“使用 Python 进行混合模式信号链的分析和验证”。DOI:10.25080/majora-1b6fd038-001。

作者

马克·托伦

Mark Thoren 是 ADI 公司的系统设计/架构工程师。他拥有缅因大学的农业/机械工程学士学位和电气工程硕士学位。马克试图让实验室的工作台储备充足的设备,这些设备是在破碎状态下获得并恢复生机的。

克里斯蒂娜·奥图

CrisTIna Șuteu 于 2019 年加入 ADI 公司的系统开发部门,担任系统应用工程师。在 ADI 工作期间,她为软件改进做出了贡献,在技术出版物和培训中担任过不同的角色,并为 ADI 大学计划提供教育材料,包括 ADALM2000 的视频系列。CrisTIna 拥有罗马尼亚克卢日-纳波卡技术大学的电气工程学士学位,以及与法国波尔多大学合作的克卢日-纳波卡技术大学的信号和图像处理硕士学位。

审核编辑:符乾江

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2425145.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-02
下一篇 2022-08-02

发表评论

登录后才能评论

评论列表(0条)

保存