R元HuffMan编码的MATLAB实现
R元HuffMan编码的MATLAB实现
张月华 崔文超 湖北省宜昌市三峡大学理学院 443002
的码字越短,符号出现的概率越低,被分配的码字越长。
(2)两个出现频率最少的符号将有相同长度的码字,并且他们只有最低有效位不同。
这些编码的平均长度接近于信源的熵。
3. 算法及实现
本算法的r元编码过程实现如下:(1)将q个信源按概率分布大小依递减次序排列:
;
(2)用0,1,2,…,r-1码符号分别代表概率最小的r个信源符号,并将这r个概率最小的信源符号合并成一个,以得列只包含q-r+1个符号的新信源S1,称为缩减信源;
(3)把缩减信源S1的符号仍按概率大小依递减次序排列,并将其最后r个概率最小的符号合并成一个符号,并分别用0,1,2,…,r-1码符号表示这样就形成了q-2(r-1)个符号的缩减信源S2;
(4)依次继续下去,直至信源最后只剩下r个符号为止。将这最后r个信源符号分别用r进制符号0,1,…,r-1表示;
(5)然后,从最后一级缩减信源开始,向前返回,就得出各信源符号所对应的码符号序列,即相应的码字。
对于r元Huffman编码,为充分利用短码,使Huffman的平均码长最短,必须使最后一个缩减信源有r信源符号,因此,信源S符号的个数n1,需补K个概率为0的符号,则需满足
n1+K=S(r-1)+r
式中,S表示信源缩减的次数。在Matlab中,缩减次数S和补零个数K可由下列语句实现:
n1=length(p);
s=ceil((n1-r)/(r-1));k=(r-1)*s+r-n1;
程序中“m矩阵”记录了每次缩减后新信源的符号概率排序标号。Sort函数实现将符号概率按升序排列,程序中将q
分配具有唯一可译的可变长码字(Variable-length code),降低平均码字长度,以提高信息的传输速度,节省存储空间。
本文在第2部分将结合统计编码(statistic coding)中的最佳编码Huffman编码,讨论其编码的基本原理;第3部分介绍Huffman编码的算法实现(多元);第4 部分将结合本文实验结果讨论Huffman编码的性能;最后,总结文章。
2. Huffman编码(coding)的基本原理
最佳编码定理:在变长编码中,如果码字长度严格按照信息源(source)中符号出现概率大小的相反顺序排列,则平均码字长度一定其他符号顺序排列方式的平均码字长度。基于Shannon的原编码理论,信源(source)可以使用接近信源的熵的平均长度编码对信源进行编码。1952年D.A. Huffman提出的Huffman编码基于对以下两种最佳前缀编码(prefixcode)的观察:
(1)符号出现的概率越频繁,被分配
⒈ 引言
图像数据是一种十分重要且数据量很大的信息源,特别是多媒体及网络技术兴起后,它已成为多媒体信息中最重要的组成部分,其编码压缩技术受到人们的普遍关注。在图像通信、多媒体网络通信等场合,压缩编码已形成一系列静态图像和视频国际标准,它们为信息高速公路的铺设奠定了技术基础。统计编码(statisticcoding)是根据信息源的概率分布特性,
表1 2元Huffman编码生成过程举列
表2 不同进制的Huffman编码结果比较