介绍
要评估一个高速模数转换器(ADC)的性能,就需要捕获其数字输出码,然后进行分析。逻辑分析仪的存储深度常常成为一个重要局限,妨碍系统捕获足够的数据点,以生成高分辨率 FFT,或者精确的 INL/DNL 图。解决该问题的一个简单办法是使用某种数学工具,例如 MATLAB (图 1),将多组数据连接起来。连接数据的一个缺点是,通常会在两组数据之间的连接点出现很大的不连续性。尽管不连续性对 INL/DNL 图的影响极小,但对高分辨率 FFT 而言,几乎是毁灭性的(图 2)。
图 1. 连接后的数据在两组数据之间出现不连续。
图 2. a) 捕获单组 16384 点数据并分析;b) 捕获两组 8192 点数据,连接,然后分析“拼接”技术。
有一种办法可以消除不连续性,就是在各组数据中寻找相同的点簇(一般为 3 到 4 个点),然后在这些点将两组数据“拼接”在一起(图 3)。最简单的“拼接”方法是,记录下第一组数据中的最后四个点,然后在第二组数据里寻找相同的点簇。相同点簇出现在第二组数据中的位置称为“拼接点”。第二组数据中在拼接点之前的所有数据均被舍弃;第二组数据中的剩余部分与第一组数据合并。这种技术即所谓的基本数码拼接,实现起来非常简单,可以在 MATLAB 中非常快地运行。
图 3. 基本数码拼接后得到的最终“拼接”数组
采用基本拼接方法拼接数据时,有时必须丢掉第二组数据中的近一半,才能找到与第一组数据最后四个点相匹配的一簇点。作为另一种选择,丢掉第一组数据尾部的几个点,常常有助于找到更靠近第二组数据起点的拼接点(图 4)。然而,通过丢掉第一组数据尾部、第二组数据头部的部分采样点来寻找匹配点的方法实现起来比较困难。这种处理被称为超前数码拼接。理想拼接点应该能够保留尽可能多的数据点,寻找这样的拼接点需要认真的考虑和一定的编程技巧。正确地实现之后,超前拼接技术通常能够得到两组小数组所含数据点总数的至少 90%。
图 4. 采用超前拼接技术寻找理想拼接点,最终得到“拼接”后的数组。
将第二组数据(数组 B)拼接到第一组数据(数组 A)之前被称为反转拼接,这种方式有可能得到更大的拼接数组(图 5)。但是,这种技术会使处理时间翻倍,因为必须在 A 领先于 B 和 B 领先于 A 两种情况下寻找拼接点。此外,当与其他拼接技术一起使用时,反转拼接方式所带来的好处通常很少。因此,对于较慢的 PC,反转拼接技术大幅度增加的处理时间开销较之它所带来的好处而言并不太值。表 1 详细比较了这三种代码拼接方法。
图 5. 反转拼接的处理时间加倍,但常常收效甚微。
表 1. 三种拼接技术对比*
*采用上述拼接技术对两组 8K (8192 个)数据进行拼接。为确保准确性,采用四组 8192 点数据(分别编号为 1 至 4)重复本测试。每组测试所合成的数据取平均后列于测试数据的右侧。
† 直接连接总能得到 100%的数据。
‡ 无法拼接数据。
MATLAB 函数说明
本文后附的 MATLAB 代码(附录 A 和 B 中的 StitchMatrices 和 FindStitchPoint)将上述论点结合到一个易于使用的函数中。这些函数可接受两组数据(MATLAB 中的单列矩阵)和几个输入变量(用来选择超前 / 反转拼接功能)。FindStitchPoint 例程用来确定拼接点在数组 A 和 B 中的偏移量。StitchMatrices 例程则根据 FindStitchPoint 例程给出的偏移量对两组数据 A 和 B 进行舍弃和组合。同时,最终数据的拼接点被记录在 PrevStitchBins 数组中,以便于后续处理。当拼接多组数据时,PrevStitchBins 可保存老的拼接点。
结论
拼接两组数据可以得到一组理想的结果。图 6 给出了三组 8192 点数据使用上述拼接技术拼接起来(使用 5 个拼接点)后的 FFT 图。所得的 FFT 几乎与前面图 2a 所示,基于 16384 个连续点所得结果相同。
图 6. 数码拼接后得到精确的 FFT 图。