随着互联网语音(Voice over IP, VoIP)的日益普及,确保服务和设备能够提供最佳的音质成为这类解决方案的关键因素。无论是VoIP的商业用户或普通消费者,都期望VoIP的音质至少能够达到现有移动或PSTN电话的水平。这意味着设备及应用开发商面临着严峻的设计挑战,因为他们必须考虑终端用户的整体音频使用感受。本文将探讨开发商要确保VoIP设备的最佳音质所必须解决的一些问题。
电信应用的语音处理领域,在过去数十年引起了广泛的兴趣;同时,这些年来,业界一直不断开发质量极高的解决方案。也因为如此,终端用户对语音解决方案有着某种程度的质量预期。尽管VoIP在成本节省和服务改进方面提供了各种优势,但部分由于质量的问题,其推广一直不太顺利。事实上,在传统电话系统和新兴的VoIP系统之间存在着若干基本差异,如果处理不恰当,可能对音质造成严重影响。
本文将讨论VoIP面临的主要特殊挑战,并阐释了通过正确的设计,VoIP解决方案的质量甚至可以大大超越PSTN。本文的要点在于全面论述影响端到端质量的所有问题,并涵盖每个问题的主要因素,而非专门探讨某一特定论题。
语音编码解码器
VoIP系统中基本的算法构建模块是语音编码解码器(codec),它具备若干重要特性,包括语音质量、比特率、延迟、采样率、包丢失稳健性、复杂性,以及对输入信号类型的灵敏性。语音编码解码器所产生的语音质量,定义了可获得的端到端质量的上限,这又决定了理想网络(没有包丢失、延迟、抖动、回声或其它影响质量的因素)条件下的音质。
语音编码解码器的其它影响总体音质的相关因素还包括:对不同语音的处理,以及非语音信号(背景噪声、音调和音乐等)的质量。
●Codec的选择
语音解码器的比特率(bit-rate)决定了网络的带宽负载。此外,数据包标头(IP、UDP、RTP)也显著地增加了带宽的负载。事实上,传输协议引起的开销(overhead)常常超过实际有效负载的比特率。结果,比特率极低的编码解码器的带宽利用率可能较中等比特率的编码解码器低不了多少,因此,不能单独根据语音编码解码器的比特率来进行比特率和质量之间的权衡取舍。
VoIP环境中使用的语音编码解码器必须能够处理包丢失问题。这种稳健性决定了满载的网络和拥塞条件下的音质,因为这两种情形都很可能发生包丢失。包丢失问题将在后面讨论。
语音编码器引入的延迟可以分为算法延迟和处理延迟。产生算法延迟的原因是模块处理的成帧,因为编码器会产生一组位(bit)代表一组语音样本。此外,许多使用模块处理的编码器还具有预测(look ahead)功能,该功能在模块编码之前,需要对后来的语音样本进行缓冲,这增加了算法延迟。处理延迟是指编码解码一组语音样本所需要的时间。
语音编码算法的复杂性决定了计算工作量和所需内存。复杂性是实现编码解码器的一项重要成本因素,一般随比特率的降低而增加。同样地,内存的要求也会影响实现的成本。
把用于窄带产品的8 kHz采样频率提高到用于宽带语音编码的16 kHz,可以产生更加自然、更令人舒适、而且更清晰的语音。迄今,宽带语音编码只用于视频会议等非常有限的应用领域,因为语音编码器主要与公共交换电话网络(PSTN)相互作用,后者本身是窄带的。VoIP的通话是在IP网络内部开始与结束的,故没有这种限制。因此,由于可获得动态质量的提高,用于下一代VoIP的语音编码解码器将是宽带的。
基本上,所有理想的参数诸如低比特率、低延迟、低复杂性和低内存使用率等,均与获得高基本质量和包丢失稳健性这一总体目标相冲突,因此需要适用于不同环境的多个编码解码器。
●实现问题
由于语音编码标准是通过位准确(bit-exact)标准规范来定义的,因此很容易便认为所有的实现都是相同的,但其实不然。事实上,为了减少复杂性和内存利用率,而对位准确性和质量进行权衡取舍是极为常见的。如果需要脱离标准,就必须极其谨慎,并必须对代码进行全面测试,包括高或低输入级和音调等特殊情况,以验证质量是否受损。偏离规范的另一个原因是某些标准中含有众所周知而没有进行纠正的“错误”(bug)。这种情况下,与标准不兼容的实现方案提供的质量,可能反而比兼容的要好得多。
有时候看起来似乎是编码解码器实现的问题可能有时与信号处理相关,比如滤波和有关时序安排及缓冲的问题。
在执行任何信号处理算法时,有一个非常重要的问题,就是如何充分地利用可用的内存。能够支持的信道数目往往是受限于内存的限制而非复杂性。不过,这是没有什么适用的普遍指导方针,因为每一种情况都不相同。例如,应该分配多少动态内存在某些暂存区域(scratch area);又有多少应该用于堆栈,都主要取决于配置。要获得最好的内存利用率,每一个器件都以类似的方式进行实现也是很重要的,这样公共内存区域才能够得到充分利用。
解决网络质量下降问题
与数据包网络相关的三大主要因素,即延迟、抖动和数据包丢失,对可感知语音质量(perceived speech quality)有着重大影响。这3个因素都源自数据包网络的特性,该种网络不能确保语音数据包及时到达接收端、或甚至不能确保其能够到达。这与传统电话网络截然不同,后者极少或从不出现包丢失现象,而且,传输延迟常常是固定参数,不随时间而变化。上述网络影响是区分VoIP语音处理和传统解决方案的最重要因素。如果VoIP设备无法以令人满意的方式解决网络质量下降的问题,那么其质量就永远无法获得接受。因此,在VoIP产品的设计和实现,以及在语音编码解码器等器件的选择中,把IP网络的特性考虑在内是至关重要的。在接下来的各段中将讨论延迟、抖动和包丢失,以及其解决这些挑战的方法。
●延迟
影响双向通信感知质量的因素有许多。其中一个极其重要的参数是两端点之间的传输延迟。若延迟很长,就可能严重影响对话的质量和舒适度。长延迟引起的两个主要效应是恼人的回声和发话语音重叠(talker overlap),二者都会造成感知对话质量的严重下降。
在传统的电话中,只有长距通话或与移动电话通话才会产生长延迟。但对VoIP而言,却未必如此。VoIP设计中常常忽略了过多延迟的影响,因此,甚至在短距通话中也导致严重的质量下降。一般在无线局域网(WLAN)上进行的无线VoIP正越来越受欢迎,但这也进一步提高了延迟管理的难度。
延迟对通信质量的影响不容易测量,其随使用环境的不同而有很大的变化。例如,由于手机的移动性提供了额外价值,所以使用者对在手机环境中长延迟的嫌恶不像在传统有线电话中那么明显。此外,回声的存在也对人们的延迟灵敏性产生重大影响:延迟越大,感知质量则越低。因此不可能给出一个单独的数字,来表明究竟多长的延迟是可以接受的, 而只能提供一些指导方针而已。
如果总体延迟大于40ms,就能听见回声。延迟较小时,回声将只被视作预期了的侧音(side-tone)。只要延迟不太大,回声消除算法可以消除大部分回声效应。若延迟太长(大于200ms),即使使用了回声消除 ,也很难维持一种无发话语音重叠的双向通话。这种影响常常由于回声消除器设计的缺陷而被强化。不过,在纯 VoIP通话中(没有端点与PSTN相连),也可能不会产生回声,这时稍大的延迟是可接受的。
国际电信联盟电信标准化部门(ITU-T)在G.114标准中建议,单向延迟应该低于150ms以获得可以接受的通话质量(见图1。图中,质量的感知影响是延迟的一个函数)。150ms-400ms的延迟是可以接受的,但前提是管理人员知道这个时间对用户应用程序质量的影响,超过400ms的延迟则不能接受了。
●丢包
大部分丢包都发生在路由器中,原因在于路由负载很高或链路负载很高。在这两种情况下,队列中都可能出现丢包现象。传输链路出现故障时也会引起丢包。其结果是数据链路层错误和不完整的数据包被丢失。配置错误及冲突也可能导致丢包。在非实时应用中,丢包可以在传输控制协议(TCP)层通过重发得以解决。但对电话而言,这却不是可行的解决方案,因为重发的包到达太晚而无用。
当发生丢包时,必须采用某些机制来填补失去了的语音信号。这种解决方案通常被称为丢包错误掩盖(packet loss concealment, PLC)算法。为了获得最佳性能,这些算法必须对语音信号进行准确预测,并在以前的解码语音和插入片断之间顺利过渡。
由于丢包主要发生在网络重负载时,故突发传输中会不时出现丢包现象。一个突发可能包含一系列连续丢失包或一段高丢包率时间。显然,当连续丢失几个数据包时,就算是最好的 PLC 算法也难以获得可接受的语音质量。
为了节省带宽,有时一个数据包会加载了多个语音帧,这样一来,丢失了一个包也有可能导致多个帧的丢失。即使只是偶尔出现丢包现象,用户接听时的感觉也类似于突发传输中丢包的感受。
●丢包错误掩盖
以往,处理丢包的方法主要有两种,而且非常简单。第一种叫做零填充(zero stuffing, ZS),即简单地用与丢包持续时间一样长的静默期来代替丢失了的包。这种方法当然不能提供高质的输出,即使丢包率低到1%,噪声也会很明显。
第二种方法是包重发(packet repetition, PR),即假设两个连续语音帧之间的差异相当小,并通过简单地重发前一个数据包来代替丢失了的包。然而,在实际情况中,那怕音调频率有微小变化,我们的耳朵也是可以轻易地识别出来的。此外,利用这种方法,要实现数据包之间的顺利过渡事实上是不可能的。不过,在丢包几率非常小(小于3%) 时,采用这种方法也相当不错。
不过,重发以前的数据包等这些简单方法并不能为无线应用提供足够好的质量。相反,一种复杂的算法可以处理10%的丢包而不会导致明显的性能下降。
处理丢包的另一种方法,是推行一种专为丢包处理而设计的语音编码技术。目前尚没有任何一种语音编码标准(如:ITU codec)采用这种方法,故它们均对丢包十分敏感。不过,在传统的语音编码标准机构之外,一些稳健的新编码解码器正逐渐获得采纳。例如互联网工程工作小组(Internet Engineering Task Force, IETF)正在制订iLBC语音编码解码器的标准。
图2显示了多种处理G.711编码解码器丢包方案的主观接听测试结果。ZS和PR方案很明显不能提供可接受的质量。G.711附录I(图中标注为ITU PLC)中描述的丢包掩盖方法具有较好的质量,但明显不如 (NetEQ)描述的方法,也不如专为称作增强型G.711的数据包网络而设计的编码解码器。
●网络抖动
与恒定的算法延迟及处理延迟不同,传输延迟随时间而变化。这是因为一个数据包通过IP网络的传输时间将受排队的影响而有所不同。传输延迟分为两部分,恒定的或变化缓慢的网络延迟,以及基本网络延迟之外、通常被称为抖动的快速变化。抖动的定义是连续数据包之间延迟差值对时间的平顺函数。
数据包网络中出现的抖动使接收器设备中的解码过程变得复杂化,因为解码器要求快捷和及时地获得数据包,否则解码器就不能产生平顺连续的语音。抖动缓冲器一般是用来确保在需要时能获得数据包。
●抖动缓冲器设计
为了确保在需要发送时有可用的数据包,必须采用一个抖动缓冲器。它可以消除数据包到达期间的抖动,但代价却是令总体延迟加长。抖动缓冲器算法的目的是尽可能减小缓冲延迟,同时,把到达太晚而无用的数据包数量减至最小。较大的抖动缓冲器会令延迟加长,但丢包减少;较小的抖动缓冲器虽然可降低延迟,却提高了丢包率。
传统的解决方案是先把进入的数据包存储在一个缓冲器中(包缓冲器),然后再发送到解码器。由于数据包可能不按顺序到达,故抖动缓冲器并非一个严格的先入先出(FIFO)缓冲器,而是根据需要对数据包进行重新排序。最直截了当的方案是让缓冲器拥有固定数量的数据包,这将产生恒定的系统延迟,不但无需计算,而且也最简单。不过,其缺点却是缓冲时间必须够长,足以应付最坏的情况。
为了尽量减少延迟,抖动缓冲器算法必须能迅速适应不断变化的网络条件。因此,目前最常用的是能够进行动态大小分配的抖动缓冲器,即所谓的自适应抖动缓冲器(adaptive jitter buffer)。实现这一适应性的方法,是把数据包插入到缓冲器中以加长延迟,以及丢弃数据包来缩短延迟。数据包插入一般就是指重发之前的数据包,但这会导致听得见的失真。因此,要缩短延迟以避免质量下降时,大多数自适应抖动缓冲器算法都是非常谨慎的。
这种传统数据包缓冲器方案的适应粒度(adaptation granularity)一般受数据包大小所限制,因为它只能够通过增加或抛弃一个或几个数据包来改变缓冲时间的长短。
传统抖动缓冲器的另一个主要局限性是,为了尽量减低除去数据包时所产生的听得见的失真,传统抖动缓冲器一般只在静默期工作。因此,延迟是在话音突发(talk spurt)期间建立的,而且可能需要数秒种时间才能令延迟缩短。
最近,业界出现了一种将先进的自适应抖动缓冲器控制和错误掩盖结合在一起的解决方案。这种独特的算法把自适应抖动缓冲器控制和丢包掩盖集成在一个单元里,能够在毫秒之内改变缓冲器的大小。该方案可以迅速适应不断变化的网络条件,并确保具有最短延迟的最佳语音质量。这是可以做到的,因为算法是与解码器一起工作,而不是在数据包缓冲器中进行。除了把抖动缓冲器延迟减至最小以外,该算法的丢包掩盖部分乃基于一种新颖的方案,能够获得比标准PLC方法更好的质量。实验显示,在典型的VoIP环境中,采用这种方案可使单向延迟减小约30ms-80ms(注2)。
●回声消除
影响端到端质量的其中一项要点是对话期间出现的回声量。这种影响只会在两个端点建立起通话之后才会出现。为了避免回声的干扰,常常在信号路径的某个合适点处插入一种回声消除算法。要获得高音质,对回声消除器的要求非常严格,而事实上,从某种意义上来说,现在所有的算法都是不完美的。不良设计的后果表现在好几个方面,最常见的有:1.听得见的回声;2.语音削波;3.双向通话性能差。
如果来回延迟大于40ms,回声将产生严重干扰。由于 IP 电话系统中的延迟相当高,发话者可以听到明显的回声。因此,要维持高通话质量,必须消除回声。有两类回声可能会降低语音质量:网络回声和声学回声。
●网络回声消除
网络回声是电话网络中的主要回声源,其产生原因是PSTN交换设备中混合电路的阻抗失配,在这种混合电路中,两线用户环路线与长距干线 (图3) 的四线环路线相连接。网络回声路径是固定不变的,除非通话被转移到另一个手机上或有第三方连接到电话通话上,这才会导致回声路径的突然改变。
如前所述,数据包交换网络中常用的回声消除或削减解决方案,基本上采用电路交换网络的技术。但要获得最佳质量,必须利用系统性方法来解决数据包网络特有的音质问题。在“重新包装的”电路交换回声消除器和最优化的数据包网络回声消除器之间存在着明显的差异。例如,PSTN本身没有处理数据包的能力,故在进行能量计算以决定是否更新自适应滤波器时,只会考虑个别的语音样本。相反,专门为数据包网络而设计的消除器就可以执行数据包预测处理,即不仅考虑当前的数据包,还考虑到了80或160个等的额外样本。通过基于整个数据包的计算,可以获得更高精确度的滤波器更新和双向通话检测。
●声学回声消除(AEC)
当电话的话筒和扬声器之间(这主要是与无线及免持设备相关的问题)、或基于PC系统的麦克风和扬声器之间存在着反馈路径时,就会出现声学回声。除了从话筒到扬声器的直接耦合路径之外,扬声器的声波从墙壁、地板、天花板、窗户、家具、汽车的仪表板,以及其它物体反射回话筒时,也可能引起声学回声。因此,声学回声路径不是固定的。
设计VoIP AEC和设计传统电话应用 AEC 两者之间的差异非常小。不过,由于一般VoIP中的延迟较大,故其对AEC的要求也往往更加严格。此外,宽带语音增加了质量和复杂性方面的难度。
●辅助语音处理
在VoIP设备中,除了众所周知最重要的语音处理器件外,还包括用来提升用户使用感受或降低带宽要求等等的许多其它器件。鉴于“一子错满盘皆输”的道理,从全局出发,即使是这些似乎不那么重要的器件也必须正确设计。
这类器件有自动增益控制(AGC)、语音活动检测(VAD)、舒适噪声产生(CNG)、噪声抑制以及用于多方通话功能的信号混合。一般而言,传统电信解决方案和VoIP 决方案对这类器件的设计或要求并没有太大的差异。不过,VoIP系统往往更常用VAD和CNG器件,这主要是由于VoIP中的协议开销,带宽的净节省极为可观;而且在无语音数据包发送时,IP 网络相当适合于利用可变比特率来传输其它数据。若VAD算法存在错误分类,有时可能出现语音信号的削波和噪声突发。此外,鉴于静默期时只有舒适噪声(comfort noise)传输,背景信号可能听起来佷不自然。CNG 最常见的问题则是信号级太低,容易产生另一方已经离开对话的错觉。这些性能问题令设计人员必须谨慎使用VAD,以避免引起不必要的质量下降。
由于IP网络的特性,实现多方通话也面对一些挑战。例如,因多方通话同时有多个信号混合在一起,而且有多个接听者存在,所以对延迟、时钟偏移以及回声消除性能的要求会严苛得多。在这种情况下,具有低延迟并能够有效处理时钟偏移的抖动缓冲器就可以大大地提高性能。此外,通话各方可能使用不同的编码解码器,这将产生严重的复杂性问题。再者,这些编码解码器甚至可能采用不同的采样频率。这样一来,能够管理复杂性的智能方案就显得十分重要。降低复杂性的方法之一是利用 VAD 来判断在各端点有哪些参与者处于活动状态,并只把它们混合到输出信号中去。
●硬件问题
另一项主要挑战是在VoIP设备的硬件接口中正确处理音频。这些设备往往体积很小,价格必须低廉,而且一些原本是为其它应用 (如 PC 和 PDA) 而设计的,因此要获得良好的语音质量和低延迟便需要克服许多困难。
在VoIP设备的设计中,许多因素均对语音质量造成影响。话筒、扬声器和模数转换器都是很明显的例子。这些问题都非常类似于一般电话设备设计中常见的挑战,但这并不意味着VoIP设备的设计是一项轻松任务,而是必须充分利用该领域已有的专业能力来实现最理想的质量。
还有一个与设备相关、可能会严重影响延迟和语音质量的问题是时钟偏移(clock drift)的处理。传统的解决方法是在接收器部署一个时钟同步装置,通过把接收到的RTP数据包的时间卷标(time stamp)和本地时钟进行比较,来校正时钟偏移。这种解决方案存在的问题与传统数据包缓冲器的类似:它们都不频繁地进行大幅度调节,故每一次调节都非常明显。此外,由于数据包速率低而且存在抖动,所以在VoIP中很难进行可靠的时钟偏移估计。结合了抖动缓冲器控制和错误掩盖的技术就可以提供解决方案,因为它能够自动校正时钟偏移,同时又不会造成任何听得见的噪声或额外的延迟。
PC和PDA的VoIP
要让PC、PDA或其它原本不是专为执行实时语音而设计的设备可以进行语音操作,存在很多新的挑战,包括如何在一个非实时操作系统中与其它应用共享资源。这些操作系统中不可预测的响应时间及线程处理若然处理不当,便可能显著增长延迟时间,并造成音频输出间隙。某些操作系统,尤其是用于PDA 类设备的,由于不能全面支持多线程,在需要同时运行几个应用程序的环境中实现低延迟就非常困难。
为节约成本,这些设备常常配备劣质声卡,结果可能令数字信号的质量很差,而且为了避免采样失真,不得不采用数字重采样滤波器。事实上,有一种很好的解决方法,即利用声卡本身的采样频率(典型值48 kHz)来记录和播放,并在上/下采样过程中选用设计良好的数字滤波器以避免伪信号的问题。一般的声卡及相关驱动器带来的另一个挑战,是缓冲会造成显著的延迟和抖动。这种影响非常类似于网络抖动,所以通过把一个高效抖动缓冲器和声卡处理集成在一起,便有可能大幅度减小延迟。
如前所述,若采用的声卡质量低劣,时钟偏移的影响可能非常严重。如果不采取措施减小这种影响,因时钟偏移而引起的延迟常常达一秒之久。把抖动缓冲器和丢包掩盖结合在一起的极快速自适应抖动缓冲器解决方案,就可以自动解决这一问题,而无需对实际时钟偏移进行估计。
极高的噪声水平是极常见的,尤其是采用内置话筒时,因为它会收录计算机风扇的噪声,所以最好包含一个噪声抑制算法。
如果PC是用于免提电话之类的应用,为了避免对话另一方的回声干扰,必需采用声学回声消除。由于声卡的缺陷,以及设计时对声学环境完全不了解,这种设备为AEC设计带来了一连串全新的挑战。例如,常见的配置是内置了劣质话筒及扬声器的笔记本电脑,这种配置会在回声路径上引入噪声和非线性度。此外,笔记本电脑的底盘和电气耦合也常常会造成相当程度的音频泄漏。其它的常见配置还有使用外部话筒和扬声器的设备,在这种情况中,除了声卡有泄漏外,一般都不存在泄漏。不过,还有其它一些挑战,例如话筒和扬声器的相对位置对 AEC 有相当大的影响,两者可以通过不同的音频接口连接 (话筒一般以 USB 接口连接),从而可能导致时钟偏移。
能够处理这种变化条件的AEC设计必须非常灵活,并能够适应不同的音频环境。
结语
VoIP设备的设计人员会面对许多挑战,其中一些类似于传统电信设计,但另一些却是VoIP所特有的。本文对其中的最主要部分进行了讨论,并给出了解决方案。VoIP 所特有的各方面问题中,最重要的是与传输媒体IP网络特性有关的。这种设计必须能够处理丢包和传输时间抖动问题,同时具有最小延迟和高音质。本文论述了通过正确的设计,VoIP可以获得与PSTN同等的甚至更好的质量。其中最关键的是语音codec,其必须功能强大而稳健,足以解决丢包问题,并能以最小的延迟提供高质量的极快速自适应抖动缓冲器解决方案,这可以通过一种新颖的技术得以实现──也就是把抖动缓冲器自适应和丢包掩盖结合于同一个算法中。