也说 jitter

Posted on October 16, 2014

搞数字音频的,经常会提到 jitter。 什么是 jitter ?

jitter 就是时钟的随机抖动。这个抖动啊,来自量子世界,是无法消除的,否则海森堡大人要从棺材里跳出来了。 jitter 只能减少,不能削除。

那么 jitter 对音频有啥影响呢?

jitter 主要影响就是,经过 DAC 重建模拟信号的时候,时钟的不稳定导致重建信号偏离原来的位置。结果上看就是波形不再符合原来的PCM编码的描述了。 这个偏差引入了失真,但是数据的准确性并没有被破坏。

那么 jitter 既然无法消除, 总有个量的吧? 小于某个量后,人耳就无法察觉了,对吧? 是的。一般认为,jitter 小于 200皮秒后人耳即无法感知了。

一般数字电路的 jitter 有多大? 数字电路通常使用石英晶振产生时钟,石英晶振的 jitter 是很小的。石英晶振 jitter 可以做到小于 1ps (皮秒)。 所以 jitter 影响音质的说法基本上是无稽之谈。

这个时候,玄学大师会出来说,低 jitter 的那是本地时钟。如果使用的不是本地时钟,比如使用 SPDIF 传输音频,时钟信号是包含在信号里的。 解码器要从被光电转换线路劣化(或者使用同轴传输,信号会被外界电磁干扰劣化)的信号里重建数据和时钟。这个时钟就很难保证低jitter。

是的确实如此。外界干扰确实让同轴或者光纤传来的信号 jitter 大大增加。有网友以示波器观察,发现波形已经被严重歪曲。数字信号以电压判断, 接收到的波形因为已经扭曲,波形的上升坡度各不相同。所以上升到指定电压以被判定为 1 的时间就各不相同。 哪怕原始波形以精确的时间开始上升 。。。。 如此以来,jitter确实很大。

但是,哪怕同轴上单个 bit 的 jitter 高达 1000ps (其实已经很低了,但是足以引起听感不适), 提取出来的信号和时钟的jitter依然能做到非常低。 这是为何呢? 因为重建信号使用了 PLL (锁相环) 机制。

spdif 信号并不能直接 DAC 解码,而是需要提取出时钟信号和音频数据。spdif 信号是一帧一帧传播的。而不是一个采样点一个采样点传播的。

接受方首先要接收完整的一帧的数据,通过帧头获得音频数据的格式。然后才能讲音频数据送入 DAC 。 DAC 则是一次一个采样点进行的。 DAC 需要一个时钟信号,时钟信号每一个滴答,DAC 按照采样点数字输出一个电压。只要这个时钟的 jitter 低就可以了。 spdif 虽然使用 BMC 编码将数据和时钟同时编码,但是这个时钟其实是用来恢复数据使用的——使用 BMC 编码可以使用一条线就将数据正确的传输——并不用它来恢复提供给 DAC 的时钟。 这个时钟是 spdif 接收电路依据 PLL 锁定后输出的。

这个 PLL 电路的就是保证每帧音频数据的到达时间被恰好平均分割,锁定的是这个时钟。这是什么意思呢? spdif 每帧包含 192 个采样点数据, 在传输 48khz 音频数据的时候, 每 4ms 传输一帧。那么 PLL 电路的任务就是产生一个时钟,每 4ms 恰好是 192 个脉冲。 传输 44.1khz 的音频数据的时候,大约每 4.35ms 传输一帧, 那么 PLL 电路的任务就是产生一个时钟,每 4.35ms 恰好是 192 个脉冲。 那么, spdif 如果在传输过程中,因为线材垃圾了,引入了 1000ps 的 jitter , 那么 最多就是 1000ps 被 192 均分了。也就是平摊后实际线材只为每个采样点引入了 5ps 的 jitter.

所以,线材引入的 jitter 只要不影响电路执行 BMC 解码以恢复出数据,实际上 spdif 传输的 jitter 主要还是由 PLL 电路自己的 jitter 决定的,和线材关系非常小。 而一般产品上常使用的 TI 生产的一款 spidif 接受芯片,其 PLL 电路的 jitter 为 50ps . 垃圾线材只是再增加 5ps , 还是远远小于人耳可辨的 200ps。

再说 USB 传输。 USB Audio 规范里,主机每 1ms 传递一个音频封包。 接收芯片同样也是使用 PLL 电路恢复时钟。 因此 USB 线材引入的 jitter 同样远远小于 PLL 电路自身的 jitter, 当然,也远远小于人耳能分辨的极限。

说道这里,很多人有疑问,为啥不使用解码器的本地时钟呢?而是使用 PLL 电路去锁定主机的时钟呢?

因为啊,世上没有一模一样的时钟。 假设我们运气差, PC 使用的是比标准快 的,而 DAC 使用的是慢的,那么 PC 和 DAC 会出现时差。 这个偏差会造成缓存撕裂。PC 比 DAC 快,则 PC 送来的数据 DAC 解码不过来。 PC 比DAC慢,则 DAC 常常要空转. 这2种情况都会导致爆音产生。 加大缓存只能减缓这个时刻的到来,而且增加了播放的延迟。使用更高级的温补晶振也只是缓解而不是避免这个问题。

解决时钟不同步问题的最佳办法就是只使用一个时钟。由数据源提供时钟,接受端则使用 PLL 电路去锁定这时钟。

这里注意下,时钟漂移和 jitter 的区别。 时钟漂移是时钟和标准时间相比走的偏快和偏慢的问题。元件规格上的这个漂移是指整个产品线上所有产品的漂移情况统计。 对于一个具体的时钟,漂移则是固定的,基本上只受温度影响下会快一点或者慢一点。 比如对于一个标称 1M 的晶振,可能这个产品实际是 999999hz 的,另一个产品是 1000001hz 的。这样就是正负 60ppm 的偏差。对于一个给定的晶振和一个给定的温度下,并不会出现这一秒 999999hz 下一秒 1000001hz 的情况。 jitter 则是每个时钟脉冲的位置会“随机偏移”, 但是每秒输出的脉冲个数是没变的。

所以,音频的 jitter 早就是一个被解决掉了的技术问题。以目前的技术,完全无需担心任何 jitter 问题。音频传输相对现在的数据通信领域完全就是小儿科。

Comments