LA - LosslessAudio 无损音频编码及无损压缩原理介绍

作者:Sender  来源:WaveCN.com  发布日期:2008-03-17  最后修改日期:2008-03-17

LA (LosslessAudio, http://www.lossless-audio.com/) 也是一种由个人开发的无损音频压缩编码。其开发者是 Michael Bevin。LA目前的最新版本是0.4b,2004年2月8日释出。说实在也有些年头了。LA的特性包括:

1)压缩比非常高,一般可达原始音频的70%大小,某些情况下可达20%;
2)支持ID3v1标记;
3)支持RIFF段落;
4)支持管道操作。


缺点是:

1)封闭源码,并且作者无意在将来开放源码。但作者提供了具备全功能的SDK可供第三方开发;
2)编解码速度都非常慢。编码速度在Pentium III 1GHz下,以默认模式进行时约为2.5倍速。解码速度则要求CPU主频不低于500MHz;
3)不支持多声道音频和高分辨率(即不支持高于16位的采样位数);
4)不具备硬件支持(实际上,目前只有FLAC、Monkey's Audio以及WavPack三种无损压缩格式获得较广泛的硬件支持);
5)不具备混合/有损模式,即可以把音频编码为有损流和校正流两个文件,播放时可直接播放有损音频,也可在有损流的基础上加上校正文件获得无损音频;
6)软件支持不佳,缺乏各种播放器插件;
7)不支持播放增益;

由于LA已经很久没有更新(如前所述,最后一个版本是2004年2月的0.4b),因此关注这个编码已经意义不大,不过,在LA的网页上用了大 量的篇幅介绍无损压缩以及LA本身的工作原理。对无损压缩的技术原理感兴趣的朋友是值得关注的。下面我们一起来看看作者怎么说:

无损压缩的基础:预测

LA的原理与现有的各种无损压缩编码比如WavpackMonkey's Audio相类似。通常无损音频压缩可以分成两 部分:滤波以及熵编码。这两者中滤波是最重要的。所谓滤波(滤波器),即是根据设定的规则把一种数据转换成另一种数据的过程。对于无损音频压缩,滤波这个 数据变形的过程必须是可逆的,同时又要能收窄数值的范围以便能压缩得更好。这是一个两难的处理。预测是滤波的基础。在LA中,大多数的滤波器都是通过预测 器构建的。所谓预测器,是一种通过上一个音频采样值去推算下一个音频采样值的算法。预测器内部为实现预测会存储一些状态和历史数据。根据预测器构建的滤波 器,其输出值应为实际音频采样值与预测结果之间的差。即:

滤波输出 = 音频采样值 - 预测器(上一个音频采样值)

在解码时,便可简单地如下获得原始的采样值:

音频采样值 = 滤波输出 + 预测器(上一个音频采样值)

多重预测器

在LA中使用了多种不同的预测器。最简单的是三角滤波器,即预测结果为上一个音频采样值。为创建相对复杂的滤波器,首先要适应上一个音频采样值和预测 结果 之间的相关性。也即使用类似于:预测值 = 上一个音频采样值 * 权重 这样的公式,并根据实际情况适应性地修改权重值。一种简单的权重适应方法是如果最后一次的预测结果太低,则增加权重值,反之亦然。当然,还要考虑反向相关 的可能。

到了这个阶段,我们还可以从多个方向进行改善。首先是使用多个滤波器,连续地应用在数据上,即后一个滤波器使用前一个滤波器的输出(不是预测值)作为 输 入,如下:

滤波输出 = 音频采样值 - 预测器(音频采样值 - 预测器(上一个音频采样值))

同时,我们还可以创建不仅仅是根据上一个音频采样值而是根据前n个采样值进行预测的预测器。又或者,我们不是使用上一个音频采样值作为输入,而 是使 用前两个采样值的平均值。再或者,我们还可以把前n个采样值合并在一起作为预测器的输入,等等。同样地,根据预测器输入的改变,我们也可以对如何适应性调 整计算权重进行各种调整。

另一种改善预测器的做法是创建一个简单的滤波器,但这个滤波器的输入是最后n个采样值。因此,该滤波器需要通过一个数组之类的数据结构来存储n 个权 重值,并需要进行内部循环叠代来对权重值进行适应性调整以计算预测结果。

LA的大多数滤波器都是基于以上想法。很明显,上面说的那种通过处理最后n个采样值进行预测的方法在某方面与神经网络相似。的确,神经网络方面 的一 些原理可以应用到预测器中。但是根据LA作者的实际经验来看,完全应用神经网络会生成相对较差的结果,并且编码的速度难以接受。

多层复合适应

