您还可以将增量编码视为线性预测编码 (LPC),其中仅存储预测残差(),并且当前样本的预测变量为上一个样本。这是一个固定的线性预测器(没有针对数据优化的任意系数),可以准确地预测恒定信号。对残差再次运行相同的线性预测编码,您就得到了准确预测的线性信号。下一轮,二次信号。或者运行一次高阶固定预测器来做同样的事情。x[n]−x^[n]
这些固定的预测变量列在 Tony Robinson 的SHORTEN 技术报告中,你的 Eq. 4,虽然不经常使用,但也包含在FLAC 无损音频编解码器中。计算每个数据块的最佳预测系数并将它们存储在压缩块的标头中导致比使用固定预测器更好的压缩。
为了m-位输入残差是m+1- 位数,因为它是一个m-位输入和一个m位预测。但是,删除残差的最高有效位 (MSB) 不会影响m位模运算,因此残差可以存储为m位数。
线性预测器应该进行白化,使残差独立。在无损压缩中,剩下要做的就是对残差进行熵编码,而不是使用游程或其他基于符号的编码,这些编码在噪声信号上效果不佳。通常,熵编码由前缀码(也称为无前缀码)完成,该码将较长的码字分配给较大的残差,近似地最小化假设的残差值分布的平均编码长度。可以使用与有符号数兼容的 Rice 码(也称为 Golomb–Rice 码或 GR 码)变体,如 FLAC(表 1)中所做的那样,或有符号exp-Golomb 码就像在 h.264 视频压缩标准中所做的那样。Rice 码有一个分布参数,需要针对数据块进行优化,并保存在块头中。
表 1 不同Rice码参数下Rice码编码的4位有符号整数的二进制码字p值,使用FLAC__bitwriter_write_rice_signed
(源代码)。这种 Rice 代码变体有点浪费,因为并非所有二进制字符串都被识别为代码字。
−8−7−6−5−4−3−2−101234567p=00000000000000010000000000001000000000010000000010000001000010011010001000001000000010000000001000000000001000000000000010000000000000001p=10000000100000001000000100000100001000100101011011001100011000011000001100000011000000011p=2000110000100001100010001100100110100101111010101110010100111000101000111p=3011100110001010010001110110010101000100110111101111101001010110110101111
作为进一步的增强,不仅将一个残差编码,而且将多个残差编码为单个码字可以更准确地适应残差的真实分布,并且可以提供更好的压缩比,请参见非对称数字系统。