分享

DoP原理浅析

 sun5936god 2019-01-08

DoP是DSD转PCM么?——浅谈USB方式传输DSD数据的方法(此文根据DoP open Standard Version 1.1编译并重新整理而成:http:///dop-open-standard)

 

玩PC-hifi的朋友对DoP(DSD over PCM)想必都不陌生,他得以让我们用过usb口将DSD数据流传输至DAC。那么,DoP是将DSD转换成PCM格式么?我们真能通过手机外接解码器就欣赏到原生的DSD音频么?本文结合DoP的最新规范标准为大家答疑解惑,相信看过之后,上面提到的这些问题也就都不是问题了。

 

DoP产生背景

USB2.0规范中定义了多种传输格式,但对于音频,就支持一种:PCM。虽然USB2.0还有一种RAW模式可以用来将任何数据原样传输,不过专用于DSD的传输方式还是没有。且就目前市面上USB转换器的局限来看,指望官方能统一出一个标准来,希望渺茫。DoP是多家厂商共同努力协作的产物。他提供了通过USB传输DSD源数据的方法,且这种方法的通用性足以让他的应用延伸到其他支持PCM的接口标准上,例如,AES/EBU,SPDIF等。

 

现有PC系统存在的问题

器材厂商在设计播放相关的软件时,力求避免使用五花八门的USB传输格式,甚至只要一种统一的规范最好。这样也是为了提高自家硬件在不同平台上的兼容性。即一种标准,大家通用。上文中已提到过,USB音频可以使用RAW格式传输DSD数据,这样也可跟USB2.0唯一支持的PCM音频通路区分开来。然而事与愿违,苹果最新的MAC OS 10.7使用的USB驱动也只支持PCM(当然不限采样率和位深度。要知道早期MAC OS可是支持RAW模式的!)。自从苹果强迫开发者使用Core Audio来处理和音频有关的一切事务时,MAC平台上就只剩一种音频格式可用了:PCM。要想在MAC上独辟一条DSD通道,就算能做,基本也要动大手术。因此用PCM来”伪装”DSD的这种特洛伊木马式的做法,纯粹是无奈之举。具体做法就是以PCM格式打包DSD数据,其中封装一些特殊的标识以及标头,让解码器能很好的辨别其真正传输的内容格式,从而切换到正确的模式。

对Windows平台而言问题可能简单一些:它对于USB 2.0的原生支持本来就不完整!它只能传输最高96khz采样率的PCM格式。因为自带的驱动没法支持更高的格式,因此无论传输PCM还是DSD格式,第三方驱动都是必须的。幸好我们有ASIO,他是很久以前Steinbreg Audio开发的第三方驱动。这种驱动同时支持PCM和DSD,规格不限。且已广泛流传并被诸多厂商采纳支持。ASIO本身并不是一个硬件驱动,而是介于播放软件和驱动间的中间件。因此硬件厂商仍需为自己的硬件产品开发驱动。而它的贡献则在于创建了这样一种为诸多不同播放软件所用的通用接口,起到了桥梁和纽带的作用。

 

解决方案——DoP

正如上文中所讲,在windows平台中我们可以使用ASIO或USB本身的RAW模式来传输DSD。尽管这不是DSD专用的独立通道,但基本算是最保险最直接的办法。

对苹果平台而言,既然它只支持PCM,因此我们想办法把DSD数据装进每一帧PCM数据里,并用它系统原生的usb驱动传输。DSD数据是1bit的,采样率为2.8224Mhz。换句话说其码率为2.8224Mbits/sec。这相当于16bit/176.4khz规格的PCM。为了能清楚的表示该PCM数据流里封装的到底是PCM还是DSD,我们还需额外的位来放一些标识信息。一般来讲比16/176.4规格还高一级的就是24/176.4了。也就是说我们多出来8位可用。虽然看起来有点多(如果我们能用01两种状态就够的话,8位能给出256种状态)。但实际上这8位都能派上用场,如图:

DoP原理浅析

最前面的8位(Most Significant Bits,简称MSB)用作DSD标识,在每声道的每个PCM帧中以0x050xFA16进制码,这种码每一位分别可对应二进制中的4位)两种形式交替出现(早先版本则使用0xAA)。这样做是为了防止解码器错把DSD数据认成PCM时爆出大量杂音,经上述设置,误读时会输出一个88khz但幅度低至-34db的声音。绝对无害且多数解码器内部在输出前就把他滤掉了(如果反过来,将PCM认成DSD的话,产生的杂音则不大好预测)。需要强调的是,软硬件厂商能用一些安全手段就轻易将上述隐患扼杀在设计阶段。这也是他们的责任:保证成品绝不出此类问题。经此文原作者验证,一种比较稳妥的,防止误判的办法是:传输的数据从PCM切换成DSD时,接收端至少检查32个连续的DSD标识符,每声道都要查!从DSD切换到PCM时,至少检测其中一个声道丢失的一个标识符。这样做会产生额外180微秒的延迟,但如果这时USB缓存没空且微帧(USB规范中对帧和微帧的划分和本主题关系不大,这里不再赘述,只需知道他和本身中PCM帧不是一个层面上的事)依然在被接收时,则不会产生延迟。当然,最好的办法还是让播放软件先验证下播放硬件能否支持DSD,然后再开始播放,验证的渠道也是多种多样的,通过物理层,驱动或OS都可做到。

 

图中后16位用来承载DSD数据,从t0开始装入。USB规范通常将每个PCM帧分配到一个特定声道上(比如左或右)。使用DoP模式时,被打包的DSD数据的声道,要与封装他的那个PCM帧被指派的声道一致。

上述情况都是针对DSD64而言,而对DSD128由于码率增加一倍,相应的也需要PCM的采样率增加到352.8kHz,这里分两种情况:

1.     用户的播放设备支持上述规格,那么从DSD64直接扩展到128即可,所有表示位和数据结构都保持不变。

2.     设备不支持这种高规格(例如使用AES/EBU时),这时还有一种办法:

用原先一对PCM帧,比如分别存储左右声道的两帧凑来存一个声道的DSD128数据。不过把前16DSD位和后16DSD位拆开存在前后两帧里。同时这里要用与之前不同的标识符,如下图红框中所示:

DoP原理浅析

第一种方法的好处就是可以只靠单纯提高PCM的采样率,就能兼容更高规格的DSD,但就看有没有这样高规格的设备了。如果使用USB来进行DoP播放时(本文开始时已提到过,其他数字输出也可用DoP方式),这种方法是推荐的。因为采用第二种方法总要占用比原先多一倍的声道,浪费大量带宽。


 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多