Mp3编码过程的几个步骤
Mp3使用了两种压缩技术来缩减音频数据量——其中一种是有损失的,一种是无损的。第一趟压缩先丢弃人耳不能感知的那部分数据,以及那些虽然可以感知,但
对音质影响不太大的数据,第二趟压缩用一般的数据压缩算法减少冗余,以达到进一步减小文件大小的目的。事实上第一趟压缩是mp3压缩过程中最麻烦的步骤,
主要的算法复杂度都体现在这个阶段。
感知编解码器的复杂度非常高,它们的具体工作方式互不相同,但所有的感知编解码器的基本原理都是一样的。简要地说,MP3编码过程可以被细分为下面几个离散的任务:
把信号划分为若干片断,每个片断成为一个“帧”。一般来说一帧的长度大概是几分之一秒。
分析信号以确定它的能量谱分布。也就是在听力能感觉到的整个频谱范围内,怎样分配音频文件中的bit才能最好地表示被编码的这段声音。因为最好能用同一个
算法(只做小的调整)对整个频谱的不同部分进行有效的编码,这一步把信号进一步划分为几个亚带,这些亚带可以被独立地处理以便得到最佳结果。(注意所有亚
带的编码算法都是同一个,只不过它们对比特的分配不同,具体的分配由编码器决定。)
考虑到编码比特率,还要计算一个帧所占用的最大比特数。这一步用于确定原始声音数据中,多大比例的数据将被保留,多大比例的数据将被丢弃。
编码器储存着人类心理声学的数学模型作为一个参考表,并把声音文件的每一帧的频率分布和参考表进行比较。从比较结果可以确定,哪些频率因为容易被人类感知而在回放时必须被准确渲染,那些频率因为不易被人类感知而可以用较少的比特来描述,甚至直接丢弃。
将上述处理完成后的比特流通过一个哈夫曼编码器,压缩冗余信息。哈夫曼编码过程与心理声学模型无关,只是用传统的信息理论减小信息冗余。这一步压缩不会丢弃任何信息,只是用较少的空间保存同样多的信息。
经过哈夫曼编码压缩的各帧被装配为一个串行的比特流,每个数据帧前面会有一个帧头。帧的头部包括了指导性的“元数据”,保存了关于该帧的特定信息。
在整个编码过程中,还有其他很多因素参与进来,这些因素通常是由编码开始前用户指定的编码器命令行选项决定的。此外,编码算法本身对某一帧进行编码的时
候,还可能会依赖于该帧的前面或者后面那些帧的编码结果。整个编码过程中通常某些步骤是可以并行进行的。上面我们描述的这些步骤并不一定按照我们描述的顺
序前后串行进行。
各种不同的压缩格式,不论是被用于音频,视频或者是静止图片、随机选择的文件,都既可以做成无损压缩,也可以是有损压缩。区别是明显的:无损压缩经过解压
缩之后恢复出来的数据和原数据完全相同,有损压缩则做不到这一点。Zip压缩就是无损压缩。同时有些类型的数据中,部分信息被丢弃是可以忍受的:或者是因
为你本来就感觉不到这些数据,或者是因为你希望通过丢弃部分次要信息来减小文件体积。
有损压缩的一个例子是JPEG,jpeg压缩基于这样一个事实:静止图像文件通常都保存了很多不必要的信息,这些信息对显示一张效果可以被人接受的图片来
说没有用处。Jpeg编码就是丢弃了一部分非必要信息,并且用数学方法去除了剩余信息中的冗余,这样对那些不需要达到很高分辨率的图片就可以取得很高的压
缩比。虽然jpeg编码并不能很精确地和mp3编码过程类比,但是它说明了有损压缩的基本概念。重要的是必须理解,不论一个mp3文件压缩的品质多么高,
它也丢弃了原来那个未经压缩的信号中的相当一部分信息。
阅读(346) | 评论(0) | 转发(0) |