使用单个ADC同时采样多个通道

文章作者:Kendall Castor-Perry

您可以使用单个ADC连续采样多个模拟输入通道,这样每个通道上的数据似乎是在同一时刻获得的。

那么,序列抽样的问题是什么呢?毕竟,假设你有四个通道你需要以某个速率F进行采样年代,以及一个可以在4F温度下完全采样的ADC年代它可以通过一个4路多路转换器驱动,这难道不是一个很经济的完成工作的方法吗?

在这里。如果你需要做任何涉及到来自多个通道的数据的逐样本处理,你将不得不“假装”你在不同时间从不同通道获得的读数实际上发生在相同时间,这样你就可以在计算中把它们结合起来。

假设你想计算在交流电源电路中被吸收的瞬时能量。你对电压和电流进行采样,然后把这些读数相乘。结果是,当乘以时间长度时你假设样本是有效的基本上,样本周期,给你能量。随着时间的推移,把这些读数综合起来,你就能积累总能量。您看!这是电表!

但是!如果你使用多路ADC,你没有同时测量电压和电流读数。通过假设这样做,就在电压和当前序列之间引入了一个时间延迟。这相当于一个小的相移,它会打乱任何对电压和电流之间的相位差敏感的计算(比如,嗯,功率)。

错误不是来自抽样过程本身,而是来自我们对如何解释和操作抽样值的选择。让我们以四个通道为例(这些材料的大部分取自我为一个超精密电表设计的真实项目,该电表由赛普拉斯半导体公司的PSoC 3建造)。

我们用字母W到Z来表示这四个通道,样本号i写成W(i),以此类推。随着我们的ADC在四个通道中依次多路复用,很明显,从ADC中直接出来的数据字的序列是这样的序列{1}到达4F速度年代:

序列1

序列{1}直接从ADC采样

我们的问题来了,当我们采用简单的方法将这个流分成四个单独的流,我们假设具有相同索引的样本可以被当作同时处理,就像在集合序列{2},速率为F年代:

序列2

序列{2}ADC样本分为四个流

分解序列{1}的标准方法是将0“填充”到其他通道被采样的位置,从而获得四个流,序列{3}。这是插值的一个例子:

序列3

流“填充”以保持时间关系

这些流都在4华氏度运行年代,他们显然不再“排队”了。对于在{3}中垂直对齐的值进行任何运算都是没有意义的,也就是说,发生在“同时”。任何一对中的一个都保证是零,因此它们的乘积也是零。

更重要的是,通过从F年代并产生一个在4F重复的输出流年代,我们创造了信号频谱的“图像”。图像以F的倍数为中心年代,如图1,取自非常有用的国家仪器的网站。这种高频信息最初并没有出现在我们的W~Z输入中。我们现在不是把事情搞得更糟了吗?

频谱图像

图1插值得到的是频谱图像。(图片来源:美国国家仪器公司)。

并非一无所有。有一种方法可以去除高频垃圾让我们的采样率回到F年代。这叫做抽取,我们使用抽取过滤器

“decimation”(decimation)一词最初是用来翻译“decimation”一词的可怕的惩罚是罗马人对不听话或表现不佳的军队的强征。在不那么嗜血的信号处理中,它指的是每一个N的选择th从数据流中抽样(按N抽取)。它有时被称为下采样,特别是在音频领域。在我们的例子中,N=4。

抽取涉及到降低抽样率,我们知道我们冒着混叠,除非我们采取措施从信号中去除频率高于0.5F的分量年代。换句话说,抽取滤波器实际上就是一个数字抗混叠滤波器。

在本例中,我们可以选择几种类型的过滤器拓扑来完成这项工作。在这里,我将使用有限脉冲响应(FIR)低通滤波器,该选择的好处将在稍后变得明显。我们将过滤{3}中的序列这样我们就可以从4F中抽取它们年代到F年代。所以,我们需要一个低通滤波器具有良好的阻带从0.5 F开始年代当它在4F运行时年代数据。

一个合适的128抽头FIR滤波器的频率响应如图所示图2。它是一个线性相位滤波器,使用非常简单的“windowed sinc”方法设计,使用的只是一个电子表格。阻频带的电平永远不会低于75分贝,这将潜在的混叠误差限制在此应用程序的合理水平。您可能会发现通带增益为12 dB,即4x。选择比例因子的原因稍后也会变得清晰。

幅度和相位响应

图2初始128抽头FIR滤波器的幅度和相位响应。

那么,让我们取四个128个过滤器,每个过滤器对应{3}中的每个序列。每个滤镜的取样和取样温度都在4F年代,生成显示在{4}中的新序列。没有一个样本值是零。

序列4

序列{4}FIR滤波器输出

因为我们已经过滤掉了高频的东西,我们现在可以将每个流抽取四倍,这意味着我们只抽取每四个输出样本,例如在F处给出{5}中的序列年代

序列5

Decimated FIR输出流

到目前为止,我们可以使用任何形式的数字滤波器,但使用FIR提供了一个很大的简化。再看一下{3}中的序列。四分之三的数据值为零。用于创建{4}序列的128 tap FIR滤波器的每个输出值都是将128个输入数据值和系数值相加的结果。但如果我们事先知道数据值将为零那么在过滤器结构中做乘法就没有意义了。这里有很大的潜在储蓄;我们如何利用这一点?

