现代USB音频系统设计挑战的应对
USB音频是绝大多数设备中普遍使用的接口,除非是最古老的个人电脑硬件和操作系统。以其鲁棒性连接和数据传输速率,人们可能会认为,在这种接口上传输高质量的音频是很简单的。然而,今天成功的基于USB的音频产品无不是做了大量的芯片和系统方面的工作,需要解决时钟恢复等棘手难题。
问题的本质是,最后的输出设备传送音频到扬声器,耳机或线路输出插座,这需要一个“主时钟”来调整音频转换速度。这个主时钟需要有两个独立的属性:1)它一定是音频采样率的整数倍,这要非常精确(这样当时序错误时,你就不需要舍弃或复制音频样本);2)它的抖动(或者可以说是相位噪声)必须足够低,这样数模转换过程就不会受到影响。这里的挑战是我们要同时满足这两个要求。
困难的一部分来自于这样一个事实:通过USB线的数据流的接收端不知道确切的采样率。事实上,它只能推断理论采样率。更重要的是,这些来自USB线的数据并没有任何形式的时钟。这对比其他大多数串行接口来说是明显的不足,其它串行接口或者有一个发送时钟,或者是构建数据,这样当运行时,总可以从连接上找到一个时钟。
能从USB接口得到的唯一的时钟信息就是,每毫秒特定类型的数据包会发出起始桢,这一个事件可以由接收硬件检测到。根据已知方法,从传输端的系统时钟可以推导出这一毫秒值,原音频采样速率也是同样的(我们后面会简要地讨论一个例外)。
一个简单的解决方法可能是,我们可以把1 kHz时钟放到一个基于PLL的乘法器,根据需要来倍频,以建立音频主时钟,所有的子时钟都基于此。然而,在处理CD音频的系统里,采样频率是44.1kHz,典型的传统音频数模转换器需要的主时钟是256倍,或者11.2896MHz。事实是,在一个单PLL上将输入频率倍频这么大倍数性能肯定不会很好。这正击中了乘法器的要害:环路带宽,参考激励拒绝,和压控振荡器的抖动。更重要的是,在这个案例里,我们需要用不是整数的数来乘1kHz,要完成这个任务就更难了。
层叠式两种相当复杂的乘法器环路会导致要工作在有相位噪声和伪拒绝的情况下。然而,这种方法往往会导致电源消耗很大,这需要高端芯片,还要巧妙的模拟设计。或者这样,宁愿相应变慢来改变时钟频率需求。USB音频链接的名义采样率可能在线路之间迅速改变,要等待将近一秒来稳定,会导致性能不可靠。这种方式最初应用在固定频率的演播室的数字音频连接,在那里成本和尺寸都不重要。
在过去的几年里,有各种不同的创建需要的音频主时钟方式,不再需要受PLL倍频问题的困扰,他们已经集成到了很多专用的芯片组,例如USB音箱、耳机、外部声卡。这些器件做他们所需要的,而不需要在“如果又怎样”能力上花费额外的芯片面积或引脚数。这当然可以使成本下降,这样每个人都很高兴。 |