LA使用了大约8层的滤波器。使用这么多滤波器需要解决的其中一个问题是,增加一个额外的滤波器有时可能实际上是降低了性能。为解决此问题,在 LA 中通过对每层预测的权重进行适应性调整。其中一种比较基础的方法是使用如下公式:

适应的预测 = 预测 * 权重

在这里,可以如上所述地应用类似的权重更新规则。该方法实际上对性能有很大的影响。LA实际上使用了更为负责的方法去获得其高压缩比。值得注意 的 是,实际上难以定义问题或寻找完美的解决办法。因为对于早期的滤波器层,我们希望能将低滤波器的权重,即使它(它们)已经能减少错误。因为不这样做的话低 层的滤波器会增加数据的复杂程度,从而妨碍了后期滤波器层的性能。如常一样,尝试和错误往往是选择哪种方法能工作得更好的最佳方法。

立体声去相关

立体声去相关处理也是影响性能的一个重要方面。大多数的无损音频压缩器,包括LA本身,尝试在处理过程中加入对立体声两个声道之间的相似性考虑 作为 改善压缩性能的方法。标准的做法是把L+R信号(L:左声道;R:右声道)信号转换为X+Y,即X=L-R和Y=R+(X / 2)。

LA通常不这样做。因为对于声道之间相关性低的音频,上面的做法往往是降低了性能。一个简单的例子是一段左声道没有声音而右声道有声音的音频, 在根 据上面的公式进行处理后反而变成两个声道都有了信号,反而把预测的结果加了倍。因此,LA的实际做法是在其中一些预测器中实现同时考虑两个声道的音频采样 数据。从而,声道之间更复杂的相关性得到了更好的处理,并使得LA能更好地适应信号中实际的相关程度,而不是简单地去假设声道之间的相关关系就是X+Y的 方式。

熵编码

最后是熵编码。所有的滤波器努力减少音频采样值的范围,其实际意图是认为更小的数值可以被更有效地储存。而如何实际地储存滤波后的数据是熵编码器的工 作。

典型地,无损音频编码是基于评估关于每一个采样值需要多少比特去存储的步骤而工作的。而具体需要多少个比特,这个数值被分成两个部分来看待:基 础部 分(采样数值/比特数的余数)和剩余部分(采样数值/比特数的商)。基础部分使用评估的比特数来存储,而剩余部分则是用Rice或类似的编码来存储。对 此,这个网址的文章有很好的解释:http://www.firstpr.com.au/audiocomp/lossless/

LA的工作方式有些微不同。代替评估比特的数量,LA评估实际的数值。即并不是评估比如12个比特,而是评估诸如最大范围是4938这样的结 果。因 此,采样值/4938会被以签署的两个部分:基础部分和剩余部分(采样值/4938的余)来存储。一种算术编码器可有效地同时存储基础部分和剩余部分。这 样做的好处是无论对于基础部分抑或剩余部分,我们都不需要迫使这两者受到二进制的一些限制。比如评估范围是2731,实际上需要的比特数是11.2个。这 种形式的熵编码明显地比标准方式更有效率,不过速度会更慢。

有一个问题是如何评估需要的比特数,或对于LA来说,评估结果的范围。一些编码器计算一系列n个数值的最优化值,并将此评估结果作为输出保存。 另一 方面,LA适应性地评估该值,在获得每一个采样值后都更新评估结果。比如我们可以用如下公式进行表示:

公式评估结果 = 最后一个音频采样值 + 评估值*C,C是在0和1之间的某个常数。

需要注意,以上的内容只是实现无损音频压缩的方法的简单介绍,实际情况,关键是细节的处理,要比上面所描述的还要复杂得多。

本栏目相关
  •  2009-03-21 mp3的无损版本:mp3HD已经推出!
  •  2008-03-31 最流行的无损压缩格式 - FLAC 系列之二:FLAC格式应用
  •  2008-03-11 MPEG-4 音频无损编码:MPEG-4 Audio Lossless Coding (ALS)
  •  2008-03-24 来自俄罗斯的无损音频压缩编码:True Audio (TTA)
  •  2008-04-03 最流行的无损压缩格式 - FLAC 系列之四:评测和比较
  •  2008-04-02 最流行的无损压缩格式 - FLAC 系列之三:关于FLAC的常见疑问
  •  2008-03-17 LA - LosslessAudio 无损音频编码及无损压缩原理介绍
  •  2008-03-26 最流行的无损压缩格式 - FLAC 系列之一:FLAC格式介绍
  •  2008-03-13 无损音频压缩:OptimFROG
  • 微信订阅号二维码

    本页网址二维码: