【问题标题】:Drive an DAC from a stream that is clocked from another source?从另一个来源提供时钟的流驱动 DAC?
【发布时间】:2010-10-06 23:29:34
【问题描述】:

我的 DAC 内部时钟频率为 48khz,我需要从一个同样为 48khz 但时钟来自不同来源的流中提供它。

这两个源会随着时间的推移而漂移,并且其间的任何缓冲都将不可避免地上溢或下溢。

很遗憾,源没有可用的速率控制机制。

如何最好地处理?

是否可以复制或扔掉偶尔的样品来补偿?我估计每约 70k 个样本有 1 个样本,差异为 30ppm。

【问题讨论】:

    标签: signal-processing acoustics digital-analog-converter clockrates


    【解决方案1】:

    由于您的时钟基本上以两种不同的速度运行,您别无选择,只能复制或丢弃样本。

    记录已读取/写入的样本数,并根据当前时间计算您预期已读取/写入的样本数。然后可以通过复制/丢弃样本来调整差异。

    【讨论】:

      【解决方案2】:

      如果您担心保真度,请使用采样率转换器,而不是删除或复制样本。首先,使用时间戳来测量源采样率和 DAC 采样率之间的相对频率比。使用该比率来控制采样率转换器。一个质量不错的采样率转换器可以为您提供 95 分贝的信噪比。计算成本更高的算法可以为您提供 > 120 db 的信噪比。

      见:

      --jdkoftinoff

      【讨论】:

      • @jdkoftinoff:我不确定这是否适用于彼此非常接近的采样率。您将不得不过度采样。 ??
      • 不,它工作得很好。关键是使用多相滤波器,您不会计算过采样值。 libsamplerate 可以很好地进行任意比率 - 甚至可以动态更改它们。通常,尽管您希望针对特定的狭窄范围预先计算系数。
      【解决方案3】:

      这可能是一个愚蠢的问题,但请听我说:输出率真的很重要吗?

      考虑这种情况 - 您有一个音频输入设备。您正在以 48Khz 对模拟波形输入进行采样。该波形可以通过任何速率生成——从麦克风的连续压力水平测量到 8Khz 语音编解码器或更低。您碰巧知道这个特定的输出也是 48Khz 的事实与您正在做的事情无关。

      如果输出设备和您的输入之间有完美的传输,当您将原始数字波形与您读取的波形进行比较时,您偶尔会看到您复制了一个样本(如果您的时钟更快)或错过了一个样本(如果你慢)。但这会自动发生,您无需任何补偿。这将很容易与您尝试确定何时“复制或丢弃偶尔的样本”一样准确。

      实际上,在 DAC 和 ADC 中的滤波效果和噪声之间,您可能无论如何都不会得到完全相同的结果。除非您谈论的是某种编码的数字音频格式——在这种情况下,请忽略我所说的一切。

      编辑 - 好的,所以它是数字音频 - S/PDIF?
      信号应该携带足够的信息来实现锁相。理想情况下,在硬件中——信号的上升沿定义时钟速率——您可以使用 PLL 硬件将 A/D 时钟锁定到输入。或者过采样一段时间并计算上升沿以确定速率。或者在软件层面,测量前四个时隙的帧错误率,并调整时钟进行补偿。

      【讨论】:

      • 是数字音频。我关心的不是保真度。我更关心缓冲区溢出/下溢,并且在发生 xxxxflow 情况时必须丢弃或补充一大块数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2016-09-21
      • 2020-03-22
      • 1970-01-01
      • 2021-12-09
      • 2014-07-01
      相关资源
      最近更新 更多