一种使用Python来分析混合模式信号链中噪声的简单方法

  作者:ADI系统设计/架构工程师Mark Thoren和ADI SW系统设计工程师Cristina Șuteu 时间:2023-02-13来源:电子产品世界

编者按:涉及对真实世界进行敏感测量的应用都是从准确、精密的低噪声信号链开始。现代高度集成的数据采集器件通常可以直接连接到传感器输出,在单个硅器件上执行模拟信号调理、数字化和数字滤波,这极大地简化了系统电子组成。但是,要使这些现代器件发挥出色性能,并对它们进行调试,仍然需要深入了解信号链的噪声源和噪声限制滤波器。


实验室噪声源

一个校准过的噪声发生器就像是“世界上最糟糕的传感器”,它模拟传感器的噪声,但实际上不做任何检测。这种发生器允许直接测量信号链的噪声响应。图18所示的电路使用1MΩ电阻作为127nV/√Hz(在室温下)噪声源,具有“合格”的精度和带宽。虽然精度只是合格,此方法也有其优势:

■   它基于第一原则,因此在某种意义上可以作为一种未校准的标准。

■   它是真正随机的,不含重复的模式。

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

1676276211407579.png

图18 一个1MΩ电阻作为可预测的噪声源,然后通过低噪声运算放大器放大到可用的水平

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

1676276263307056.png

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

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

虽然Scopy可用于单次可视测量,但其功能可以通过SciPy周期图函数轻松复制。使用libm2k10和Python捆绑程序从ADALM2000收集原始数据,进行最低限度的处理,以去除直流内容(否则会泄漏至低频率仓),并扩展至nV/√Hz。此方法如图20所示,适用于任何数据采集模块,只要采样速率是固定的、已知的,且数据可以格式化为电压向量。

1676276282349716.png

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

我们现在有了已知的噪声源和测量该噪声源的方法,它们都可以用来验证信号链。

在LTspice中模拟信号链

Ltspice®®是一款免费的通用模拟电路模拟器,可模拟信号链设计。它可以执行瞬态分析、频域分析(交流扫描)和噪声分析,分析结果可以导出并使用Python集成到混合信号模型中。

图21显示模拟噪声发生器的噪声模拟,与实验结果高度一致。使用与OP482的属性相似的运算放大器进行模拟。

1676276302420396.png

图21 对实验室噪声源的LTspice模拟显示出与被测电路大致相同的可用带宽

在模拟的时候,图22的电路噪声并不重要,它在某些带宽(相关信号所在的带宽)中是恒定的,而在高于这些带宽的带宽中,它会按约一阶低通响应降低。由于高阶模拟滤波或有源元件本身,这种技术在模拟非平坦本底噪声时非常有用。自动归零放大器(例如LTC2057)中常见的噪声山形就是一个典型示例,请参见图23。

1676276320515611.png

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

在Python中导入LTspice噪声数据用于频域分析涉及到设置模拟命令,以模拟分析向量中的具体频率。在本例中,噪声模拟的最大频率设置为2.048MHz,分辨率为62.5Hz,对应于4.096MSPS采样率下的第一奈奎斯特区。图23显示同相增益为10时对LTC2057的模拟、模拟输出和导出的数据格式。

image.png

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

为了确定给定频带的噪声对信号(信噪比)的影响,在相关带宽上集成噪声的和的平方根。在LTspice中,可以通过设置绘图界限来集成绘制参数,然后单击参数标签。整个2.048MHz模拟过程的总噪声为32µV rms。在Python中实现此操作的函数如图24所示。

1676276360675340.png

图24 用于实现和的平方根的Python代码

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

生成测试噪声

它在纯粹的模拟噪声发生器的功能上进行扩展,非常适合用于生成不止是扁平,而且是任意的噪声剖面——平坦的噪声带、粉红噪声,或模拟某些放大器的峰值的噪声山形。由图25所示的半谱代码块生成的时间序列从所需的噪声谱密度(可以手动生成,或从LTspice模拟中获取)和时序序列的采样速率开始,然后生成可以发送至DAC的电压时间序列值。

1676276401514988.png

图25 生成任意噪声剖面的Python代码

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

1676276422629646.png

图26 使用ADALM2000验证任意噪声

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

1676276440771683.png

图27 Scopy光谱分析仪被用于验证任意噪声发生器。噪声带之间的深凹痕展示了分析仪的本底噪声,表明可以准确地生成任意噪声剖面

该噪声发生器可与纯粹的模拟发生器一起使用,用于验证信号链的抑制特性。

模拟和验证ADC噪声带宽

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

考虑滤波器的等效噪声带宽(ENBW)通常是有用的,包括ADC的内置滤波器。ENBW是扁平通带“砖墙”滤波器的带宽,该滤波器允许通过与非扁平滤波器相同数量的噪声。常见示例包括一阶RC滤波器的ENBW,其公式为:

