预测编码是根据离散信号之间存在着一定关联性的特点,利用前面一个或多个信号预测下一个信号进行,然后对实际值和预测值的差(预测误差)进行编码。如果预测比较准确,误差就会很小。在同等精度要求的条件下,就可以用比较少的比特进行编码,达到压缩数据的目的。
中文名称 | 预测编码 | 外文名称 | Predictive coding |
---|---|---|---|
应用学科 | 通信 | 词 性 | 名词 |
分 类 | 编码 |
PCM的编码原理比较直观和简单,如(1)所示。它的输入是模拟信号,首先经过时间采样,然后对每一样值都进行量化,作为数字信号的输出,即PCM样本序列x(0),x(1),…,x(n)。图中的“量化,编码”可理解为“量化阶大小(step-size)”生成器或者称为“量化间隔”生成器。
如果采用相等的量化间隔处理采样得到的信号值,那么这种量化称为均匀量化。均匀量化就是采用相同的“等分尺”来度量采样得到的幅度,也称为线性量化,如(2)所示。量化后的样本值Y和原始值X的差 E=Y-X 称为量化误差或量化噪声。
非均匀量化
用均匀量化方法量化输入信号时,无论对大的输入信号还是小的输入信号一律都采用相同的量化间隔。为了适应幅度大的输入信号,同时又要满足精度要求,就需要增加量化间隔,这将导致增加样本的位数。但是,有些信号(例如话音信号),大信号出现的机会并不多,增加的样本位数就没有充分利用。为了克服这个不足,就出现了非均匀量化的方法,这种方法也叫做非线性量化。
非线性量化的基本想法是,对输入信号进行量化时,大的输入信号采用大的量化间隔,小的输入信号采用小的量化间隔,这样就可以在满足精度要求的情况下用较少的位数来表示。量化数据还原时,采用相同的规则。
在语音信号的非线性量化中,采样输入信号幅度和量化输出数据之间定义了两种对应关系,一种称为m律压扩(m-law companding)算法,另一种称为A律(A-law)压扩算法。
1.m 律压扩
G.711标准建议的m律压扩主要用在北美和日本等地区的数字电话通信中,按下面的式子(归一化)确定量化输入和输出的关系:
式中:x为输入信号幅度,规格化成 -1≤< /SPAN> x≤ 1;
sgn(x)为x的极性,x<0时为-1,否则为1;
m为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比,取100≤ m≤ 500,多取 m =255。
由于m律压扩的输入和输出关系是对数关系,所以这种编码又称为对数PCM。具体计算时,用m=255,可以把对数曲线变成8条折线以简化计算过程。
2.A律压扩
G.711标准建议的A律压扩主要用在中国大陆和欧洲等地区的数字电话通信中,按下面的式子确定量化输入和输出的关系:
0 ≤ | x| ≤ 1/A
1/A < |x| ≤ 1
式中:x为输入信号幅度,规格化成 -1 ≤< /SPAN > x ≤ 1;
sgn(x)为x的极性,x<0时为-1,否则为1;
A为确定压缩量的参数,它反映最大量化间隔和最小量化间隔之比,通常取A=87.6。
A律压扩的前一部分是线性的,其余部分与m律压扩相同。A律压扩具有与m律压扩相同的基本性能(在大信号区信噪比高于m律量化器,但在小信号区不如m律量化器)和实现方面的优点,尤其是还可以用直线段很好地近似,以便于直接压扩或数字压扩,并易于与线性编码格式相互转换。具体计算时,A=87.56,为简化计算,同样把对数曲线部分变成13条折线。
对于采样频率为8 kHz,样本精度为13比特、14比特或者16比特的输入信号,使用m率压扩编码或者使用A率压扩编码,经过PCM编码器之后每个样本的精度为8比特,输出的数据率为64 kbps。这个数据就是CCITT推荐的G.711标准:话音频率脉冲编码调制(Pulse Code Modulation (PCM) of Voice Frequencies)。通常的听觉主观感觉认为8位压扩量化有不低于12位均匀量化A/D的信噪比及动态范围。
自适应量化
在一定量化级数下减少量化误差或在同样的误差条件下压缩数据,根据信号分布不均匀的特点,希望系统具有随输入信号的变化区间足以保持输入量化器的信号基本均匀的能力,这种能力叫自适应量化。
自适应量化必须有对输入信号的幅值进行估值的能力,有了估值才能确定相应的改变量。若估值在信号的输入端进行,称前馈自适应;若在量化输出端进行,称反馈自适应。信号的估值必须简单,占用时间短,才能达到实时处理的目的。
自适应预测
预测参数的最佳化依赖信源的特征,要得到最佳预测参数显然是一件繁琐的工作。而采用固定的预测参数往往又得不到较好的性能。为了能使性能较佳,又不致于有太大的工作量,可以采用自适应预测。
为了减少计算工作量,预测参数仍采用固定的,但此时有多组预测参数可供选择,这些预测参数根据常见的信源特征求得。编码时具体采用哪组预测参数需根据特征来自适应地确定。为了自适应地选择最佳参数,通常将信源数据分区间编码,编码时自动地选择一组预测参数,使该实际值与预测值的均方误差最小。随着编码区间的不同,预测参数自适应地变化,以达到准最佳预测。
在图像传输技术中,活动图像特别是电视图像是关注的主要对象。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列,它在时间上比在空间上具有更大的相关性。大多数电视图像相邻帧间细节变化是很小的,即视频图像帧间具有很强的相关性,利用帧所具有的相关性的特点进行帧间编码,可获得比帧内编码高得多的压缩比。对于静止图像或活动很慢的图像,可以少传一些帧,如隔帧传输,未传输的帧,利用接收端的帧存储器中前一帧的数据作为该帧数据,对视觉没有什么影响。因为人眼对图像中静止或活动慢的部分,要求有较高的空间分辨率,而对时间分辨率的要求可低些。这种方法叫帧重复方法,广泛应用于视频电话、视频会议系统中,其图像帧速率一般为1~15帧/秒。
采用预测编码的方法消除序列图像在时间上的相关性,即不直接传送当前帧的像素值,而是传送x和其前一帧或后一帧的对应像素x' 之间的差值,这称为帧间预测。当图像中存在着运动物体时,简单的预测不能收到好的效果,例如当前帧与前一帧的背景完全一样,只是小球平移了一个位置,如果简单地以第k-1帧像素值作为k帧的预测值,则在实线和虚线所示的圆内的预测误差都不为零。如果已经知道了小球运动的方向和速度,可以从小球在k-1帧的位置推算出它在k帧中的位置来,而背景图像(不考虑被遮挡的部分)仍以前一帧的背景代替,将这种考虑了小球位移的k-1帧图像作为k帧的预测值,就比简单的预测准确得多,从而可以达到更高的数据压缩比。这种预测方法称为具有运动补偿的帧间预测。
具有运动补偿的帧间预测编码是视频压缩的关键技术之一,它包括以下几个步骤:首先,将图像分解成相对静止的背景和若干运动的物体,各个物体可能有不同的位移,但构成每个物体的所有像素的位移相同,通过运动估值得到每个物体的位移矢量;然后,利用位移矢量计算经运动补偿后的预测值;最后对预测误差进行量化、编码、传输,同时将位移矢量和图像分解方式等信息送到接收端。
在具有运动补偿的帧间预测编码系统中,对图像静止区和不同运动区的实时完善分解和运动矢量计算是较为复杂和困难的。在实际实现时经常采用的是像素递归法和块匹配法两种简化的办法。
像素递归法的具体作法是,仍需通过某种较为简单的方法首先将图像分割成运动区和静止区。在静止区内像素的位移为零,不进行递归运算;对运动区内的像素,利用该像素左边或正上方像素的位移矢量D作为本像素的位移矢量,然后用前一帧对应位置上经位移D后的像素值作为当前帧中该像素的预测值。如果预测误差小于某一阈值,则认为该像素可预测,无需传送信息;如果预测误差大于该阈值,编码器则需传送量化后的预测误差、以及该像素的地址,收、发双方各自根据量化后的预测误差更新位移矢量。由此可见,像素递归法是对每一个像素根据预测误差递归地给出一个估计的位移矢量,因而不需要单独传送位移矢量给接收端。
块匹配法是另一种更为简单的运动估值方法。它将图像划分为许多子块,并认为子块内所有像素的位移量是相同的,这意味着将每个子块视为一个“运动物体”。对于某一时间t,图像帧中的某一子块如果在另一时间t-t1的帧中可以找到若干与其十分相似的子块,则称其中最为相似的子块为匹配块,并认为该匹配块是时间t-t1的帧中相应子块位移的结果。位移矢量由两帧中相应子块的坐标决定。
考虑到一定时间间隔内物体可能的运动速度、运动范围和匹配搜索所需的计算量,在匹配搜索时一般仅在一个有限范围内进行。假设在给定时间间隔内最大可能的水平和垂直位移为d h和d v个像素,则搜索范围SR为
其中M、N为子块的水平和垂直像素数。
在块匹配方法中需要解决两个问题:一是确定判别两个子块匹配的准则;二是寻找计算量最少的匹配搜索算法。判断两个子块相似程度的准则可以利用两个块间归一化的二维互相关函数、两子块间亮度的均方差MSE或两子块间亮度差绝对值的均值MAD等。通过对不同判别准则的比较研究表明,各种判别准则对位移矢量的估值精度影响差别不是很大。由于MAD准则的计算不含有乘法和除法运算而成为最常使用的匹配判别准则。MAD准则定义如下:
其中Xk和Xk-1分别表示图像在第k帧和第k-1帧的像素值。当MAD最小时,表示两个子块匹配。
对于匹配搜索算法,最简单和直接的方法就是全搜索方式,即将第k-1帧中的子块在整个搜索区内逐个像素移动,每移动一次计算一次判决函数。总的移动次数为 (2d h + 1)(2d v + 1)。当d h = d v = 6时,总的计算次数为169。显然,全搜索的运算量是相当大的。为了加快搜索过程,人们提出了许多不同的搜索方法,其中应用较广的有二维对数法、三步法、共轭方向法和正交搜索法。这几种方法都基于如下的假设:当偏离最小误差方向时,判决函数是单调上升的,搜索总沿着判决函数值减小的方向进行。上述几种方案所需的搜索步骤和计算点数略有差异,但基本思路是一致的。
通过上面介绍的两种运动矢量估值方法可以看出,像素递归法对每一个像素给出一个估计的位移矢量,因而对较小面积物体的运动估值较为精确。但像素递归法在估值时需要进行叠代运算,从而存在着收敛速度和稳定性问题。块匹配法对同一子块内位移量不同的像素只能给出同一个位移估值,限制了对每一像素的估值精度。但对于面积较大的运动物体而言,采用块匹配法的预测要比采用像素递归法的预测效果好。另外,从软硬件实现角度看,块匹配算法相对简单,在实际活动图像压缩编码系统中得到较为普遍的应用。
活动图像的帧间内插编码是在系统发送端每隔一段时间丢弃一帧或几帧图像,而在接收端再利用图像的帧间相关性将丢弃的帧通过内插恢复出来,以防止帧率下降引起闪烁和动作不连续。恢复丢弃帧的一个简单办法是利用线性内插,设x(i, j), y(i, j)分别代表两个传输帧中相同空间位置上像素的亮度,在中间第n个内插帧对应位置的亮度z(i, j) 可用如下的内插公式:
n=1,2,3,……N-1
其中N为两个传输帧之间的帧间隔数。
简单线性帧间内插的缺点在于当图像中有运动物体时,两个传输帧在物体经过的区域上不再一一对应,因而引起图像模糊。为解决这一问题可采用带有运动补偿的帧间内插。具有运动补偿的帧间内插和帧间预测都需要进行运动估值,但二者的目的和运动估值不准确所带来的影响不完全相同。
在帧间预测中引入运动补偿的目的是为了减少预测误差,从而提高编码效率。运动估值的不准确会使预测误差加大,从而使传输的数据率上升,但接收端据此位移矢量和预测误差解码不会引起图像质量下降。而在帧间内插中引入运动补偿的目的,是使恢复的内插帧中的运动物体不致因为内插而引起太大的图像质量下降。这是由于在丢弃帧内没有传送任何信息,要确定运动物体在丢弃帧中的位置必须知道该物体的运动速度。运动估值的不准确,将导致内插出来的丢弃帧图像的失真。另外,在帧间内插中的位移估值一般要对运动区的每一个像素进行,而不是对一个子块;否则,内插同样会引起运动物体边界的模糊。因此,在帧间内插中较多使用能够给出单个像素位移矢量的像素递归法。
其他还有阈值法(只传送像素亮度的帧间差值超过一定阈值的像素)、帧内插(对于活动缓慢的图像,利用前后两帧图像进行内插,得到预测图像,然后对帧差信号进行编码)、运动估计与补偿等。
x^k = f(x'1,x'2,…, x' N,k), k > N (1)
式中k > N表示x'1,x'2,…, x' N的时序在xk之前,为所谓因果型(Causal)预测,否则为非因果型预测。
接收端把接收到的量化后的预测误差e^k 与本地算出的x^k相加,即得恢复信号x'k。如果没有传输误差,则接收端重建信号x'k与发送端原始信号xk之间的误差为:
xk - x' k = x k - ( x^k + e^k )
= ( xk - x^k ) - e^k
= ek - e^k
= qk (2)
这正是发送端量化器产生的量化误差,即整个预测编码系统的失真完全由量化器产生。因此,当xk已经是数字信号时,如果去掉量化器,使e^k = ek,则qk = 0,即x'k = xk 。这表明,这类不带量化器的DPCM系统也可用于无损编码。但如果量化误差qk ≠ 0,则x'k ≠xk,为有损编码。
如果预测方程式(2)的右方是各个x'i的线性函数,即
N
x' k = Σai(k) x' i k > N (3)
i=1
即得常用的线性预测,又称线性预测编码(LPC,Linear Predictive Coding)。LPC在语音处理中得到广泛应用,并在此基础上发展了许多算法,典型的有:多脉冲线性预测编码(MPLPC),规则脉冲激励编码(RPE),码激励线性预测(CELP),代数激励线性预测(ACELP),矢量和激励线性预测(VSELP),QCELP(Qualcomm CELP,变速率CELP),低延时码激励线性预测(LD-CELP),共轭结构代数激励线性预测(CS-ACELP),混合激励线性预测(MELP),间隔同步更新码激励线性预测(PSI-CELP),松弛码激励线性预测(RCELP),残差激励线性预测(RELP),规则脉冲激励长时预测(RPE-LTP)等。
在DPCM中,“1位量化”的特殊情况称为增量调制(Δ调制)。
为了能够正确恢复被压缩的信号,不仅在接收端有一个与发送端相同的预测器,而且其输入信号也要相同(都是x'k,而不是xk),动作也与发送端的预测器环路(即发送端本地的反量化和解码部分)完全相同。
在图像信号中应用DPCM时,用作预测的像素和被预测的像素可以在同一行,也可以在不同行(同一帧),甚至在不同帧,分别称为一维预测、二维预测和三维预测。声音信号中的预测只是一维预测。
DPCM的优点是算法简单,容易硬件实现,缺点是对信道噪声很敏感,会产生误差扩散。即某一位码出错,对图像一维预测来说,将使该像素以后的同一行各个像素都产生误差;而对二维预测,该码引起的误差还将扩散到以下的各行。这样,将使图像质量大大下降。同时,DPCM的压缩率也比较低。随着变换编码的广泛应用,DPCM的作用已很有限。
根据AVS标准中帧内预测算法的特点,提出了一种应用于AVS高清实时编码器的帧内预测硬件设计方案。该设计中将亮度和色度预测共用一个预测单元,采用6路数据并行流水处理的结构,提高了处理速度。同时在分析AVS帧内预测各模式算法的基础上,结合移位寄存器操作实现各模式运算单元的进一步资源共享,简化了参考数据选择机制,减少资源消耗。实验结果表明,该设计完全能够满足高清视频图像(1 920×1 080,30 f/s(帧/秒))实时编码要求。
序号 物料编码 型号规格 1 3225040084179578 荧光管 /欧司朗DULUXSTAR CL/7W 2 3225080084179570 金属卤化物灯 /欧司朗HQI-E/涂粉70W 3 3225040082797872 荧光管 /OSRAM DULUXSTAR/TWIST 23W 4 3225040084513150 荧光管 /欧司朗YZ15T8 15W 5 3225040084179582 荧光管 /欧司朗 电子节能灯 DULUXSTAR 32W 6 3225990084534074 节能灯 /欧司朗 24W 7 3213100084566170 日光灯具 欧司朗LMY-36W 8 3213100084179573 日光灯具 欧司朗LMY-2*36W 9 3229990083704157 应急日光灯具 欧司朗LMYyj-1*36W 10 3213100084566
线性预测编码的基础是假设声音信号(浊音)是音管末端的蜂鸣器产生的,偶尔伴随有嘶嘶声与爆破声(齿擦音与爆破音)。尽管这看起来有些原始,但是这种模式实际上非常接近于真实语音产生过程。声带之间的声门产生不同强度(音量)与频率(音调)的声音,喉咙与嘴组成共鸣声道。嘶嘶声与爆破声通过舌头、嘴唇以及喉咙的作用产生出来。
线性预测编码通过估计共振峰、剔除它们在语音信号中的作用、估计保留的蜂鸣音强度与频率来分析语音信号。剔除共振峰的过程称为逆滤波,经过这个过程剩余的信号称为残余信号(en:residue)。
描述峰鸣强度与频率、共鸣峰、残余信号的数字可以保存、发送到其它地方。线性预测编码通过逆向的过程合成语音信号:使用蜂鸣参数与残余信号生成源信号、使用共振峰生成表示声道的滤波器,源信号经过滤波器的处理就得到语音信号。
由于语音信号随着时间变化,这个过程是在一段段的语音信号帧上进行处理的。通常每秒 30 到 50 帧的速度就能对可理解的信号进行很好的压缩。
根据斯坦福大学 Robert M. Gray 的说法,线性预测编码起源于 1966 年,当时 NTT 的 S. Saito 和 F. Itakura 描述了一种自动音素识别的方法,这种方法第一次使用了针对语音编码的最大似然估计实现。1967 年,John Burg 略述了最大熵的实现方法。1969 年 Itakura 与 Saito 提出了部分相关(en:partial correlation)的概念, May Glen Culler 提议进行实时语音压缩,B. S. Atal 在美国声学协会年会上展示了一个 LPC 语音编码器。1971 年 Philco-Ford 展示了使用 16 位 LPC 硬件的实时 LPC 并且卖出了四个。
1972 年 ARPA 的 Bob Kahn 与 Jim Forgie (en:Lincoln Laboratory, LL) 以及 Dave Walden (BBN Technologies) 开始了语音信息包的第一次开发,这最终带来了 Voice over IP 技术。根据 Lincoln Laboratory 的非正式历史资料记载,1973 年 Ed Hofstetter 实现了第一个 2400 位/秒 的实时 LPC。1974 年,第一个双向实时 LPC 语音包通信在 Culler-Harrison 与 Lincoln Laboratories 之间通过 ARPANET 以 3500 位/秒 的速度实现。1976 年,第一次 LPC 会议通过 ARPANET 使用 Network Voice Protocol 在Culler-Harrison、ISI、SRI 与 LL 之间以 3500 位/秒 的速度实现。最后在 1978 年,BBN 的 Vishwanath et al. 开发了第一个变速 LPC 算法。
线性预测编码的基础是假设声音信号(浊音)是音管末端的蜂鸣器产生的,偶尔伴随有嘶嘶声与爆破声(齿擦音与爆破音)。尽管这看起来有些原始,但是这种模式实际上非常接近于真实语音产生过程。声带之间的声门产生不同强度(音量)与频率(音调)的声音,喉咙与嘴组成共鸣声道。嘶嘶声与爆破声通过舌头、嘴唇以及喉咙的作用产生出来。
线性预测编码通过估计共振峰、剔除它们在语音信号中的作用、估计保留的蜂鸣音强度与频率来分析语音信号。剔除共振峰的过程称为逆滤波,经过这个过程剩余的信号称为残余信号(en:residue)。
描述峰鸣强度与频率、共鸣峰、残余信号的数字可以保存、发送到其它地方。线性预测编码通过逆向的过程合成语音信号:使用蜂鸣参数与残余信号生成源信号、使用共振峰生成表示声道的滤波器,源信号经过滤波器的处理就得到语音信号。
由于语音信号随着时间变化,这个过程是在一段段的语音信号帧上进行处理的。通常每秒 30 到 50 帧的速度就能对可理解的信号进行很好的压缩。