0 卖盘信息
BOM询价
您现在的位置: 首页 > 电子资讯 >业界动态 > 使用 BlasterAmp——降低规格的兔子洞

使用 BlasterAmp——降低规格的兔子洞

来源: edn
2022-07-26
类别:业界动态
eye 3
文章创建人 拍明芯城

原标题:使用 BlasterAmp——降低规格的兔子洞

  BlasterAmp [1] 在测试各种模数转换器 (ADC) 电路时对我很有用,甚至包括我的数字示波器。虽然我主要设想它来测试微处理器中的集成 ADC,但它甚至可以用于测试 RF ADC。是的,即使是几百兆赫的下采样 ADC 也可以用音频进行测试,因为您总是可以在 ADC 之前进入信号路径并注入基带测试信号。

  这不仅测试 ADC 基本正常运行,而且信号处理代码也基本正常运行。多年来,我看到大量功能不正常的代码被归咎于 ADC “糟糕”。

  测量什么

  确定一个有用的 ADC 指标,让具有不同技术背景的各种人可以轻松使用和理解,这是 BlasterAmp 项目的目标之一。由于 ADC 制造商之间的规范和测量方法令人困惑,很多时候 ADC 似乎仅根据原始数字位数来挑选。

  那将是一个很好的度量,即“位数”(N),或者对于不完美的 ADC,“有效位数”(ENOB),因为每个人都可以可视化该度量。无论如何,这就是每个人的主要目标——在他们的信号处理中拥有一些最小数量的比特。

  相信大家都看过经典的ADC信噪比(SNR)计算[2],

  SNR = 1.76 + 6.02(N)(等式 1)

  其中 SNR 是以 dB 为单位的信噪比,N 是理想的 ADC 位数。

  公式 1 是通过计算完美线性 ADC 的量化误差得出的,因此这是任何完美 N 位 ADC 的最佳 SNR。通过简单的扩展,您可以重新排列方程以求解位数 N,给定测量的 SNR。

  N = (SNR – 1.76) / 6.02 (Eq. 2)

  不幸的是,这就是事情很快变得不清楚的地方。公式 1 源自完美的 ADC,而任何真正的 ADC 都会有线性误差,这会导致谐波失真。此外,任何真正的 ADC 都会有高于最佳情况计算的噪声,并且会抛出一些随机杂散信号以进行良好测量。

  更糟糕的是,一些 ADC 制造商将 SNR 定义为仅测量 ADC 的本底噪声,不包括谐波和随机杂散内容,而另一些制造商将 SNR 定义为信号与下一个最差的单个杂散信号之间的比率。然而,所有无法处理掉的杂散和谐波都必须计入 ADC 的有效分辨率或 ENOB。

  这需要考虑非理想行为的不同测量,大多数制造商将此信号称为包括噪声和失真的信号或简称为 SINAD,

  SINAD = 信号 /(信号 + 失真 + 噪声 + 其他)(等式 3)

  更令人困惑的是,ADC 人们重新定义了自无线电诞生以来一直使用的 SINAD 的经典定义,作为无线电接收器性能的衡量标准 [3],因此请注意不要使用经典的无线电接收器定义或获取被它弄糊涂了。

  这有多难?

  当 Hewlett-Packard 第一次开始制造高性能波形数字化仪时,他们会通过将具有足够点的高纯度正弦波数字化,然后将完美的正弦波曲线拟合到测量数据来计算 ENOB。真实 ADC 数据与完美正弦波之间的差异将是所有失真产物和噪声的总和。

  将该 SINAD 值放入等式 3 并计算 ENOB [3]。该方法的问题在于,它主要需要一个可变频率源,该源可以添加到任何采样率,以获得足够数量的点来忠实地表示正弦波。

  这不是 BlasterAmp 的设计初衷,因为它只能产生音频范围信号,当您只有一个变量(即采样率)要控制时,将波形的足够数字化这一点会有些问题。

  今天,傅里叶变换 (FT) 用于测量 ADC;通常使用 1 或 2 kHz 满量程输入信号,但这也有缺陷。首先是您看到的本底噪声会根据您在 FT 中采集的样本数量而有所不同。这称为处理增益,是噪声谱密度相同的结果,但是当您增加样本数量时,FT bin 宽度会减小,因此每个 bin 中的噪声会减小,并且 FT bin 看起来会降低幅度(图1)。

  

