Designing of HUFFMAN Decoder and Application in MP3 Decoder
| 摘 要:变长编码技术(VLC)是在图像、视频和音频数据压缩中应用的一项主要技术。本文主要讨论一种主要的变长编码技术——霍夫曼编码及其解码器的硬件实现方法。作为mp3解码器中一个重要的模块,霍夫曼解码器的实现方法关系到整个芯片的实时解码目标能否实现。我们采用平行解码的方式来实现设计,利用查找表(LUT)的方式在较短的时钟周期内完成一个码字的解码。 关键词:VLC;霍夫曼编码;MP3解码器;查找表 |
| 1. 引言 ---在多媒体数据的压缩中,一项广泛应用的编码技术就是熵编码。作为重要的熵编码,霍夫曼编码可以通过消除统计的冗余数据来达到无损压缩的目的。本论文主要讨论霍夫曼(HUFFMAN)解码的硬件实现方法及MP3解码中霍夫曼解码器的设计。 2 霍夫曼编码算法 3 霍夫曼解码器的硬件结构研究 最简单的霍夫曼解码器结构就是对输入的数据流按位进行解码,也就是比特串方式的解码器。采用Moore型状态机,可以很容易的设计出比特串方式的解码器。假设给定任何一组霍夫曼码,解码器的有限状态机可以通过如下方法建立:把每个结点(0或1)看作不同的状态,把下一时刻的输入看作向下一个状态跳转的条件。按照这样的做法,“表1”中的霍夫曼码的解码器的状态机可以构建如图1所示。 采用并行技术设计的解码器的优点就是解码可以在每个时钟周期内进行,不受码长的影响,硬件复杂度的提高换来了解码速度的加快。如图2采用并行技术设计的解码器的基本思想就是,采用查找表(LUT)把霍夫曼码字保存起来,通过把待解码字与查找表中码字的比较匹配,来实现解码的目的。这种结构比特流输入到解码器的长度是固定的,比如说8位。8位的数据输入长度有可能包含多于一个码字的数据,这样需要一个缓冲器来保存输入数据流。缓冲器可以用桶型移位寄存器来实现,应用缓冲器的另外一个目的就是能保证在一个码字解完以后,可以移位到正确的位置。缓冲器中的码字解完以后,开始从比特流中接收新的码字,重复上面的过程,因此,解完缓冲器中的可能码字需要多于一个时钟周期的时间。此外,为了使查找表中的数据 以“表1”的码表为例,假设第一个输入的数据流由八位组成:“00100110”。开始解码的第一个周期累加器的值为“0”,解码的码字为“00”(A),码长为“2”。第二个周期,累加器的值为第一周期解码的码长“2”,累加器控制缓冲器移位2位,这样,解码的码字为“10”(D),码长为“2”。第三个周期,累加器的值为前两个周期解码的码长的和“4”,累加器控制缓冲器移位4位,解码的码字为“011”(C),码长为“3”。第四个周期,累加器的值为“7”,缓冲器中还剩一位数据。累加器控制缓冲器将前七位移出,输入新的比特流。算上上次解码剩下的一位“0”,假设第二个输入的8位数据是“10010101”,这样,下一个被解出的码字是“01001”(E)。第五个时钟周期,累加器的值为“12”,已经大于缓冲器的8位容量,因此用累加器的值减去“8”得到的值才是缓冲器中下一个未解码数据的位置。解码器重复以上过程,直到所有比特流中的数据全部解完。 4 霍夫曼解码器在MP3解码器中的应用 作为一种重要音频数据的压缩算法,mp3算法以其优秀的压缩能力和较高品质的音质获得了较高的评价。在mp3的压缩算法中,霍夫曼编码的初始数据是DCT变换输出的音频频率线经过量化后的值。在mp3解码的过程中,霍夫曼解码器的作用是接受mp3比特流中的主数据,输出576条初始频率线。mp3的霍夫曼编码分为三个区域:Big-values,Count1,Rzero。Big-values区包含着出现频率最低的DCT系数,用最高的精确度来编码,为了进一步增强霍夫曼编码的精确度,将Big-values区再划分成三个区域,每个区域有32个码表可供选择;Count1区包含着出现频率中等的DCT系数,这个区中每四个值编码为一个码字,一共有2个码表供这个区域选择;Rzero区包含的是出现频率最高的频率值,全部被编码为0,不需要传输。在设计mp3解码器的霍夫曼解码器部分的时候,除了采用上述的平行结构,还要考虑上述三个区的起始边界,以及补零的问题。霍夫曼码字的三个区的起始边界信息和码表选择信息可以在mp3比特流数据的帧头和侧信息中找到;在解完Big-values和Count1两个区中的数据后,解码器还应该自动补0,直到解出576个频率值为止。MP3解码器中的霍夫曼解码器的状态机设计如图3所示。 参考文献 |