我是来酱酱油的吧 关注:208贴子:30,503
  • 11回复贴,共1

【数字音频科普第2弹】数字音频的总线接口

取消只看楼主收藏回复

******** 【数字音频科普第2弹】I2S,S/PDIF 数字音频总线接口 *********
时隔两年我又回来填坑了。数字音频系列预计有三篇(如下),本帖为的第二篇。
1. Delta-Sigma ADC –从模拟信号到PCM编码(https://tieba.baidu.com/p/7652007682
2. I2S, S/PDIF –数字音频总线接口(本帖)
3. Delta-Sigma DAC,Class D Amp – 从PCM编码到模拟信号(TBD, 预计明年放送)
我还是会从硬件角度来讲讲数字音频的转换/传输,但不涉及任何具体硬件实现方法。关于音频、硬件和数字化的介绍,我都在第一篇里都讲过了。没看过的请先去看第一篇(上面有链接),这里我就不废话了。第一篇里我们讲了怎么把传感器发出的电信号转化成PCM编码的数字信号,现在就要讲讲怎么把PCM信号传出去/收进来,更具体地说是讲讲音频专用的总线接口。其实音频的无线传输是个更有意思的话题,可以从上古时期的AM广播和矿石收音机说起,但我自己对现代无线数字音频传输的那些技术也只是一知半解,所以只能讲讲我比较了解的有线传输。有线传输也有很多种,这篇帖子会介绍一下基本概念以及两个常用的音频总线:I2S和S/PDIF。
细心的同学应该已经发现,我第一篇里写的是I2S和SoundWire,咋换成S/PDIF了?这是因为我最近准备要写这个帖子的时候才发现MIPISoundwire的spec竟然不是开源的。然后我又去读了MIPI的保密条款,决定还是不讲了,我怕MIPI的律师来告我。Soundwire是个更现代也更有趣的总线,可以讲一些应用层的东西;相比之下,I2S和S/PDIF都已经老掉牙了(不过至少在未来几年内用I2S和S/PDIF的设备数量还是会远远超过Soundwire),也都很简单,我准备多讲点S/PDIF物理层编码设计的小心思。


IP属地:美国1楼2023-12-05 12:29回复
    留白待用


    IP属地:美国2楼2023-12-05 12:36
    回复
      老规矩,先讲讲几个基本问题。
      1.为什么要传输数字音频信号,传输模拟音频信号不行吗?
      当然可以。3.5mm耳机线传输的就是模拟信号;现代通信的鼻祖—电报,传的也是模拟音频信号。有人会说:“不对,电报发的是莫尔斯电码,是数字信号。”这个问题是这样的,如果我们把电报员看成通信系统里的一个器件,那么电报确实是数字通信系统,而且还是个基于人体神经网络编码译码的赛博朋克数字通信系统。但如果我们把电报员看成通信系统的用户的话,那么这就是个模拟音频通信系统。
      扯远了,我们拉回来。我在第一篇就讲过为什么要把模拟信号转换成数字信号,我当时更多地是从信号处理的角度来说的。但其实如果要把麦克风的信号传输出去,即便不需要做任何信号处理,一般也会先用ADC把它转换成数字信号再发出去。这是因为传输模拟信号成本更高,功耗更高,抗干扰能力更差。成本/功耗/抗干扰,看起来好像是在说三件事,其实这是一件事。因为要信号抗干扰,那成本/功耗必然高,要降低成本/功耗,那信号抗干扰能力必然差,不如上数字信号。你说传模拟信号还省了个ADC,但其实为了增加信号强度你还得加个成本/功耗比ADC都更高的功放,更别提信号线的电磁屏蔽也是一大开支。当然信号线可以不做电磁屏蔽,again,这会导致抗干扰能力大大下降,一般来说不做屏蔽的模拟信号线上捡起的噪声是绝对要大于数字量化噪声的(音频ADC的噪声有多小,看过第一篇科普贴的都知道)。所以说HIFI老哥们花重金买线材虽然是智商税但也不是完全没有道理(这里说的是3.5mm音频线之类的模拟信号线,重金买数据线的那是纯**),但那些模拟传输系统设计的时候早就考虑到了线材上的失真(成本/功耗早就为此增加了),因此只要是质检合格的,1块钱的线和1000块钱的相比基本不会有多少信号质量的差别。不过也不是说HIFI老哥的线材对音质就没影响了,线材的影响主要是会改变接收端整体的输入阻抗,从而改变系统频率响应特性。不信的话可以找根阻抗较小的便宜耳塞,前面接根电阻线,和不接电阻线时的听感绝对不一样,因为没接的时候耳机的电学特性(可能)更像电感(取决于耳机设计),加了电阻线后更像电阻了;另外加电阻线后还需要调大音量维持耳机相同功率的输出,这会影响耳机功放的信噪比(也不一定,取决于设备耳机输出端的设计)。不过这些和线材上的信号质量没啥关系,纯粹是阻抗匹配的问题,而数字信号传输就没这个问题(也不是不用考虑这个问题,而是不会影响到信号本身)。
      这么说来数字信号传输成本低、功耗小还抗干扰,难道就没付出什么代价吗?那当然不是,这个世界上从来都没有免费的午餐。我在第一篇里就说过数字通信的本质就是用频带宽度(简称带宽,bandwidth)换取可靠性,在音频传输这里也是如此。模拟音频信号的带宽只有20kHz,而一个传输48kHz采样率24位双声道PCM信号的I2S需要至少367kHz有效带宽,S/PDIF需要超过978kHz有效带宽(这个数字怎么来的?别急,我们后面会有粗略的频域分析)。香农定律告诉我们信道容量只和两个东西有关:带宽和信噪比。你要让3.5mm音频线传输和S/PDIF相同质量的信号,S/PDIF的带宽是3.5mm音频线的100多倍,那3.5mm音频线只能用远高于S/PDIF的信噪比标准来达到目的,而为了提高信号线上的信噪比那必须加大功耗和成本。
      所以你拿3.5mm音频线传两个声道的音频从通信的角度上来看是相当浪费的,3.5mm音频线的频谱资源潜力巨大,20kHz以上的频段全都空着。要我说,用一根双声道3.5mm音频线传64声道杜比全景声从技术上来说没有任何难度,毕竟每个信道需要的带宽只有20kHz*32=640kHz,还没双声道S/PDIF的带宽大。就是肯定不能插上耳机直接用了,需要单独开发专用的模拟调制/解调器,其实也不难实现,比FM广播那套模拟调制解调系统简单多了,不过杜比那帮人太懒,也没几个懂通信技术的,觉得还是数字传输方便,数字总线都是现成的。


      IP属地:美国3楼2023-12-05 12:37
      回复
        2. 什么是总线?接口和总线有什么区别?
        总线(bus)是一个没有明确定义且其内涵非常含糊不清的词,在不同的语境中表达的意思经常不一样。所以尽管我准备给出一个我个人认为非常通用的定义,在这里也要先说明一下此定义仅适用于本帖所提及的内容。好,定义来了,总线就是:数字系统之间可以交换数据的连接,这种连接有明确的物理层(physicallayer)和数据链路层(datalink layer)的规则。
        所谓物理层,就是指具体的物理连接。包括了两个数字系统之间有几根线;线的材质、几何形状,比如双绞线、同轴线、光纤;数字系统是如何驱动连接线的,比如推挽输出、上拉/下拉电路、光纤激光器;等等。在物理层所有信号都是以物理量形式存在的,比如电压、电流、电场、磁场、光强。
        我们把物理层的那些电压电流之类的信号抽象成‘0’和‘1’之后,就来到了数据链路层。数据链路层规定了在这些‘0’和‘1’中哪些是数据,哪些是地址,哪些是指令,哪些是标记。在发送和接收的过程中,所有的数据都要按照数据链路层的规则“排列”好。至于发送/接收的数据代表了什么信息,那就不是数据链路层要管的事了。
        总线的英文是bus,顾名思义就是数据的公交车,那理应会有多个“站点”,但也未必。比如今天我们要讲的I2S和S/PDIF都是一对一的总线,所以可能用“专线”来形容更为恰当。对于多对多的总线,需要考虑的问题就更多,比如需要一个看地址的(addressdecoder)找站点在哪里,还需要一个裁决者(arbiter)来决定公交车先去哪个站。我们的I2S和S/PDIF相比之下就要简单得多了。
        接口(interface)相比于总线,其内涵更加明确。按我的理解就是指总线物理层的全部,有时特指总线物理层线材连接的地方。比如S/PDIF就支持两种接口:同轴线和光纤,这代表着S/PDIF物理层有两套标准,它和数据链路层之间是相互独立的。再举个例子:装过机同学都知道SATA硬盘有两种接口:SATA和m.2。如果你主板上有一个SATA接口和一个m.2接口,都插着同一版本的SATA硬盘,那么他俩虽然物理层不一样,但数据链路层的规则基本是一样。但如果m.2接口连上了PCIe硬盘,那么它和SATA硬盘在物理层和数据链路层上就都不一样了。


        IP属地:美国4楼2023-12-05 12:38
        回复
          3. 低速接口和高速接口有什么区别?
          不同领域、不同文化、不同时代的人对于高速和低速的区分可能都有不同,但是至少在芯片设计领域内高速接口是有明确定义的,就是用了SerDes技术的高速串行接口(后面简称为SerDes),除此之外的所有接口均为低速接口,比如I2S和S/PDIF,从任何角度来看都是低速接口。SerDes技术已经应用在了近几年的PCIe和DDR5中,不过SerDes应用最成功的案例还要数AMD的CPU。2015年AMD的CPU产品全线被Intel按在地上摩擦,股票跌到一块多,再跌一点就要成毛票了,当时人们都觉得AMD是要退市破产的节奏,应届生找工作都不敢接AMD的offer。但也就是在2015年,AMD的chiplet产品(即多块硅片连接组成一个芯片)横空出世,开始扭转局势。前年AMD股价较2015年低点涨了100倍,去年AMD市值反超Intel,上演了一出惊天逆袭。有人说AMD早在1965年就用chiplet了,但现今的chiplet和以前是有本质区别的,那就是今天AMD chiplet之间的连接用了SerDes技术而之前没有,这个区别就和算盘与计算机之间的区别差不多。还有些中国网友戏称AMD的SerDes连接为“胶水”,这实在有点委屈SerDes了,因为SerDes至今仍是芯片设计领域里最难设计的模块之一,其难度绝对不比设计CPU核心低。当然AMD的成功也少不了CPU核心设计团队和台积电的努力,但SerDes救活了AMD这个说法,我觉得并不夸张。
          对于低速接口来说,影响其传输速度(即“比特率”-每秒传输几个比特。还有个名词叫波特率,是指每秒传出去几个码元,本贴所涉及的内容中任何一个码元都带1比特的信息,所以两者不作区别)有两个:时钟频率和并行数据线的数量。简而言之就是时钟越快,比特率越高;数据线越多,比特率越高。举个例子,I2S只有一根串行数据线,假如时钟用了1MHz,那么它能达到最高的比特率就是1bit * 1MHz = 1Mbit/s 。
          所以速度较快的低速总线都是并行的,早年串行接口一般只给数据吞吐量不大的设备用。但随着接口速度的不断提升、频谱利用率的提高、传输速率向香农极限一次次的靠近,人们发现了一个有点反常识的结论,那就是串行接口的速度要比并行接口快,而SerDes技术也与之一起诞生了。并行接口做不快主要是因为多信号同步的时序问题很难解决,想了解的话去查查DDR技术为什么进展这么慢就知道了。而SerDes每个时钟周期只发送1比特的数据信号,时钟信号本身也不发送出去,接收端要从收到的数据中还原出发送端的时钟信号。由于数据信号频率很高,信号线也不能看作普通导线了,得当波导处理,搞射频/微波的人称之为传输线,其设计会保证收发两端不会反射导线上的信号(这里的信号已经是电磁波了)。另外还有各种频域均衡、时域均衡用来保持其信号完整性。SerDes具体的技术我也不太懂就不多说了。
          说了这么久SerDes,你肯定想问这和我们今天的话题有关系吗?这和数字音频好像确实没啥关系,毕竟音频那点数据量根本用不上SerDes。但是,我发现我们这次要讲的S/PDIF和SerDes非常形似,我都怀疑最早研究SerDes的人是不是受了S/PDIF的启发。S/PDIF也是每个时钟周期发送1比特数据,时钟由接收端还原,时钟还原方法和SerDes几乎一样都得用PLL(锁相环)。但不同的是SerDes速度极快,S/PDIF很慢;SerDes频谱利用率极高,S/PDIF极低;SerDes只用两根线(因为是差分信号)是为了追求极致速度,S/PDIF用两根线主要是为了省钱(尽管HIFI老哥们把省下来的钱加倍花了出去);SerDes所要解决的问题,在S/PDIF的应用场景里全都不是问题。


          IP属地:美国5楼2023-12-05 12:40
          回复
            I2S 总线
            好了,我们终于开始讲第一个音频总线—I2S,读作I方S(I square S),是Inter-IC Sound的缩写。这个缩写形式跟EVA里的N2炸弹一个套路。它是80年代飞利浦半导体部门(现NXP恩智浦)设计的专门用于芯片之间传输音频数据的总线。这个总线设计相当简单,只能单向传数据。应用也相当广,据我所知现今几乎所有能收发PCM音频信号的芯片都支持I2S。同学们可能要问,如果只能单向传数据岂不是连另一端的芯片上没上电都不知道?确实是这样,所以飞利浦同年代还设计了一个I2C(读作I方C)总线用于控制,和I2S搭配使用。I2C有握手、寻址、读写数据的功能,两个芯片先用I2C交流好,再相约开启I2S传数据,传到一半中间有问题再通过I2C交流。I2C这玩意儿应用更广,现今几乎所有价格超过1人民币的芯片都支持。
            I2C,I2S搭配使用听着很美好,但I2C用2条线,I2S用3条线,芯片光支持收发PCM信号这一个功能就得用5个引脚。要知道芯片的引脚资源是非常宝贵的,尤其是在小芯片身上。同样的功能,如果用soundwire的话,两个引脚就搞定了。但I2S毕竟还是最通用的总线,面向大众市场的音频芯片不得不支持,也算是个历史包袱了。
            I2S总线的基本连接和时序图如下:

            I2S的三根线分别是:SCK(serial clock,时钟),WS(word select, 左右声道选择),SD(serial data,串行数据)。SD永远是由发送端输出给接收端。当发送端是主(master),接收端是从(slave)的时候,由发送端生成SCK和WS;当发送端是主接收端是从的时候,则由接收端生成SCK和WS。在每个SCK的下降沿SD都会更新一个新的比特,将这些比特拼接起来就是一个完整的PCM数据,图中的MSB(most significant bit)是最高位,LSB(least significant bit)是最低位。WS为0时表示传输的是左声道,WS为1时表示传输的是右声道。
            同学们可能会问为什么SD的左右声道区域要比WS晚一个时钟周期。这个问题做数字IC的看一眼就明白,是为了接收端省一个触发器(flip-flop)。省一个触发器这件事在80年代可能还有点作用,但现在来说这省下来的面积/功耗完全可以忽略不计。可以看出I2S在节省芯片数字逻辑方面做得很细致,却在使用芯片引脚上大手大脚,这可能就是80年代的风格,和现代的芯片设计已经格格不入了。
            同学们可能还有疑问,这个SCK的频率有规定吗?没有规定,视需求而定。比如我要实时传输两个声道的48kHz24-bit的PCM信号,那么SCK的频率就得是48k*24*2 =2.304MHz。这样的话主从设备都要支持2.304MHz的SCK。如果下次我们不用48kHz的PCM,改用44.1kHz的,SCK频率又得跟着变,而且主从都要支持所有SCK频率,这就很不灵活了。所以现在用的I2S很多都是魔改版本,一般魔改的点有:1.让比特率和SCK频率之间的相互独立。2.支持更多声道。3.支持不同采样率/位宽的PCM声道同时发送。


            IP属地:美国6楼2023-12-05 12:42
            回复
              S/PDIF总线
              S/PDIF是Sony Philips Digital Interface的缩写,是索尼和飞利浦于80年代推出的音频数据总线,主要用于音频设备之间的信号传输。不同于用于芯片之间的I2S,它的设计中有更多系统兼容性和长距离(指超过10厘米)传输的考量。和I2S一样,S/PDIF也是在其应用场景内现今最流行的数字音频总线。S/PDIF不仅支持传输PCM信号还支持PDM信号,另外如前面所说S/PDIF支持同轴线和光纤两个物理层标准,下面我们只考虑PCM和同轴线(其实看完之后PDM和光纤是怎么回事肯定也能想象得出来)。前面讲I2S的时候基本没讲物理层的东西,那是因为实在没啥好讲的,后面我讲S/PDIF物理层编码时会连着I2S一起讲。
              不同于I2S有SCK,WS,SD三个信号,S/PDIF只有一个数据信号(相当于只有SD)。但它并不是只有一根线,而是有两根,两根线之间的电压差代表其数据信号,我们称这种信号为差分信号(differential signalling)。差分信号最大的好处是可以屏蔽外界电磁干扰,比如说双绞线,外界的电磁干扰在两根线上加的噪声几乎是一样的,那么两根线的信号差值就完全不受影响。I2S之所以不需要用差分信号,一是因为芯片之间距离不会太远,不需要用差分信号抵消电磁干扰;二是因为I2S连接的两个芯片用的是同一个地线(ground),所以其实I2S的SD也可以看成某种没有做特别抗干扰设计的伪差分信号(pseudo-differential),另一根信号线是地线。而对于S/PDIF来说若不用差分信号,即便没有外界电磁干扰,如果两个音频设备间的地线间存在电势差,信号也无法正确传输;如果不用差分信号,S/PDIF就必须要加一根地线,依然是两根线。所以,对于S/PDIF这两根线是必须的,其他多余的线,S/PDIF是一根都没加,省到了极致。
              没有SCK和WS,那S/PDIF是怎么传递时钟和声道信息的?先说时钟,正如前面所说,S/PDIF接收端会用PLL(锁相环)从数据中把时钟还原出来。PLL具体工作原理就不细说了(细说的话得专门开一贴),PLL本身也是音频芯片中极为重要的模块,会直接影响音频信号质量。PLL包括了一个可控振荡器,和一个反馈回路,反馈回路通过比较振荡器信号和参考信号(这里参考信号就是S/PDIF发来的数据)的上升/下降沿来调整振荡器的频率和相位,最终使振荡器信号的上升/下降沿和参考信号完全“锁住”,这样接收端的振荡器就还原出了发送端的时钟信号。
              再说S/PDIF怎么传递声道以及数据开始/结束的信息的,简单说就是在数据中插了各种标志位,这也是所有串行总线惯用的做法,S/PDIF并没有什么特别的。下图是S/PDIF传输每个PCM样本(sample)的数据格式,24比特的PCM信号一共传输了32比特的数据,这32比特的数据称为S/PDIF的一个subframe。

              上图中Preamble用于区别声道,Preamble后面跟着的就是PCM数据,再后面的V表示数据是否有效,U是用户位,C是控制位,P是奇偶校验位,用于判断前面传输的数据有没有单比特错误。有了这些标志位,接收端就能分辨不同声道还有了一定的纠错能力。这些标志位的具体用法这里就不细说了,有兴趣的可以自己去查。


              IP属地:美国7楼2023-12-05 12:44
              回复
                S/PDIF的BMC码
                S/PDIF的物理层(无论同轴线还是光纤)使用了双相记号码(BiphaseMark Code,中文是我自己瞎翻译的),后面简称为BMC。这是为了:
                (1)消除直流分量。如果传输信号中存在直流分量的话就意味着它在传输过程中不能使用电容耦合或者变压器耦合,其系统兼容能力就会降低。另外直流分量不是零意味着其最佳判决电平(二进制逻辑中,信号大于判决电平为‘1’,小于判决电平为‘0’)是一个非零的值,这个值是多少和信号统计特性有关。一般来说最佳判决电平非零的信号进行长距离传输时要用自动增益控制模块(automatic gain control,AGC)来使其最佳判决电平变成零。
                (2)尽量增加信号翻转,这样的话接收端PLL那边就能多收到一些信号上升/下降沿,让时钟还原变得更容易。
                为了说明BMC的好处,我们先来看看不太适合用作长距离(指超过10厘米)系统间传输用的编码,就比如说I2S用的单极性(unipolar)NRZ(non-return-to-zero,不归零)码。假如我们通过I2S发送01000011这串数据,那么在SD线上会看到:

                我们把每个比特对应的波形称为码元,上图中可以看出单极性NRZ在t=0处代表‘0’的码元为y(t)= 0, 0<t<Ts。代表‘1’的码元为y(t)= Vio, 0<t<Ts。其中Vio为芯片IO管脚电压,每个芯片会不一样但是个定值;Ts为码元长度,即为比特率的倒数。很明显,如果数据的’0‘和’1‘一样多,那么最佳判决电平就是Vio/2。如果0比1多,则最佳判决电平会低一些,反之则会高一些。这里我给同学们留个思考题:对于这个NRZ码,假如’1‘出现的概率为P,‘0’ 出现的概率为1-P,信号传输中会加入随机高斯白噪声,噪声期望为0标准差为σ,问当判决电平为多少时误码率最低?
                想必思考过的同学已经明白,我们传输的信号可以看作一个随机过程。对于’0‘和’1‘各为50%概率的单极性NRZ码,早有人算过它的功率谱密度:

                上图截自我10年前上的通信原理课的课件,同学们可以无视RZ。计算过程略复杂,就不贴了。最后NRZ式中Ts就是前面说的码元长度,Sa是sinc函数(第一篇科普贴里讲过),δ是冲激函数或者叫狄拉克函数(第一篇里也讲过),图中fs为码元速率,即为比特率。从功率谱密度图像中可以看出,单极性NRZ码不仅有直流分量,其交流分量很大部分能量也集中在直流附近,这对于电容耦合和变压器耦合是非常不友好的频域特性。


                IP属地:美国8楼2023-12-05 12:49
                回复
                  S/PDIF的BMC码(续)
                  要消除单极性NRZ码的直流分量最简单的方法就是依然用Vio代表’1‘,改用-Vio来代表’0‘,但这有个前提就是’1‘和’0‘的数量要相等,假如’1’和’0‘的数量不相等的话还是会有直流分量。如果要让0/1的概率和直流分量大小互不相关,就必须让0/1和码元电平互相独立。以此为出发点,很自然就能想到个方法:信号在Vio和-Vio两个电平间跳变,遇到‘0’保持电平不变,遇到‘1’则翻转。这也就是NRZI码(non-return-to-zeroinverting)。

                  上图依然是01000011,但编码规则改成了NRZI。根据信号初始状态(Vio或-Vio)可以有两种波形代表01000011,这里为了方便我只画了一个。这张图看上去还是有直流分量的,但是如果时间足够长且信号为准平稳随机过程的话(实际上并非如此,但可以这么假设),那信号平均值将趋于0,即没有直流分量。虽然NRZI消除了直流分量,但它还有一个问题没解决,就是遇到连续的‘0’时会导致信号长时间不翻转,这会使接收端PLL还原出的时钟信号偏离发送端的时钟,从而导致接收端有时会多数一个0或者少数一个0。
                  这个问题如何解决呢?USB总线用的就是NRZI码,它的解决方法是如果信号长时间不翻转的话就人为加进去一个翻转(USB的NRZI和上图稍有不同,是0翻转1保持,如果碰到连续6个1,那么会在后面插一个0)。USB这么做显然是对硬件颇有信心,相信接收端的时钟还原电路在没有信号翻转的情况下能稳定工作一端时间,不过随着USB的比特率越来越高,这种方法也已经不够用了,USB3.0采用了8b/10b编码来解决这个问题。
                  相比于USB,S/PDIF的设计更为保守(毕竟早了十几年),用BMC码来增加信号的翻转率。简而言之BMC就是个翻得更快的NRZI。NRZI是0保持1翻转,BMC则是0翻转一次1翻转两次。01000011信号的BMC如下:

                  显然BMC是严格没有直流分量的,同时又保证每个码元都有翻转,完美符合我们的要求。但它难道没有缺点码?当然有,缺点就是需要更高信道带宽。


                  IP属地:美国9楼2023-12-05 12:51
                  回复
                    信道带宽
                    这里我来试着分析一下I2S和S/PDIF所需要的信道带宽,事先声明这不是什么严谨的计算,只是大概估算一下,但我觉得保证数量级正确应该是没什么问题的。信号传输过程中会遇到外部噪声影响、非线性现象导致的谐波失真、信道频响特性导致的码间串扰等问题。这里我们就不考虑噪声和非线性了,只看看后面这一项:信道频率响应特性导致的码间串扰。这是因为另外两个都可以通过别的方式解决,而要消除码间串扰只能增加信道带宽。也就是说,我们后面得到的带宽是个理论下限,最后系统需要多少带宽还要看噪声、谐波失真有多严重。
                    信号从发送端传到接收端,这中间会有线性畸变,这是由信道系统特性所决定的。我们假设信道是一个一阶低通系统,输入信号为x(t),输出信号为y(t),其时域输入输出关系可以写为:

                    其中ωc是常数,同学们后面就会明白我为啥要写成这个形式。将上式两边傅里叶变换,再移一下项可以得到该系统的频率响应函数:

                    这是一个极点在-ωc的一阶低通系统,其幅值响应图像是这样的:

                    从上图中可以看出,角频率为ωc的正弦波输入进系统会被衰减3dB(大约能量减半)。输入信号中角频率小于ωc的低频分量会近似于无损通过系统,而角频率大于ωc的高频分量则会被大幅衰减。所以对于这样的一个一阶低通系统,我们称ωc为其截止(cutoff)角频率,称低于ωc的频段为通带(passband),高于ωc的频段为阻带(stopband)。我们称此系统的带宽为ωc,如果以赫兹为单位的话其带宽就是fc=ωc/(2π)。


                    IP属地:美国10楼2023-12-05 12:53
                    回复
                      信道带宽(续)
                      在计算I2S和S/PDIF所需要的信道带宽之前我有必要说明一下为什么要假设信道是个一阶低通系统,不仅仅是因为它简单,还因为它和至少七八成的实际情况是比较符合的。学过电路的同学都知道最简单的RC电路就是上面所说的一阶低通系统。而在实际系统中,很多时候芯片管脚外面连着的就是RC电路;还有些时候系统有很多零极点,看似非常复杂,但其低频特性却主要是由其最小的一个主极点决定的,所以在低频可以近似看为RC电路。
                      好了,我们现在来看一下什么时候会出现码间串扰。对于一个低通系统来说,其带宽不够用时的表现就是响应速度不够快,体现在我们的数字信号传输上那就是信号翻转不够快了。我们来设想一个最坏情况,假设输出信号y在t=0时已经稳定在-Vio了,而这时输入x突然翻转到+Vio,那么y会怎么变呢?我们把x(t)=Vio,y(0)=-Vio带入楼上的时域输入输出关系,可得方程的解:

                      可以看出输出会从-Vio慢慢变化到+Vio,其变化速度随时间指数衰减,理论上永远也到不了+Vio。不过前面说过,我们的判决电平是0,所以只要在接收端采样的时候y>0就能获取正确的数据,如此说来只要在大约t=0.7/ωc之后采样就不会出错了。当然,在t=0.7/ωc采样还是太危险了,稍有点噪声或者时钟有点偏差或者判决电平有点偏差都会误码,我们这里就取个整,假设当t>1/ωc时,接收端可以获得正确的数据。同学们可以回楼上去看一下NRZ,NRZI和BMC的波形,一眼可知NRZ和NRZI都是每个码元需要采样一次,而BMC则需要每个码元采样两次。也就是说对于NRZ和NRZI来说,不出现误码的条件是Ts>1/ωc;而对于BMC来说,不出现误码的条件是Ts/2>1/ωc。
                      我们把系统带宽fc=ωc/(2π),比特率fs=1/Ts带进去整理一下,就得到了不会因为码间串扰导致误码的最小带宽条件:

                      假设我们在实时传输双声道48kHz24-bit的PCM数字音频信号,其比特率为2*48k*24= 2304kbit/s。如果用的是I2S传输,那么其信道带宽至少需要2304/(2π)=367kHz。如果是用S/PDIF传输,注意到它每个24比特PCM样本需要传32比特的数据,且用了BMC码,所以其信道带宽至少需要(32/24)*2304/π= 978kHz 。
                      聪明的同学可能已经想到了,我们可以在发送或者接收端加个滤波器补偿一下频谱,就可以提高ωc从而降低码间串扰了。这其实就是Serdes用的均衡器(equalizer),不过这对于I2S和S/PDIF肯定是用不上了,因为做出不到1MHz的信道带宽实在太容易了。


                      IP属地:美国11楼2023-12-05 12:55
                      回复
                        讲了这么多频谱的利用,我们还没看过NRZI和BMC信号的频谱。我们现在就拿第一次听上去就会发疯似地爱的《门德尔松e小调小提琴协奏曲》中的10秒来做个实验(去年我第一次在现场听这个曲目的演出,确实令人发疯似的爱。另外别问我为什么只有10秒,再多我这破电脑的内存就爆了)

                        我们把相同的一段PCM数据转换为串行的单极性NRZ码、双极性NRZI码和双极性BMC码,然后做傅里叶变换,画出它们的频谱:

                        三个图都做了归一化处理,图中可能看不太清楚,单极性NRZ有一个0dB的直流分量。NRZI虽然直流分量较小,但其在直流附近的能量很大,可能是因为没有像USB那样在多个保持信号中插翻转的缘故。BMC直流附近的信号最小,表现最好。但是BMC频谱主瓣宽度最大,有2fs,NRZ和NRZI的主瓣宽度都是fs,这也意味着BMC码的信息分布在更高的频率,其传输需要更大信道带宽。
                        这篇帖子讲到这里就差不多了,以后有空我再写第三篇。马上又要圣诞假期了,提前祝大家圣诞快乐。
                        (完)


                        IP属地:美国12楼2023-12-05 12:58
                        回复