早期的语音信号处理及传输均是以模拟的方式进行的。20世纪30年代末脉冲编码调制(PCM,Pulse Code Modulation)原理和声码器(Vocoder)概念被提出后,语音数字编码便一直沿着这两个方向发展。语音数据压缩目的是能在尽可能低的传输速率上获得高质量的语音效果,即希望语音信号可以在带宽较窄的信道中传输而语音质量下降的不多或尽可能不下降。语音编码系统早期用的是波形编码方法,也叫波形编码(或非参数编码),其目的是力图使重建的语音波形保持原语音信号的波形形状。这种编码器是把语音信号当成一般的波形信号来处理,而并未考虑语音信号的冗佘度。它的优点是具有较强的适应能力,有较好的合成语音质量,然而编码速率高(64Kbit/s),编码效率极低。脉冲编码调制(PCM)、自适应增量调制(ADM)、自适应差分编码(ADPCM)、自适应编码(APC)等都是属于波形编码(非参数编码)。而声码器则是不同于波形编码器的高效编码方式。声码器又称参数编码(或模型编码),它主要是对提取的语音信号特征参数进行编码,目的主要是使重建的语音信号具有尽可能高的可懂度,而不是要求重建波形保持原语音波形的形状。因此,可能出现的情况是即使重建语音的可懂度高,但其时域波形与原语音的时域波形有较大的差别。这种编码器的优点是可达到极低的编码速率而语音依然可懂,编码速率可达到8Kbit/s、4.8Kbit/s甚至更低。主要缺点是重建语音自然度低,韵律感差,合成语音质量差。声码器的典型代表是通道声码器、共峰声码器及线性预测声码器等。
20世纪80年代至今,不仅声码器和波形编码器得到了很大发展,并且还有一种全新的革命性编码方法被普遍推广,这类编码器叫混合编码器。这种编码器在传送器中对给定编码结构的所有可能性进行综合,找出输人语音的编码形式,并从这些可能性中发现输入语音的主观匹配,然后用数码表示这种主观匹配并发送到接收器。利用线性预测、VQ、A-B-S、感觉加权、后滤波等技术得到的多脉冲激励线性预测(MPELP,Multi Pulse Enspirit LinePrognosticate),规则脉冲激励线性预测(RPELP,Rule Pulse Enspirit Line Prognosticate),码本激励线性预测(CELP,Code Enspirit Line Prognosticate) 编码速率达到8~16Kbit/s甚至更底,其话音质量高、编码速率低,但算法复杂。
近年来,ITU-T在多媒体数字通信方面(包括电视会议等)制定了一系列国际标准(按ITU的说法是建议)。
表1 ITU-T多媒体会议标准(基本模式)
在现有的网路设施条仵下,H.320和H.323比较适用的标准。H.320的基本音频模式是G.711 log-PCM(对数脉码调制)编码解码器,它是一种简单的8kHz采样频率对数脉码调制模式,长期以来它都是数字电话网络主要的编码方法(长途电话尽管起源于模拟电话,现在长途电话在数字网络上传输)。
G.711定义为8位编码,速率为64Kbit/s,但在H.320中采样截短为6或7比特位,因为速率相应变为48Kbit/s或56Kbit/s。G.711提供了出色的长话音质窄带(3kHz音频带宽)语音、不太明显的编解码延迟(低于1ms)以及非常低的实现复杂性。为了提供与普通G.711音频电话的兼容性,所有的H.320呼叫在H.221 FAS和BAS信道中进行同步初始化和模式协商时开始发送和接收G.711音频。
G.711有很多优点,但是G.711指定了两个不同的编码A律和μ律,在采用G.711标准的区域,不同地方使用上述两种不同的方法。CCITT不能达成统一的编码方法。结果是H.320系统必须由远端在每次呼叫开始时自动发现使用的编码律,或者避免使用音频直到H.320控制过程能用来建立另一音频模式。而且,G.711因为它的低复杂性和与普遍电话的兼容性成为H.320的基本音频模式,但与其他H.320音频模式相比在使用带宽方面它是效率低下的。如果转到其他音频模式下节省的数据带宽可用来传送更多的视频位,将使H.320视频质量有很大不同,特别是在普通的2-B(128Kbit/s)H.320呼叫上。
鉴于G.711语音压缩协议本身的一些缺点,人们一直在找一种替代它的协议,现在已经开始用的有G.722协议和G.728协议。
G.728是目前H.320中用得较多的窄带音频模式。它是基于通常的8kHz窄带采样和5个采样(0.625ms)的音频帧的低时延码本激励线性编码(LD-CELP),比特率为16Kbit/s,提供很好的长话音质,总延迟为大约1.875ms。
在现有网络条件下,需要一个窄带音频模式,但是又要有相当好的语音质量。 近建立的8Kbit/s电话标准真正提高了该速率下的语音品质并改善了复杂性,这种编码器在某种程度上是一个突破,因此它的严格规范使性能达到或超过了32Kbit/s的G.726 ADPCM,但速率仅为8Kbit/s。ITU G.729 SKbit/s标准在性能上不亚于G.726,其算法延时少于16ms,随机误码和背景噪声的性能都不低于G.726,具有与自身的非同步串联能力。比如说,两级串联的性能不低于G.726四级串联的性能,达到这个水平的编码称为共扼结构代数码激励线性预测(CS~ACELP),它采用特殊的码本结构简化码本查找。
由于G.729的优点突出,特别适合目前网络条件,因此其在多媒体会议中的应用越来越受到重视。G.729的算法被称作共轭结构代数码激线性预测(CS-ACELP,ConjugateStructuredˉAlgebraic Code Excited Linear Predictive),它构成了G.729标准的基础。CS-ACELP在标准PCM或线性PCM的话音采样基础上,每10ms生成一个10字节长的话音帧。对于每一个语音帧提取CELP模型参数,再对这些参数在编码后以每帧80bit进行信道传输,在解码端,接收到的比特流通过激励码本解码成相应的CELP参数,再通过短时综合滤波器和长时综合滤波器重建语音帧,经过后向滤波进行语音增强。
该算法提供了音质,且延时很小。CS-ACELP也是为先进的定点运算数字信号处理器设计的,因为它要求强大的运算处理能力。CS-ACELP编码步骤的方框图如图1所示。
图1 CS-ACELP编码步骤
其固定的码本具有一个代数结构,称为交错单脉冲排列设计(1SPP)。码本中每40个样本激励向量仅有4个非零脉冲,记为i0,i1,i2和i3,其幅值和位置见表2,每个激励码字可写成:
c(n)=S0δ(n-m0)+S1δ(n-m1)+S2δ(n-m2)+S3δ(n-m3),n=0,…,39
其中δ(n)是时刻n的单位冲激函数。
表2 脉冲幅值和位置
从表中可看到,脉冲幅值仅为+1或-1,由于这种限制,再加上码字的稀疏,使得码本搜索大大简化了,各个脉冲的位置也存在限制,如表2所示,可以看到脉冲i1仅能位于m1=1.6,6,11.16,21.26,31.36中的某一位置。这些位置与其他3个脉冲的位置都不相同,为了提高这些限制激励的谐波结构,码向量要通过一个自适应间隔滤波器:
其中β是自适应增益,T是当前子帧的间隔延迟,码本搜索是从码向量的一个脉冲开始,然后进行4个嵌套循环,每次循环对应一个新加人的脉冲。由于4个脉冲的位置不连续,我们使用一个共扼搜索,这是局部码本搜索,它在第3个循环之后限制码本搜索的努力,这种搜索产生的语音品质和SNR与全搜索相当,但码本搜索量只有它的5%。前3个脉冲的位置每个用3bit表示,第4个用4bit,脉冲幅度每个用1bit表示,所以每个子帧不包括增益的位数是17bit。
图2表示CS-ACELP解码器,表3列出图中的参数和每个子帧为5ms长时其更新的快慢程度。可以看到,8Kbit/s中有6200bit/s的比特率用于表示激励。
图2 CS-ACELP解码步骤
表3 参数和每个子帧
实现G.729算法需要有很强的运算能力的芯片,因此以运算能力强大的DSP来实现其算法比较好。TI的C54系列的DSP拥有强的定点运算能力,作为高性价比DSP中的16位定点DSP芯片,C54x和C540x都适用于语音通信等实时嵌入应用场合。C54x和C540x具有高度灵活的可操作性和高速的处理能力。
实现G.729算法程序较大,下面介绍一种简单的易于实现的线性增量调制算法(CVSD,Continuously Variable Slope Delta)编码方法,实现对语音信号的编码以及相应的解码算法。
CVSD是一种量阶δ随着输人语音信号平均斜率大小而连续变化的增量调制方式。它的工作原理是使用多个连续可变斜率的线段来逼近语音信号,当斜率为正时,对应的数字编码为1;当斜率为负时,对应的数字编码为0。当CVSD工作于编码方式时,其系统框图如3所示。语音输人信号fin(t)经采样得到数字信号f(n),数字信号f(n)与积分器输出信号g(n)比较后输出偏差信号e(n),偏差信号经判决后输出数字编码y(n),该信号同时作为积分器输出斜率的极性控制信号和积分器输出斜率大小逻辑的输人信号。在每个时钟周期内,若语音信号大于积分器输出信号,则判决输出为1,积分器输出上升一个量阶δ;若语音信号小于积分器输出信号,则判决输出为0,积分器输出下降一个量阶δ。
图3 CVSD编码系统框图
当CVSD工作于解码方式时,其系统框图如图4所示。在每个时钟周期内,数字编码y(n)被送到连码检测器,然后送到斜率幅度控制电路以控制积分器输出斜率的大小。若数字编码y(n)输入为1,则积分器的输出上升一个量阶δ;若数字输入为0,则积分器的输出下降一个量阶δ,这相当于编码过程的逆过程。积分器的输出通过低通滤波器平滑滤波后将重现输入语音信号fin(t)。
图4 CVSD解码系统框图
可见输人信号的波形上升越快,输出的连1码就越多,同样下降越快连0码越多,CVSD编码能够很好地反映输入信号的斜率大小。为使积分器的输出能够更好地逼近输人语音信号,量阶δ随着输入信号斜率大小而变化,当信号斜率很大,编码出现3个连1或连0码时,则量阶δ加一个增量,当不出现上述码型时,量阶则相应地减少。
为了减少编码及译码的偏差,要求编码和译码过程使用相同的时钟频率,而且采样频率应符合奈奎斯特采样定理,即至少为语音输人频率的两倍。
CVSD通过不断改变量阶δ大小来跟踪信号的变化以减小颗粒噪声与斜率过载失真,量阶δ调整是基于过去的3个或4个样值输出。具体编码程序流程如图5所示,具体解码程序流程如图6所示。经过编码和解码后的语音信号和原始信号的比较如图7所示。
图5 语音编码流程图
图6 语音解码流程图
从图7可以看出,编解码后的信号和原始的信号存在一定的误差,这是因为编码必然丢失语音信号的部分信息。但解码后信号和原始信号在波形和幅度上还是很好地吻合,不影响语音信号的效果。
图7 编解码后的语音信号和原始信号的比较
CVSD编码的C语言程序代码如下:
汇编程序的汇编语言代码如下:
解码程序的汇编代码如下:
欢迎转载,信息来源维库电子市场网(www.dzsc.com)
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。