1676276464353180.png

其中fC表示该滤波器的截止频率。如果对1kHz一阶低通滤波器的输入和1.57kHz砖墙低通滤波器的输入应用宽带噪声(从“直流到可见光”),输出端的总噪声功率将是相同的。

图28中的ENBW示例代码块接受滤波器幅度响应,然后返回有效噪声带宽。计算并使用单极性滤波器的幅度响应来验证ENBW = fC × π/2关系。

1676276491911888.png

图28 Python代码示例,用于计算有效噪声带宽

此函数可用于计算任意滤波器响应的ENBW,包括AD7124的内部滤波器。可以使用与之前的50Hz/60Hz拒波滤波器示例类似的方法来计算AD7124 sinc4滤波器的频率响应和128SPS采样速率。arb_anbw函数返回约31Hz的ENBW。

ADALM2000噪声发生器可用于验证这一结果。设置测试噪声发生器生成1000µV/√Hz的频段会导致约5.69mV rms的总噪声,测量出的总噪声约为5.1mV rms。示波器捕获的ADC输入信号在ADC输出数据旁边绘出,如图29所示。注意,测量到的峰峰值噪声为426mV,而ADC的峰峰值噪声约为26mV。虽然在真实的精密信号链中,是无法实现如此高的噪声水平的(虽然希望如此),但本练习表明,可以将ADC的内部滤波器作为信号链中的主要带宽限制元件,从而降低噪声。

1676276516652534.png

图29 1mV/√Hz噪声带被驱动进入AD7124-8输入。很明显能够看到,噪声出现定量降低;ADC输入上的426mV峰峰值噪声会导致ADC输出上出现约25mV峰峰值噪声。按照给出的ADC滤波器的噪声密度为1mV/√Hz,ENBW为31Hz,5.1mV rms总输出噪声非常接近预计的5.69mV rms

结论

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

如果单独来看,本教程中详细介绍的技术并不新颖。但是,为了实现一个合适的系统,需要一组基本的、易于实现的低成本技术,以实现信号链模拟和验证。即使制造商继续提供性能更好的部件,但这些部件总是存在一定的限制,我们必须意识到这一点。这些技术不仅可以用于在构建混合模式信号链之前验证部件,还可以用于识别现有信号链中的设计错误。

参考资料

1 “转换器连接教程。”ADI公司,维基百科,2021年1月。

2 ADI公司教育工具库。Zenodo,2021年7月。

3 Pauli Virtanen、Ralf Gommers等。“SciPy 1.0:在Python中进行科学计算的基本算法。”Nature Methods,17(3),2020年2月。

4 Steven W. Smith。面向科学家和工程师的数字信号处理指南。California Technical Publishing,1999。

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

6 Walt Kester,“MT-001:揭开公式“SNR = 6.02N + 1.76dB”的神秘面纱,以及为什么我们要予以关注。”(ADI公司,2009年)

7 Charles R. Harris、K. Jarrod Millman等。 “使用NumPy的阵列编程。”Nature,585,2020年9月。

8 “pyadi-iio:适用于IIO驱动器的器件特定的Python接口。”ADI公司,维基百科,2021年5月。

9“Scopy。”ADI公司,维基百科,2021年2月。

10 “什么是Libm2k?”ADI公司,维基百科,2021年10月。

11 Walt Kester,“MT-017:过采样插值DAC。”(ADI公司,2009年)

致谢

■   感谢Jesper Steensgaard,从LTC2378-20开始,他推动了信号链设计思维范式的转变。

■   感谢Travis Collins,他架构了Pyadi-iio(还有许多其他架构)。

■   感谢软件团队经理Adrian Suciu,他推动了libm2k的开发。

归属

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

关于作者

Mark Thoren于2001年加入凌力尔特(现为ADI公司的一部分),担任应用工程师,负责精密数据转换器支持工作。在此期间,他曾担任与混合信号应用相关的多个职位,包括开发评估系统、培训、刊发技术资料,以及提供客户支持。Mark现在是ADI公司系统开发团队的一名系统工程师,负责开发参考设计和ADI大学计划。Mark拥有缅因大学奥罗诺分校颁发的农业机械工程学士学位和电子工程硕士学位。

Cristina Șuteu于2019年加入ADI公司的系统开发团队,担任系统应用工程师。在ADI公司工作期间,她致力于改善软件,分别担任过技术刊物发行及培训等多个不同职位,并为ADI大学计划提供学习教材,包括ADALM2000视频系列。Cristina拥有罗马尼亚布加勒斯特大学颁发的电子工程学士学位,以及布加勒斯特大学和法国波尔多大学联合颁发的信号和图像处理硕士学位。

1 2

关键词: Python 混合模式信号链 噪声

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版