数据压缩与信源编码第3讲霍夫曼编码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如码流00110 v=0,first[1]=2; v=00,first[2]=4; v=001,first[3]=3; v=0011,first[4]=5; v=00110,first[5]=4; 码长为5,v-first[5]=2,符 号为码长为5的第2个符号 (以0开始),即符号7
Huffman编码编程实现方法
码长 Length 码字个数 Numl 起始编码 first
1 0 2
2 0 4
3 4 3
4 0 5
5 5 4
6 7 0
规范Huffman码字
码长 Length 码字个数 Numl 起始编码 first 1 0 2 2 0 4 3 4 3 4 0 5 5 5 4 6 7 0
规范的Huffman码字可以这样解码 x:=1; input v; while v<first[x] append next input bit to v; x := x + 1; end while;
Huffman编码算法
符号
概率 编码
a1
0.2 10
a2
0.4 0
a3
0.2 110
a4
0.1 1110
0 1.0 1 0 a1
a5
0.1 1111
Huffman编码平均码长 =0.2*2+0.4*1+0.2*3+0.1*4+0.1*4 a2 =2.2bits 假定以每个内节点的所有孩子节点的概率 之和表示该节点的值,Huffman编码树的 内节点之和等于平均码长。
最小方差Huffman编码算法
符号 编码1
编码2 编码3
a1 10
01 10
a2 0
1 00
a3 110
001 11
a4 1110
0001 010
a5 1111
0000 011
如果信源连续输出a2,则编码1码流输出为1000bit/秒,浪 费信道带宽。 如果信源连续输出a5,则编码1码流输出为4000bit/秒,信 道带宽又不足。 为了充分利用信道带宽,必须对编码输出的码流进行缓冲, 在信道带宽不足时将码流存储起来,在信道带宽富裕时进 行传送。
1 00
110
001 11
1110
0001 010
1111
0000 011
Huffman编码的码长虽然是可变的,但却不需要另外附加同 步代码。 例如,10011011101111按照编码1可解释为a1a2a3a4a5。 又如,100011010011按照编码3可解释为a1a2a3a4a5。
规范Huffman码字
a5 0.1
0 1 a2’(1.0)
0 1
a3
’(0.4)
符号 Huffman 编码
a1 10
a2 0
a3 110
a4 1110
a5 1111
Huffman编码算法
符号 Huffman 编码 a1 10 a2 0 a3 110 a4 1110 a5 1111
编码示例: 信源输出符号序列a1,a2,a3,a4,a5,a2,a1,a2 Huffman编码输出为100110111011110100
编码开始 解码开始 概率统计 接收码表
建立码树/码表
恢复码树/码表
传送码表
接收压缩码流
编码-传送压缩码流
解码-恢复原码
编码结束
解码结束
Huffman编码编程
编码开始 对原始数据出现次数进行统计,将次 数存储在数组counter中。 概率统计
a2(0.4) a4
’(0.2)
符号 编码3
a1 10
a2 00
a3 11
a4 010
a5 011
最小方差Huffman编码算法
符号 编码1
编码2 编码3
a1 10
01 10
a2 0
1 00
a3 110
001 11
a4 1110
0001 010
a5 1111
0000 011
Huffman编码1和2码字长度在1~4之间,码长方差较大, 编码3的码字长度在2~3之间,码长方差较小。 为什么码长方差小的编码最佳? 对于一定速率的信源,例如1000symbol/秒, Huffman编 码平均码长为2.2bits,则平均编码码流输出为2200bit/秒, 假定信道带宽为2200bit/秒,能够满足传输要求。
规范Huffman码字
符号 编码2 符号 编码2 1 011 9 01000 2 100 10 000000 3 101 11 000001 4 110 12 000010 5 00100 13 000011 6 00101 14 000100 7 00110 15 000101 8 00111 16 000110
Huffman编码算法
符号 概率
a2(0.4) a1(0.2) a3(0.2) a4(0.1) a5(0.1) 1 0
a1 0.25
a2(0.4) a1(0.2) a3(0.2) a4’(0.2)
a2 0.4
a2(0.4)
a3 0.2
1 a1(0.2)
a4 0.1
a2(0.4) 0 a1
‘(0.6)
符号 概率
a2(0.4) a1(0.2) a3(0.2) a4(0.1) a5(0.1) 0 1
a1 0.25
a2(0.4) a4’(0.2) a1(0.2) a3(0.2) 0 1
a2 0.4
a1
’(0.4)
a3 0.2
0 1 a1
a4 0.1
a2‘(0.6)
‘(0.4)
a5 0.05
0 1 a2’(1.0)
数据压缩与信源编码 第3讲 霍夫曼编码
西安电子科技大学 电子工程学院 主讲 :林三虎
Huffman编码算法
基本规则
① 出现概率越高的符号采用越短的编码。 ② 出现概率最低的两个符号采用相同长度的编码。
具体步骤
① 将符号出现概率从高到低排序。
② 将概率最低的两个符号合并成一个符号,它们概率之
和为新符号的概率。 ③ 重复上面两个步骤,直到概率为1。 ④ 每次合并符号,用0和1区分两个符号。 ⑤ 从根节点开始搜索每个符号,记录其0,1序列即为该 符号的编码。
Huffman编码特点
符号 a1 a2 a3 a4 a5
编码1
编码2 编码3
10
01 10
0
1 00
110
001 11
1110
0001 010
1111
0000 011
哈夫曼编码方法构造出来的码不是惟一的。
Huffman编码特点
符号 a1 a2 a3 a4 a5
编码1
编码2 编码3
10
01 10
0
0.6
1 0.4 1
0 a3
0
a4 Huffman编码树
0.2 1 a5
Huffman编码算法
符号 概率 Huffman编 码 a1 0.2 10 a2 0.4 0 a3 0.2 110 a4 0.1 1110 a5 0.1 1111
Huffman编码平均码长 =0.2*2+0.4*1+0.2*3+0.1*4+0.1*4=2.2bits 信源的熵 H ( A) P(ai )i(ai ) P(ai ) log P(ai ) 2.122bit / symbol Huffman编码冗余度=Huffman编码平均码长-信源的熵 =0.078bits/symbol Huffman编码没有达到压缩能力的极限,仍存在继续压缩 的可能。
最小方差Huffman编码算法
符号 编码1
编码2 编码3
1000symbol/s a5 a5 a5 a2 a1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
a1 10
01 10
a2 0
1 00
a3 110
001 11
a4 1110
0001 010
a5 1111
规范的Huffman码字这样产生 first[6]=0; for x:=5 downto 1 do first[x]=[(first[x+1]+numl[x+1])/2] 其中,[y]表示取不小于y的最小整数。
码长 Length
码字个数 Numl
1
0
2
0
3
4
4
0
5
5
6
7
起始编码 first
2
4
3
5
4
Huffman编码算法
符号 概率 Huffman编 码 定长码 a1 0.2 10 000 a2 0.4 0 001 a3 0.2 110 010 a4 0.1 1110 011 a5 0.1 1111 100
Huffman编码平均码长 =0.2*2+0.4*1+0.2*3+0.1*4+0.1*4=2.2bits 如果使用定长码,每个符号需要3bits,Huffman编码平均 每符号节约0.8bits,压缩比3:2.2=1.36倍。
0000 011
2200bit/s 1,1 1,1 1,1 1,1 1,1
最小方差Huffman编码算法
符号 编码1
编码2 编码3
a1 10
01 10
a2 0
1 00
a3 110
001 11
a4 1110
0001 010
a5 1111
0000 011
如果信源连续输出a2,则编码1码流输出为1000bit/秒,浪 费信道带宽。 如果信源连续输出a5,则编码1码流输出为4000bit/秒,信 道带宽又不足。 编码的码长方差越大,缓冲必须越大; 编码的码长方差越小,缓冲可以越小; 因此,最佳的Huffman编码为最小方差Huffman编码。
0
规范Huffman码字
符号 编码1 编码2 符号 编码1 编码2 1 000 011 9 10100 01000 2 001 100 10 101010 000000 3 010 101 11 101011 000001 4 011 110 12 101100 000010 5 10000 00100 13 101101 000011 6 10001 00101 14 101110 000100 7 10010 00110 15 101111 000101 8 10011 00111 16 110000 000110
Huffman编码算法
符号 概率
a2(0.4) a1(0.2) a3(0.2) a4(0.1) a5(0.1) 0 1
a1 0.2
a2(0.4) a1(0.2) a3(0.2) a4’(0.2)
a2 0.4
a2(0.4)
a3 0.2
0 a1(0.2)
a4 0.1
a2(0.4) 1 a1
‘(0.6)
编码2
10
01
0
1
110
001
1110
0001
1111
0000
Huffman编码算法
霍夫曼编码不唯一,什么样的霍夫曼编码最好呢? 答案是:最小方差霍夫曼编码 最小方差霍夫曼编码在合并两个符号时,如果有3个或 以上的符号概率都最小,则将刚合并的符号放在概率相 同的符号的最上面。
最小方差Huffman编码算法
a5 0.05
1 0 a2’(1.0)
1 0
a3
ຫໍສະໝຸດ Baidu
’(0.4)
霍夫曼编码中0和1的分配是任意的
a1 a2 a3 a4 a5
符号
编码1
编码2
10
01
0
1
110
001
1110
0001
1111
0000
Huffman编码算法
符号 概率
a2(0.4) a1(0.2) a3(0.2) a4(0.1) a5(0.1) 1 0
最小方差Huffman编码算法
符号 编码1
编码2 编码3
a1 10
01 10
a2 0
1 00
a3 110
001 11
a4 1110
0001 010
a5 1111
0000 011
对于一定速率的信源,例如1000symbol/秒, Huffman编 码平均码长为2.2bits,则平均编码码流输出为2200bit/秒, 假定信道带宽为2200bit/秒,能够满足传输要求。 如果信源连续输出a2,则编码1码流输出为1000bit/秒,浪 费信道带宽。 如果信源连续输出a5,则编码1码流输出为4000bit/秒,信 道带宽又不足。
规范的霍夫曼码字是从Huffman码字从特意挑选出来的, 目的是便于在译码时检测码字的长度。 下面两个编码中,编码2为规范的Huffman码字。
符号 编码1 编码2 符号 编码1 编码2 1 000 011 9 10100 01000 2 001 100 10 101010 000000 3 010 101 11 101011 000001 4 011 110 12 101100 000010 5 10000 00100 13 101101 000011 6 10001 00101 14 101110 000100 7 10010 00110 15 101111 000101 8 10011 00111 16 110000 000110
a1 0.25
a2(0.4) a1(0.2) a3(0.2) a4’(0.2)
a2 0.4
a2(0.4)
a3 0.2
1 a1(0.2)
a4 0.1
a2(0.4) 0 a1
‘(0.6)
a5 0.05
1 0 a2’(1.0)
1 0
a3
’(0.4)
因此,霍夫曼编码不唯一
a1 a2 a3 a4 a5
符号
编码1