12 位 ADC 到 8 位 DAC

信息处理 声音的 算法 采样 即时的 转换
2022-02-15 07:14:07

一些背景信息:我计划开始在微控制器上进行数字信号处理实验。我计划使用的特定微控制器(TI Stellaris LM4F230H5QR,来自 Stellaris Launchpad)上集成了一个 12 位 ADC,而另一方面,我看起来可能使用的所有 DAC 都是 8 位的。

显然,在获得输出之前,我必须以某种方式降低位深度。我可以得到一个 8 位 ADC 并完全避免这个问题,但我想尽可能多地将信号处理线保持在 12 位。

问题:首先,我的假设是否正确,即尽可能长时间地保持 12 位,我会得到更好的结果?
其次,有没有比将所有内容向右移动四次更聪明的方法将这 12 位转换为 8 位?

2个回答

我要您做的第一件事是测量您的 ADC 的实际精度。制造商宣布的 12 位性能往往只有在理想条件下才能达到,例如:

  • 使用外部精密电压基准而不是内置基准。
  • 为 MCU 的模拟部分使用不同的电源。
  • 使用应用程序说明中指定的所有必要的 EMI 隔离/过滤部件……您的目标开发人员。由于成本削减,电路板可能没有(它可以像 VCC 和 AVCC 之间的铁氧体一样简单)。
  • 使用慢采样率。
  • 防止任何 I/O 引脚在采集期间切换(例如,在后台禁用 SPI 或 UART 吐出数据,禁用导致 GPIO 切换的中断,禁用 PWM 外设......),甚至在采集期间将整个芯片置于睡眠模式获得。

在非理想条件下,我看到 ADC 损失了高达 3 位的精度。所有这一切都表明,只要您的输入确实具有 12 位的分辨率,您一直使用 12 位数据进行处理的假设是正确的;但如果它实际上是 8 位,因为您远离 ADC 的“最佳位置”,那么一直保持和处理 4 位噪声是没有意义的——您可以在源头上进行减少。

通过舍入或移位从 12 位转换为 8 位会导致与输入信号相关的量化噪声。抖动算法可以用来解决这个问题并分散量化误差。您还可以选择通过噪声整形方法将量化噪声转移到危害较小的频带中。

问题:首先,我的假设是否正确,即尽可能长时间地保持 12 位,我会得到更好的结果?

是的,你是对的。

其次,有没有比将所有内容向右移动四次更聪明的方法将这 12 位转换为 8 位?

有时。有符号右移四次是最安全的方法,因为保证不会导致任何数值溢出问题。但是,假设由于处理增益或起始信号电平,您知道最终 12 位信号的绝对值永远不会大于 1023,或者它很少发生以至于您愿意接受失真当它发生时,通过使信号饱和来达到这一点。然后你可以去掉最高有效位(当你需要避免数字溢出时饱和)并移动三位。这引入了较少的量化噪声。

但请注意,最好通过 AGC 使用尽可能多的动态范围(即使用所有 12 位),并在每个阶段将处理增益设置为尽可能接近 1,然后向下移动最后四位,而不是使用更少的动态范围并在最后减少移位。