标题：预测编码
简介
预测编码中典型的压缩方法有脉冲编码调制（PCM，Pulse Code Modulation）、差分脉冲编码调制（DPCM，Differential Pulse Code Modulation）、自适应差分脉冲编码调制（ADPCM，Adaptive Differential Pulse Code Modulation）等，它们较适合于声音、图像数据的压缩，因为这些数据由采样得到，相邻样值之间的差相差不会很大，可以用较少位来表示。 
PCM
背景脉冲编码调制（PCM，pulse code modulation）是概念上最简单、理论上最完善的编码系统。它是最早研制成功、使用最为广泛的编码系统，但也是数据量最大的编码系统。 
PCM的编码原理比较直观和简单，原理框图如图04-01-1所示。在这个框图中，它的输入是模拟信号，首先经过时间采样，然后对每一样值都进行量化，作为数字信号的输出，即PCM样本序列x(0),x(1),…,x(n)。图中的“量化，编码”可理解为“量化阶大小(step-size)”生成器或者称为“量化间隔”生成器。
图04-01-1 PCM编码框图 
量化有多种方法。最简单的是只应用于数值，称为标量量化，另一种是对矢量（又称为向量）量化。标量量化可归纳成两类：一类称为均匀量化，另一类称为非均匀量化。理论上，标量量化也是矢量量化的一种特殊形式。采用的量化方法不同，量化后的数据量也就不同。因此，可以说量化也是一种压缩数据的方法。 
下面介绍标量量化，矢量量化将在本章最后一节介绍。均匀量化如果采用相等的量化间隔处理采样得到的信号值，那么这种量化称为均匀量化。均匀量化就是采用相同的“等分尺”来度量采样得到的幅度，也称为线性量化，如图04-01-2所示。量化后的样本值Y和原始值X的差 E=Y-X 称为量化误差或量化噪声。 
图04-01-2 均匀量化   
非均匀量化用均匀量化方法量化输入信号时，无论对大的输入信号还是小的输入信号一律都采用相同的量化间隔。为了适应幅度大的输入信号，同时又要满足精度要求，就需要增加量化间隔，这将导致增加样本的位数。但是，有些信号（例如话音信号），大信号出现的机会并不多，增加的样本位数就没有充分利用。为了克服这个不足，就出现了非均匀量化的方法，这种方法也叫做非线性量化。 
非线性量化的基本想法是，对输入信号进行量化时，大的输入信号采用大的量化间隔，小的输入信号采用小的量化间隔，如图04-01-3所示，这样就可以在满足精度要求的情况下用较少的位数来表示。量化数据还原时，采用相同的规则。 
在语音信号的非线性量化中，采样输入信号幅度和量化输出数据之间定义了两种对应关系，一种称为m律压扩(m-law companding)算法，另一种称为A律（A-law）压扩算法。
图04-01-3 非均匀量化 
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的信噪比及动态范围。 
DPCM
在PCM系统中，原始的模拟信号经过采样后得到的每一个样值都被量化成为数字信号。为了压缩数据，可以不对每一样值都进行量化，而是预测下一样值，并量化实际值与预测值之间的差值，这就是DPCM（Differential Pulse Code Modulation，差分脉冲编码调制）。1952年贝尔（Bell）实验室的C. C. Cutler取得了差分脉冲编码调制系统的专利，奠定了真正实用的预测编码系统的基础。DPCM的组成如图04-01-4，其中编码器和解码器分别完成对预测误差量化值的熵编码和解码。 
图04-01-4   DPCM系统原理框图
DPCM系统工作时，发送端先发送一个起始值x0，接着就只发送预测误差值ek = xk – x^k，而预测值x^k可记为 
x^k = f（x'1，x'2，…， x' N，k），  k > N                   （04-01-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                                         （04-01-2） 
这正是发送端量化器产生的量化误差，即整个预测编码系统的失真完全由量化器产生。因此，当xk已经是数字信号时，如果去掉量化器，使e^k = ek，则qk = 0，即x'k = xk 。这表明，这类不带量化器的DPCM系统也可用于无损编码。但如果量化误差qk ≠ 0，则x'k ≠xk，为有损编码。 
如果预测方程式（04-01-2）的右方是各个x'i的线性函数，即 
N 
x' k = Σai(k) x' i        k > N                  (04-01-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的作用已很有限。
ADPCM
背景进一步改善量化性能或压缩数据率的方法是采用自适应量化或自适应预测，即自适应脉冲编码调制（ADPCM）。它的核心想法是：①利用自适应的思想改变量化阶的大小，即使用小的量化阶(step-size)去编码小的差值，使用大的量化阶去编码大的差值，②使用过去的样本值估算下一个输入样本的预测值，使实际样本值和预测值之间的差值总是最小。它的编码简化框图如图04-01-5所示。 
图04-01-5  ADPCM方框图 
自适应量化在一定量化级数下减少量化误差或在同样的误差条件下压缩数据，根据信号分布不均匀的特点，希望系统具有随输入信号的变化区间足以保持输入量化器的信号基本均匀的能力，这种能力叫自适应量化。 
自适应量化必须有对输入信号的幅值进行估值的能力，有了估值才能确定相应的改变量。若估值在信号的输入端进行，称前馈自适应；若在量化输出端进行，称反馈自适应。信号的估值必须简单，占用时间短，才能达到实时处理的目的。 
自适应预测预测参数的最佳化依赖信源的特征，要得到最佳预测参数显然是一件繁琐的工作。而采用固定的预测参数往往又得不到较好的性能。为了能使性能较佳，又不致于有太大的工作量，可以采用自适应预测。 
为了减少计算工作量，预测参数仍采用固定的，但此时有多组预测参数可供选择，这些预测参数根据常见的信源特征求得。编码时具体采用哪组预测参数需根据特征来自适应地确定。为了自适应地选择最佳参数，通常将信源数据分区间编码，编码时自动地选择一组预测参数，使该实际值与预测值的均方误差最小。随着编码区间的不同，预测参数自适应地变化，以达到准最佳预测。
帧间预测编码
帧间预测编码是利用视频图像帧间的相关性，即时间相关性，来达到图像压缩的目的，广泛用于普通电视、会议电视、视频电话、高清晰度电视的压缩编码。 
在图像传输技术中，活动图像特别是电视图像是关注的主要对象。活动图像是由时间上以帧周期为间隔的连续图像帧组成的时间图像序列，它在时间上比在空间上具有更大的相关性。大多数电视图像相邻帧间细节变化是很小的，即视频图像帧间具有很强的相关性，利用帧所具有的相关性的特点进行帧间编码，可获得比帧内编码高得多的压缩比。对于静止图像或活动很慢的图像，可以少传一些帧，如隔帧传输，未传输的帧，利用接收端的帧存储器中前一帧的数据作为该帧数据，对视觉没有什么影响。因为人眼对图像中静止或活动慢的部分，要求有较高的空间分辨率，而对时间分辨率的要求可低些。这种方法叫帧重复方法，广泛应用于视频电话、视频会议系统中，其图像帧速率一般为1~15帧/秒。 
采用预测编码的方法消除序列图像在时间上的相关性，即不直接传送当前帧的像素值，而是传送x和其前一帧或后一帧的对应像素x' 之间的差值,这称为帧间预测。当图像中存在着运动物体时，简单的预测不能收到好的效果，例如在图04-01-6中当前帧与前一帧的背景完全一样，只是小球平移了一个位置，如果简单地以第k-1帧像素值作为k帧的预测值，则在实线和虚线所示的圆内的预测误差都不为零。如果已经知道了小球运动的方向和速度，可以从小球在k-1帧的位置推算出它在k帧中的位置来，而背景图像（不考虑被遮挡的部分）仍以前一帧的背景代替，将这种考虑了小球位移的k-1帧图像作为k帧的预测值，就比简单的预测准确得多，从而可以达到更高的数据压缩比。这种预测方法称为具有运动补偿的帧间预测。 
图 04-01-6 帧间预测与具有运动补偿的帧间预测 
具有运动补偿的帧间预测编码是视频压缩的关键技术之一，它包括以下几个步骤：首先，将图像分解成相对静止的背景和若干运动的物体，各个物体可能有不同的位移，但构成每个物体的所有像素的位移相同，通过运动估值得到每个物体的位移矢量；然后，利用位移矢量计算经运动补偿后的预测值；最后对预测误差进行量化、编码、传输，同时将位移矢量和图像分解方式等信息送到接收端。图04-01-7示出了具有运动补偿的帧间预测器的原理框图。 
图04-01-7 具有运动补偿的帧间预测器功能框图 
在具有运动补偿的帧间预测编码系统中，对图像静止区和不同运动区的实时完善分解和运动矢量计算是较为复杂和困难的。在实际实现时经常采用的是像素递归法和块匹配法两种简化的办法。
像素递归法的具体作法是，仍需通过某种较为简单的方法首先将图像分割成运动区和静止区。在静止区内像素的位移为零，不进行递归运算；对运动区内的像素，利用该像素左边或正上方像素的位移矢量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为两个传输帧之间的帧间隔数。 
简单线性帧间内插的缺点在于当图像中有运动物体时，两个传输帧在物体经过的区域上不再一一对应，因而引起图像模糊。如图04-01-8所示，为解决这一问题可采用带有运动补偿的帧间内插。具有运动补偿的帧间内插和帧间预测都需要进行运动估值，但二者的目的和运动估值不准确所带来的影响不完全相同。 
图04-01-8 帧间内插示意图 
在帧间预测中引入运动补偿的目的是为了减少预测误差，从而提高编码效率。运动估值的不准确会使预测误差加大，从而使传输的数据率上升，但接收端据此位移矢量和预测误差解码不会引起图像质量下降。而在帧间内插中引入运动补偿的目的，是使恢复的内插帧中的运动物体不致因为内插而引起太大的图像质量下降。这是由于在丢弃帧内没有传送任何信息，要确定运动物体在丢弃帧中的位置必须知道该物体的运动速度。运动估值的不准确，将导致内插出来的丢弃帧图像的失真。另外，在帧间内插中的位移估值一般要对运动区的每一个像素进行，而不是对一个子块；否则，内插同样会引起运动物体边界的模糊。因此，在帧间内插中较多使用能够给出单个像素位移矢量的像素递归法。 
其他还有阈值法（只传送像素亮度的帧间差值超过一定阈值的像素）、帧内插（对于活动缓慢的图像，利用前后两帧图像进行内插，得到预测图像，然后对帧差信号进行编码）、运动估计与补偿等。