解决方案是将FIR滤波器的脉冲响应划分为四个子集,以匹配{3}序列中非零样本的位置。这就把我们的128点过滤器变成了四个不同的32点子过滤器。然后,我们使用{2}中的“错位”输入序列作为这些过滤器的输入,每个过滤器都在F处运行年代图3展示了我们如何将脉冲响应分成四个“阶段”,并将其组合成四个不同的滤波器。我们仍然得到{4}中的序列作为输出;只是我们消去了所有多余的乘以0。

脉冲响应

图3四个32抽头的子滤波器具有四个不同的相位产生相同的脉冲响应作为128抽头FIR滤波器。

现在,我们不再使用4个(相同的)128分过滤器,而是在4F下运行年代,我们只需要实现四个(不同的)32龙头过滤器,每个运行在F年代。这是相当可观的节省。我们实际上不需要创建和抽取{3}中的序列。新的滤波器具有原始的频率响应,但每一个滤波器都刚好碰到奈奎斯特的阻带。

这是一个多相大量毁灭。每个子滤波器之间都有延时差,而且完全相等到我们在{2}中创建序列时原始的样本数据不对齐所引起的时间误差,即通道之间输出数据样本周期的四分之一。因此,这种时延差在时域中“重新排列”了数据,消除了误差。这有多酷?

因为我们把脉冲响应分成四组,每组携带四分之一的信号。图2显示了从一开始就补偿这一损失的4x增益。你也可以从一个单位增益滤波器开始在最后把所有最终系数乘以4,得到相同的结果。

响应曲线

图4四个子滤波器的响应曲线显示幅值重叠,相位交错。

图4给出了四个子滤波器的频率和相位响应;他们现在有统一增益。振幅响应是相同的,但相位响应是倾斜的,正如你所期望的四个滤波器有轻微不同的延迟。图5直接显示四个滤波器的组延迟值,以及扩展通带图。对F年代3000hz,这是我们在计量工作中使用的采样率。

通带增益和群延迟响应

图5这个接近通带增益和组延迟(虚线)响应的子滤波器显示了相位倾斜。

请原谅我cliché,布丁的好坏要看吃了。图67是从开发板上构建的多路adc项目获得的四通道.wav文件中的数据段的“前后”图。源信号包括等量的50hz和它的前21次谐波,相控随机。它通过PC机的线路输出产生一个合成的.wav文件,并应用于四个多路输入(通过仔细匹配的输入交流耦合网络)。我们花了很多心思来确保在切换到下一个多路复用器信道之前,一个信道上的所有东西都被很好地解决了(否则你会得到串扰,这会在仪表上造成严重的精度问题;也许以后的文章会对此进行量化)。

时序失配数据曲线

图6从单个输入信号中依次获取的数据一起绘制,显示了时序不匹配如何产生不同的数据曲线。

因为这四个通道不是同时采样的,所以图6中一起绘制的四个流的数据点是不相同的。这个极端的波形被选择来做一个视觉点,即使它将是一个相当不寻常的信号应用到实际电表。

图7显示了四个子滤波器的输出,均采用图6的样本,使用Cypress Semiconductor的PSoC 3中的“数字滤波器块”实现。请记住,这四个滤波器有相同的幅度响应,不同的只是他们的组延迟是由四分之一的样本时间的单位分开。通过这些滤波器,就会神奇地改变应用的波形,使输出信号都相同,误差非常小——就像我们展示的那样,足够接近精确的电能计量。

匹配数据曲线

图7通过“重新排列滤波器”后的四个通道产生匹配的数据曲线。

这种方法有缺点吗?我们将每个通道的数据通过一个32档位滤波器,每个通道经历的平均组延迟是运行在F的32档位线性相位滤波器的平均组延迟年代这是16/F年代。您可能希望它更低,特别是在较低的采样率或闭环系统中(这对计量应用程序根本不是关键的)。如果你不需要这么宽的平坦频率响应,你可以减少初始滤波器的抽头数量来减少延迟。

如果你真的需要带宽,另一种方法是使用最小相位FIR滤波器作为你的起点。在牺牲线性相位响应的情况下,可以大大减少低频群延迟。一种从线性相位原型创建最小相位FIR滤波器的方法将不得不等待未来的文章…

这项工作是为了支持我们的电表分析,但是它有很多其他的应用。例如,如果你在分析结构,振动分析中的互相关联项将是无用的,除非你能依赖于数据集的同时性。我还研究了一个有趣的应用程序,它是一个射击探测系统,它以每小时60 ksps的速度对8个宽带麦克风进行采样。数字滤波器块实现了8个12抽头的子滤波器,该子滤波器来自一个最小相位原型,总速率为480khz。你不能做到这一点在你的平均微控制器-即使一个花哨的32位!

因此,请记住,您不需要多个adc,因为您希望数据样本的行为就好像它们是在所有通道上同时采集的一样。一个单一的高质量ADC,具有良好的输入mux和一些数字滤波器巫术,你就万事俱备了。希望我们在这一点上是一致的!

编者按这篇文章的一个版本最初出现在EE Times-Europe

留下你的评论