一、实验概述
1.1 实验目的
- 掌握离散无记忆信源熵、平均码长、编码效率、码长方差的理论计算公式;
- 熟练掌握香农-范诺(Shannon-Fano)编码、哈夫曼(Huffman)编码的完整构造步骤;
- 通过两组典型信源(均匀等概率信源、非均匀概率信源)手工推演两种编码;
- 从平均码长、编码效率、码长方差三个维度对比两种前缀码的压缩性能;
- 分析哈夫曼编码性能优于香农-范诺编码的底层原理,解释工程压缩算法普遍选用哈夫曼编码的原因。
1.2 核心理论公式
(1)信源熵(无损压缩理论下界)
H(X) = -求和(i从1到n)[ p_i × log₂(p_i) ],单位:bit/符号p_i:第i个信源符号的出现概率。
(2)平均码长
L平均 = 求和(i从1到n)[ p_i × l_i ]l_i:符号x_i对应的码字二进制长度。
(3)编码效率(衡量压缩性能,越接近100%越好)
η = [ H(X) ÷ L平均 ] × 100%
(4)码长方差(衡量码字长度均匀程度,方差越小硬件实现越友好)
σ² = 求和(i从1到n)[ p_i × (l_i - L平均)² ]
1.3 两种编码构造规则
1.3.1 香农-范诺编码步骤
- 将全部信源符号按照概率从大到小降序排序;
- 将符号集合划分为概率总和尽可能接近相等的上下两组;
- 上一组所有符号码字首位填0,下一组填1;
- 对划分后的两组递归执行分组操作,直至每组仅剩余单个符号,停止递归。
1.3.2 哈夫曼编码步骤
- 符号按概率降序排列;
- 选取概率最小的两个符号合并为一个新父节点,父节点概率为两子节点概率之和;两条分支分别标记0、1;
- 将新节点放回符号序列,重新排序,重复合并操作,直到仅剩唯一根节点;
- 从根节点向叶子节点反向读取路径0/1序列,得到每个符号的唯一前缀码字。
二、两组信源编码手工推演实验
2.1 实验一:4符号均匀等概率信源信源
符号集合 X={x₁,x₂,x₃,x₄},概率分布 P={0.25,0.25,0.25,0.25}
2.1.1 计算信源熵
H(X) = -4 × 0.25 × log₂0.25 = 2 bit/符号
2.1.2 香农-范诺编码推演
- 排序:x₁(0.25),x₂(0.25),x₃(0.25),x₄(0.25)
- 第一次分组:{x₁,x₂}(总概率0.5,码前缀0)、{x₃,x₄}(总概率0.5,码前缀1)
- 二次分组后码字:x₁:00,x₂:01,x₃:10,x₄:11,全部码长l_i=2
平均码长:L平均(SF)=0.25 × (2+2+2+2)=2
编码效率:η(SF)=(2÷2)×100%=100%
码长方差:所有码长相等,σ²(SF)=0
2.1.3 哈夫曼编码推演
多次合并最小概率节点后,最终所有符号码字长度均为2。平均码长 L平均(Huff)=2,编码效率100%,码长方差σ²(Huff)=0。
2.1.4 本组实验小结
均匀等概率信源下,香农-范诺编码与哈夫曼编码性能完全一致,均达到无损压缩理论极限。