image.png


  图 1处理增益将表观本底噪声降低 PG = 10*log10(M) dB,其中 M 是 FT 中的点数。在这里,FT 中 1,000 点(蓝色迹线)和 100k 点(红色迹线)之间的差异导致处理增益和 20 dB 的明显本底噪声差异。

  第二个问题是,不能像在对原始数据应用窗口的正常 FT 之后测量信号一样测量噪声。通常,在 FT 之前将一些窗函数应用于 ADC 数据,以减少由于输入测试信号与采样信号不完全一致而出现的杂散边带 [4]。窗函数为必须考虑的 FT 添加了增益或损失项。

  对于信号,这有时称为“相干增益”,为了使事情变得更加困难,窗口添加了一个用于噪声分析的不同增益项,有时称为“非相干增益”。这意味着如果您要测量 FT 信号幅度,则必须使用一个窗口校正因子,如果您要测量噪声,则需要使用不同的窗口校正因子 [5]。

  如果您使用频谱分析仪并想要测量噪声,您可能遇到过这种情况。大多数频谱分析仪都具有“噪声标记”功能,可以使标记正确读出任何被测量的噪声。对于模拟频谱分析仪,需要对噪声测量进行这种校正,因为使用的对数检波器对信号和噪声的响应不同,对于现代基于 FT 的频谱分析仪,由于需要将窗函数添加到FT 之前的 ADC 数据。我发现许多在线教程都忽略了这个重要的区别,因此没有正确计算它们的 FT 噪声。

  请记住,我们想要的只是一个简单的 ENOB 指标,现在我们不仅关注如何测量真实信噪比,还关注需要应用以正确测量噪声和信号的不同 FT 比例因子……比如总是,我们最终会遇到这个令人困惑的术语,术语的不同定义以及多次未讨论的计算步骤的兔子洞。没有什么容易的了吗?

  简单的路线

  我不想再写一个 FT SINAD / ENOB 分析程序,我宁愿使用一些预制的解决方案。虽然所有 ADC 制造商都为其 ADC 提供某种类型的分析软件,但大多数都是闭源软件,只能与来自其实际硬件设备的比特流一起使用。

  ADI 公司有一个有趣的分析程序,称为 VisualAnalog [6]。这很有趣,因为它可以与实际硬件一起工作或充当某种通用的 DSP 模拟器。VisualAnalog 是一个拖放式、基于块的 GUI,只需几个块即可对其进行编程,以读取包含任何 ADC 数据的文本文件,然后分析结果,如图 2所示。

  

image.png


  图 2 VisualAnalog 程序脚本,用于从测试文件中读取 ADC 数据,然后对其进行分析。该脚本和说明可以从 Github 下载,参见参考资料 [7]。

  为了测试 VisualAnalog 是否正确测量 ADC 数据,我在 Python 中进行了完美的量化器模拟,以生成各种位深度、加性噪声和杂散信号。由于我的 Python 模拟从已知但独立的信号、噪声和失真产品开始,因此我能够在时域中分别对这些产品求和以找到实际的 SINAD。我保存了每次模拟运行的数据,并使用基于 FT 的 VisualAnalog 对其进行分析,然后将结果与我的 Python 分析进行比较。结果与我的计算结果始终相差不到 0.2 dB。

  所以我非常有信心 VisualAnalog 在一系列场景中进行正确的计算。VisualAnalog 失败的唯一地方是它似乎将非谐波杂散信号视为噪声。现实世界中很少有 ADC 具有大量非谐波杂散,但需要密切关注。

  一些实际的例子

  为了展示测试 ADC 时获得的典型输出类型,我用 BlasterAmp 在各种采样率下测量了一个 12 位嵌入式 ADC。我在图 3中展示了各种测量结果和产生的 FT 变换。

  

image.png


  图 3使用 BlasterAmp 作为输入,我测量了一个 12 位嵌入式 ADC,应用了 Blackman-Harris 92 窗口 (BH92) [8],然后对结果数据进行 FT。我调整了 ADC 样本的数量,以便在上述所有示例中 bin 宽度为 1 Hz。(a) 100 kSPS,100k 点,(b) 20 kSPS,20k 点,(c) 1.1kSPS,1,100 点。最后一张图显示了 1 kHz BlasterAmp 输入音与明显的 100 Hz 混叠。

  从图 4中的 FT 图中首先值得注意的是,每个图中的本底噪声都截然不同,欢迎来到现实世界!

  查看图 3a,您可能想知道本底噪声中的“尖峰”信号是杂散信号还是某种噪声。一种快速判断方法是使用较少的样本重新运行 FT。如果“尖峰”的幅度发生变化,则它们与本底噪声相关,而不是离散的杂散。

  在这个例子中,我确实用更少的点重新运行了 FT 分析,并且“尖峰状”信号的幅度确实发生了变化,因此表明它们确实是噪声,而不是信号,应该这样处理。

  这说明了正确测量 SINAD 的难度。需要对每个 FT bin 做出决定,其效果是:“FT bin 噪声是使其应用了窗口噪声校正因子,还是信号并因此应用了窗口信号校正因子?”

  表 1显示了这些 FT 图的校正因子差异。由于所有图的 bin 宽度均为 1 Hz,因此图 3 中每个图的信号和噪声窗口比例因子都相同。

  

image.png


  表 1上面显示了图 3 中显示的图的 BH92 窗口比例因子的差异。由于图 3 中每次运行的 bin 宽度恒定为 1 Hz,因此所有运行的比例因子都相同。

  从表 1 中我们可以看出,我的示例中噪声和窗口比例因子之间的差异为 3 dB。这说明了将信号误识别为噪声分量的问题,反之亦然。每个被错误识别的组件都可能以 3 dB 的误差添加到最终结果中。这对最终结果的影响将取决于错误识别的分量的幅度和数量。

  然而,错误可能会更糟。例如,如果采样率为 1 MSPS 且 FT 大小为 32,000 点,则信号和噪声之间的窗口比例因子差异将是 18 dB 而不是 3 dB。通常,FT bin 宽度越大,信号和噪声窗口校正因子之间的增量越大 [9]。对图 3a 中的数据运行 VisualAnalog 分析如图 4 所示。

  

1658822281743017079.png


  图 4运行图 3a 中的 100 kSPS、100k 点数据的 VisualAnalog 脚本结果。VisualAnalog 计算的 SINAD 为 47.9 dB。

  在公式 4 中使用图 4 中的 SINAD 值会导致 ENOB 计算为 7.7 位。图 3 的所有曲线都具有相同的 SINAD,只有十分之一 dB 的变化。

  ENOB = (SINAD – 1.76) / 6.02 (Eq. 4)

  底线

  由于半导体制造商之间对术语的所有混淆和不同的定义,很难比较数据表参数超出原始数字位数,并且数字位数永远不等于分辨率的“实际位数”。

  我发现 ENOB 对于具有各种技术背景的观众来说是一个易于使用和理解的术语,因为它与任何数字化点的分辨率直接相关,并且它放弃了任何让许多技术水平较低的人感到困惑的 dB . 同样,使用 ENOB 可以防止对 SNR 和 SINAD 测量之间差异的任何误解,这种情况经常发生。

  确定任何 ADC 性能的“底线”是:

  测量您的 ADC,尤其是嵌入在其他 IC 中的 ADC,这一点很重要。

  找到一些可靠的分析算法并坚持下去很重要,因为每个分析软件都会给你不同的结果。

  让他人易于理解,使用一组定义,并谨防盲目比较制造商之间的数据表编号。

  使用单一的 ADC 性能定义,如 ENOB,并坚持下去。

  参考

  [1] Steve Hageman,“简化嵌入式模数转换器的测试”,EDN.com,2022 年 6 月https://www.edn.com/simplify-testing-of-embedded-analog-to-digital-converters /

  [2] Bonnie Baker,“ADC SNR 是什么意思?”,EDN.com,2004 年 5 月 27 日https://www.edn.com/what-does-the-adc-snr-mean/

  [3] 经典或无线电 SINAD 定义(注意:这与 ADC 制造商使用的 SINAD 定义不同),https://en.wikipedia.org/wiki/SINAD

  [4] Steve Hageman,关于 FFT、DFT、窗口和技术的系列文章,

  第 1 部分:了解 DFT 和 FFT 实现

  第 2 部分:频谱泄漏和窗口化

  第 3 部分:其他窗口类型、平均 DFT 等

  准确测量小信号:实用指南

  [5] 马丁·B·格罗夫;“使用数字信号处理技术测量频率响应和有效比特”,惠普杂志,1992 年 2 月。https://archive.org/details/hpjournal

  [6] Analog Devices, Inc. VisualAnalog,https: //www.analog.com/en/design-center/interactive-design-tools/visualanalog.html

  [7] VisualAnalog 脚本和测试数据可在我的 GitHub 上获得,网址为https://github.com/Hagtronics/BlasterAmp/tree/main/VisualAnalog

  [8] G. Heinzel、A. Rudiger 和 R. Schilling,“离散傅里叶变换 (DFT) 的频谱和频谱密度估计,包括窗函数的综合列表和一些新的平顶窗。”,Max- Planck-Institut 引力物理研究所,2002 年 2 月 15 日

  [9] 为简洁起见,我没有展示校正因子是如何计算的,因为我之前已经讨论过很多次了。请参阅参考资料 [4] 和 [8],或使用我的一个开源库自己运行计算,

  Matlab/Octave:“使用 Octave 的 DFT 函数” https://sourceforge.net/projects/dftfunctionswithoctave/

  C#:“DSPLib – .NET 4 的 FFT / DFT 傅里叶变换库” https://www.codeproject.com/Articles/1107480/DSPLib-FFT-DFT-Fourier-Transform-Library-for-NET-6

  Python:“Python Fourier Transform Helper Library” https://www.codeproject.com/Articles/5329670/Python-Fourier-Transform-Helper-Library

  从五年级开始,史蒂夫·哈格曼就被证实是一个“模拟狂”。他乐于设计运算放大器、开关模式电源、千兆赫采样示波器、锁定放大器、无线电接收器、高达 50 GHz 的射频电路以及数字无线产品的测试设备。他知道所有现代设计都不能用 Rs、Ls 和 Cs 完成,因此他涉足了 PC 和嵌入式系统的编程,足以完成工作。



责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