【刊首语】 · Web viewword 形式,没有形成教案。 较多 使用 《推销实务》 有 有 未传 24 李文亮 统计学基础 有 有 有 教案内容完整,没有使用
没有想像力的灵魂,就像没有望远镜的天文台。 - 爱因斯坦
-
Upload
upton-camacho -
Category
Documents
-
view
144 -
download
9
description
Transcript of 没有想像力的灵魂,就像没有望远镜的天文台。 - 爱因斯坦
没有想像力的没有想像力的灵魂,就像没有望灵魂,就像没有望远镜的天文台。远镜的天文台。
-- 爱因斯坦爱因斯坦
2
第五章 信源编码
3.1 引言3.2 香农编码3.3 费诺编码3.4 哈夫曼编码3.5 游程编码3.6 算术编码3.7 冗余编码3.8 LZ 编码3.9 信源编码总结
3
3.5 游程编码3.5.1 游程编码对象和性质3.5.2 游程编码的定义3.5.3 二元独立序列3.5.4 游程编码的效率3.5.5 长码的截断处理方法
4
3.5.1 游程编码对象和性质 香农编码、费诺编码、哈夫曼编码主要是针对无
记忆信源。当信源有记忆时上述编码效率不高;
游程编码对相关信源编码更有效;
香农编码、费诺编码、哈夫曼编码属于无失真信源编码;
游程编码属于无失真信源编码。
3.5游程编码
5
3.5.2 游程编码的定义游程:数字序列中连续出现相同符号的一段。
二元序列的游程:只有“ 0” 和“ 1” 两种符号。
连“ 0” 这一段称为“ 0” 游程,它的长度称为游程长度 L(0) ;
连“ 1” 这一段称为“ 1” 游程,它的游程长度用 L(1) 表示。
3.5游程编码
6
3.5.3 二元独立序列① 二元独立序列游程长度概率 若规定二元序列总是从“ 0” 开始,第一个游程是“ 0”
游程,则第二个游程必为“ 1” 游程,第三个又是“ 0”游程……。
对于随机序列,游程长度是随机的其取值可为 1,2,3,… ,直至无穷。
游程长度序列 / 游程序列:用交替出现的“ 0” 游程和“ 1” 游程长度表示任意二元序列。
游程变换:是一种一一对应的变换,也是可逆变换。 例如:二元序列 000101110010001…
可变换成如下游程序列 31132131
3.5游程编码
7
游程变换减弱了原序列符号间的相关性。 游程变换将二元序列变换成了多元序列;这样就适合于用其他方
法,如哈夫曼编码,进一步压缩信源,提高通信效率。 编码方法:
首先测定“ 0” 游程长度和“ 1” 游程长度的概率分布,即以游程长度为元素,构造一个新的信源;
对新的信源(游程序列)进行哈夫曼编码。 多元序列也可以变换成游程序列,如 m 元序列可有 m 种游程。
但是变换成游程序列时,需要增加标志位才能区分游程序列中的“长度”是 m 种游程中的哪一个的长度,否则,变换就不可逆。这样,增加的标志位可能会抵消压缩编码得到的好处。所以,对多元序列进行游程变换的意义不大。
3.5.3 二元独立序列
3.5游程编码
8
② 二元独立序列游程长度的熵
若二元序列的概率特性已知,由于二元序列与游程变换序列的一一对应性,可计算出游程序列的概率特性。
令“ 0” 和“ 1” 的概率分别为 p0和 p1 ,则“ 0” 游程长度L(0) 的概率为
p[L(0)]=p0L(0)- 1p1
式中 L(0)=1,2,…, 在计算 p[L(0)] 时必然已有“ 0” 出现,否则就不是“ 0” 游程,
若下一个符号是“ 1” ,则游程长度为 1 ,其概率是 p1 =1-p0 ;若下一个符号为“ 0” 、再下一个符号为“ 1” ,则游程长度为 2 ,其概率将为 p0p1 ;依此类推。
3.5.3 二元独立序列
3.5游程编码
9
游程长度至少是 1 ,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。
同理可得“ 1” 游程长度 L(1) 的概率为P[L(1)]=p1
L(1)-1p0
“0” 游程长度的熵
3.5.3 二元独立序列
3.5游程编码
10
游程长度至少是 1 ,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。
同理可得“ 1” 游程长度 L(1) 的概率为P[L(1)]=p1
L(1)-1p0
“0” 游程长度的熵
3.5.3 二元独立序列
3.5游程编码
11
游程长度至少是 1 ,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。
同理可得“ 1” 游程长度 L(1) 的概率为P[L(1)]=p1
L(1)-1p0
“0” 游程长度的熵
3.5.3 二元独立序列
3.5游程编码
12
3.5.3 二元独立序列
3.5游程编码
13
3.5.3 二元独立序列
3.5游程编码
14
③ 二元独立序列的平均游程长度 “0” 游程序列的平均游程长度
同理可得“ 1” 游程长度的熵和平均游程长度
3.5.3 二元独立序列
3.5游程编码
15
④ 二元独立序列的熵 “0” 游程序列的熵与“ 1” 游程长度的熵之和
除以它们的平均游程长度之和,即为对应原二元序列的熵 H(X)
游程变换后符号熵没有变。因为游程变换是一一对应的可逆变换,所以变换后熵值不变,这也说明变换后的游程序列是独立序列。
3.5.3 二元独立序列
3.5游程编码
16
对于有相关性的二元序列,也可以证明变换后的游程序列是独立序列,并且也有
的结论,只是此时 H[L(0)], H[L(1)], l0和l1 的具体表达形式不同,它们是相关符号的联合概率和条件概率的函数。
3.5.3 二元独立序列
3.5游程编码
17
3.5.4 游程编码的效率 游程变换有较好的去相关效果,因而对游程序列进行哈
夫曼编码可获得较高的编码效率。 假设“ 0” 游程长度的哈夫曼编码效率为 η0 ,“ 1” 游程
长度的哈夫曼编码效率为 η1 ,由编码效率的定义和式(3.5.1) 可得对应二元序列的编码效率(信源熵和信息率之比为编码效率 η=H(X)/R )
当“ 0” 游程和“ 1” 游程的编码效率都很高时,采用游程编码的效率也很高,至少不会低于较小的那个效率。要想编码效率尽可能高,应尽可能提高熵值较大的游程编码效率。
3.5游程编码
18
3.5.5 长码的截断处理方法 理论上,游程长度可从 1 到无穷,要建立游程
长度和码字之间的一一对应的码表是困难的。 一般情况下,游程越长,出现的概率越小;当
游程长度趋向于无穷时,出现的概率也趋于 0 。 按照哈夫曼编码规则,概率越小,码字越长。
但小概率的码字对平均码长影响较小。所以在实际应用时,常对长码采用截断处理的方法。
3.5游程编码
19
3.6.1 算术编码特点及应用3.6.2 信源符号序列的累积分布函数 F(s)及对应的区间3.6.3 信源序列累积分布函数的递推公式3.6.4 算术编码方法3.6.5 算术编码的译码
3.6 算术编码
20
算术编码不同于哈夫曼码,它是非分组(非块)码。它从全序列出发,考虑符号之间的关系来进行编码。
算术编码利用了累积概率的概念。 算术码主要的编码方法是计算输入信源符号序列所对
应的区间。 因为在编码过程中,每输入一个符号要进行乘法和加
法运算,所以称此编码方法为算术编码。 二元序列的算术编码可用于黑白图像的编码,例如传
真。
3.6.1 算术编码的码特点及应用3.6
算术编码
21
设信源符号集 A={a1,a2,…,an} ,其相应概率分布为 P(ai),P(ai) >0(i=1,2, …,n)
信源符号的累积分布函数为 所得累积分布函数为每台级的下界值,则其区间为 [0,1)左闭右开区间。
F(a1)=0
F(a2)=P(a1)
F(a3)=P(a1)+P(a2) …
当 A={0,1} 二元信源时: F(0)=0 F(1)=P(0)
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
22
计算二元无记忆信源序列的累积分布函数
初始时:在 [0,1) 区间内由 F(1)划分成二个子区间[0,F(1))和 [F(1),1) , F(1)= P(0) 。
子区间 [0,F(1)) 的宽度为 A(0)= P(0) ,对应于信源符号“ 0” ;
子区间 [F(1),1) 的宽度为 A(1)= P(1) ,对应于信源符号“ 1” ;
若输入符号序列的第一个符号为 s=“0” ,落入 [0,F(1)) 区间,得 累积分布函数 F(s=“0”)= F(0)=0 ;
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
23
输入第二个符号为“ 1”, s=“01”
s=“01” 所对应的区间是在区间 [0,F(1)) 中进行分割;
符号序列“ 00” 对应的区间宽度为A(00)=A(0)P(0)=P(0)P(0)=P(00) ;
对应的区间为 [0,F(s=“01”)) 。
符号序列“ 01” 对应的区间宽度为A(01)=A(0)P(1)=P(0)P(1)=P(01)= A(0)- A(00) ;
对应的区间为 [F(s=“01”),F(1)) 。
累积分布函数 F(s=“01”)=P(00)= P(0)P(0)
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
24
输入第三个符号为“ 1” : 输入序列可记做 s1=“011” (若第三个符号输入为“ 0” ,可记做s0=“010” );
现在,输入序列 s1=“011” 对应的区间是对区间 [F(s),F(1)) 进行分割;
序列 s0=“010” 对应的区间宽度为 A(s=“010”)=A(s=“01”)P(0)=A(s)P(0)
其对应的区间为 [F(s), F(s)+ A(s)P(0)) ; 序列 s1=“011” 对应的区间宽度为
A(s=“011”)=A(s)P(1)=A(s=“01”)- A(s=“010”)= A(s )-A(s0)
其对应的区间为 [F(s)+A(s)P(0),F(1)) ; 符号序列 s1=“011” 的累积分布函数为 F(s1)=F(s)+A(s)P(0) ; 若第三个符号输入为“ 0” ,符号序列 s0=“010” 的区间下界值仍为 F(s) ,得符号序列 s0=“010” 的累积分布函数为 F(s0)=F(s) 。
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
25
3.6 算术编码
3.6.3 信源序列累积分布函数的递推公式
26
归纳
当已知前面输入符号序列为 s ,若接着再输入一个符号“ 0” ,序列 s0 的累积分布函数为: F(s0)=F(s)
对应区间宽度为: A(s0)=A(s)P(0)
若接着输入的一个符号是“ 1” ,序列的累积分布函数为:F(s1)=F(s)+A(s)P(0)
对应区间宽度为: A(s1)=A(s)P(1)=A(s)- A(s0)
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
27
符号序列对应的区间宽度
A(s=“0”)=P(0)A(s=“1”)=1- A(s=“0”)=P(1)A(s=“00”)=P(00)=A(0)P(0)=P(0)P(0)A(s=“01”)=A(s=“0”)- A(s=“00”)=P(01)=A(0)P(1)=P(0)P(1)A(s=“10”)=P(10)=A(1)P(0)=P(1)P(0)A(s=“11”)=A(s=“1”)- A(s=“10”)=P(11)= A(s=“1”)P(1)=P(1)P(1)A(s=“010”)=A(s=“01”)P(0)=P(01)P(0)= P(010)A(s=“011”)=A(s=“01”)-
A(s=“010”)=A(s=“01”)P(1)=P(01)P(1)=P(011)
信源符号序列 s 所对应区间的宽度 A(s)等于符号序列 s 的概率 P(s) 。
3.6.2 信源符号序列的累积分布函数 F(s) 及对应的区间
3.6 算术编码
28
二元信源符号序列的累积分布函数的递推公式
F(sr)=F(s)+P(s)F(r) (r=0,1) (3.6.1)
sr 表示已知前面信源符号序列为 s ,接着再输入符号为 r
F(0)=0 , F(1)=P(0)
F(s0)=F(s)
F(s1)=F(s)+P(s)F(1)= F(s)+P(s)P(0)
A(sr)=P(sr)=P(s)P(r) (r=0,1) (3.6.2)
A(s0)=P(s0)=P(s)P(0)
A(s1)=P(s1)=P(s)P(1)
3.6 算术编码
3.6.3 信源序列累积分布函数的递推公式
29
举例:已输入二元符号序列为 s=“011” ,接着再输入符号为“ 1” ,得序列累积分布函数为:
F(s1)=F(0111)=F(s=“011”)+P(011)P(0)
=F(s=“01”)+P(01)P(0)+P(011)P(0)
=F(s=“0”)+P(0)P(0) +P(01)P(0)+P(011)P(0)
=0+P(00)+P(010)+P(0110)
对应的区间宽度为 A(s1)=P(s=“011”)P(1)=P(011)P(1)=P(0111)
3.6 算术编码
3.6.3 信源序列累积分布函数的递推公式
30
上述整个分析过程可用图 5.6.1描述
式 (3.6.1)和 (3.6.2) 是可递推运算,在实际中,只需两个存储器,把 P(s)和 F(s)存下来,然后,根据输入符号和式 (3.6.1)、 (3.6.2) 更新两个存储器中的数值。因此在编码过程中,每输入一个符号要进行乘法和加法运算,所以称为算术编码。
3.6 算术编码
3.6.3 信源序列累积分布函数的递推公式
二元信源符号序列的累积分布函数的递推公式
F(sr)=F(s)+P(s)F(r) (r=0,1) (3.6.1) A(sr)=P(sr)=P(s)P(r) (r=0,1) (3.6.2)
31
3.6 算术编码
3.6.3 信源序列累积分布函数的递推公式
)1()()1()1(
)0()()0()0(
)0()()()1(
)()0(
PPPA
PPPA
PPFF
FF
sss
sss
sss
ss
32
通过关于信源符号序列的累积分布函数的计算,把区间分割成许多小区间,不同的信源符号序列对应不同的区间为[F(s),F(s)+P(s)) 。可取小区间内的一点来代表这序列。
编码方法:将符号序列的累积分布函数写成二进位的小数,取小数点后 k 位,若后面有尾数,就进位到第 k 位,这样得到的一个数 C ,并使 k满足
举例
3.6.4 算术编码方法
3.6 算术编码
33
编码效率
这样选取的数值 C ,一般根据二进小数截去尾数的影响得 C- F(s)<1/2k ,当在 l 以后没有尾数时 C=F(s) 。 F(s)+ 1/2k>C
而 P(s)≥1/2k
信源符号序列对应区间的上界为 F(s)+P(s)≥F(s)+1/2k>C
可见,数值在区间 [F(s),F(s)+P(s))内。而信源符号序列对应的不同区间(左封右开)是不重叠的,所以编得的码是即时码。
3.6 算术编码
3.6.4 算术编码方法
34
算术编码的编码效率很高。当信源符号序列很长时, L 很大时,平均码长接近信源的熵。
3.6 算术编码
3.6.4 算术编码方法
35
译码就是一系列比较过程,每一步比较 C-F(s)与 P(s)P(0) 。
F(s0)=F(s) F(s1)=F(s)+P(s)P(0)
s 为前面已译出的序列串; P(s) 是序列串 s 对应的宽度; F(s) 是序列串 s 的累积分布函数,即为 s 对应区间的
下界; P(s)P(0) 是此区间内下一个输入为符号“ 0” 所占的子
区间宽度; 若 C- F(s)<P(s)P(0) 则译码输出符号为“ 0” ; 若 C- F(s)>P(s)P(0) 则译码输出符号为“ 1” 。
3.6 算术编码
3.6.5 算术编码的译码
36
例:设二元无记忆信源 S={0,1} ,其 P(0)=1/4, P(1)=3/4 。对二元序列 11111100做算术编码。
[解 ]: P(s=11111100)=P2(0)P6(1)=(3/4)6(1/4)2
F(sr)=F(s)+P(s)F(r)F(s0)=F(s) F(s1)=F(s)+P(s)F(1)= F(s)+P(s)P(0)F(s)=P(0)+P(1)P(0)+P(1)2P(0)+P(1)3P(0)+P(1)4P(0)+P(1)5P(0) =0.82202=0.110100100111得 C= 0.1101010 得 s 的码字为 1101010 。
编码效率
3.6 算术编码
举 例
)1()()1()1(
)0()()0()0(
)0()()()1(
)()0(
PPPA
PPPA
PPFF
FF
sss
sss
sss
ss
37
序列 11111100的编码过程
输入符号 P(s)=A(s) A(s)P(0) F(s) K(s) C
空 1 0 0
1 0.11 0.01 = 0.01 1 0.1
1 0.1001 0.0011 = 0.0111 1 0.1
1 0.011011 0.001001 = 0.100101 2 0.11
1 0.01010001 0.00011011 = 0.10101111 2 0.11
1 0.0011110011 0.0001010001 = 0.1100001101 3 0.111
1 0.001011011001 0.000011110011 = 0.110100100111 3 0.111
0 0.00001011011001 0.00001011011001 0.110100100111 5 0.11011
0 0.0000001011011001 0.0000001011011001 0.110100100111 7 0.1101010
3.6 算术编码
举 例)1()()1()1(
)0()()0()0(
)0()()()1(
)()0(
PPPA
PPPA
PPFF
FF
sss
sss
sss
ss
38
3.7.1 冗余编码特点及应用3.7.2 冗余编码方法3.7.3 L- D 编码方法3.7.4 L- D译码方法3.7.5 举例
3.7 冗余编码
39
冗余位:在信源序列中,常有许多符号不携带信息,除了符号的数目或所占时长外,完全可以不传送。这些符号称为冗余位。如语音通信中讲话的间歇;图像通信中,图像的背景基本不变,并在图像中占相当大一部分。
这些冗余位所占的时长对正确表达信源是必须的,但没有必要全部传送,如果能去掉一部分,将会提高通信效率。
L- D 编码是一种典型的冗余位编码,它适合于冗余位较多的情况。当冗余位和信息位数相当时, L- D 编码非但不能压缩码率,反而使其有所扩展,不易应用。
3.7 冗余编码
3.7.1 冗余编码特点及应用
40
设多元消息序列 x1,x2,…,xm1,y,y,…y,xm1+1,xm1+2,…,xm2,y,y,…
x— 信息位; y— 冗余位,可为全 0或某种固定格式。 这样的序列可用下列序列来代替
111,…,100, …,000111, …,111000 二元序列中的“ 1”代表信息位; “ 0”代表冗余位; 连“ 1” 和连“ 0” 的个数分别代表信息位和冗余位的长度。 x1,x2,…,xm1,xm1+1,xm1+2,…,xm2… 删除了所有的冗余位,只把信息位排在一起。 把一个多元序列分解成一个二元序列和一个缩短了的多元序列,
对两个序列分别用不同不同的方法编码,可更有效地压缩信源。 这种方法要求同时传输两个序列,才能在接收端实时恢复出原来的多元序列,在实用上有一定的困难。
3.7 冗余编码
3.7.2 冗余编码方法
41
L- D(Lynch,Davission 分别独立提出 ) 编码方法是一种分帧传送冗余序列的方式;
编码方法 在冗余位序列中取 N 个符号作为一帧,编成一个码
字,码字中含有信息位的数量和位置信息,在接收端依据这些信息进行译码;
每个码字传送两个数: Q和 T ,由下式计算
3.7 冗余编码
3.7.3 L- D 编码方法
42
Q 的位数:
T 的位数:
总位数:
3.7 冗余编码
3.7.3 L- D 编码方法
43
寻找某一值 K 若
再找某一值 L
3.7 冗余编码
3.7.4 L- D 译码方法
44
例:有一冗余位序列: 001000000010000 ,令 N=15 ,对其编 L- D 码。
这里, Q=2, n1=3, n2=11 。则
3.7 冗余编码
3.7.5 举 例
45
哈夫曼编码的问题:首先,要求信源消息的概率必须已知或者可估计。因此编码过程必须分为两步,第一步估算信源的统计特性,第二步才是编码。在信源具有记忆性能并且用 Huffman 编码来表示信源的扩展输出时,第一步会耗费很多时间。其次,如果信源消息数目变大,则树型结构的大小和算法的复杂性会呈指数规律增加。在要求很高的传输速度的应用中, Huffman 编码的复杂性和编码速度就成为了瓶颈。Lempel-Ziv 编码即针对此问题而提出的新方法。
3.8 LZ 编码
LZLZ 码是码是 19771977 年两位以色列研究年两位以色列研究人员,人员, J.ZivJ.Ziv和和 A.LempelA.Lempel 提出提出的,它是一种基于字典的编码的,它是一种基于字典的编码方法。方法。 19841984年年 T.A.WelchT.A.Welch 给给出了出了 LZLZ 算法的修正形式,称算法的修正形式,称为为 LZWLZW 算法,成为计算机文算法,成为计算机文
件压缩的标准算法。件压缩的标准算法。
46
Lempel-Ziv 算法独立于信源的统计特性,是一种变长到定长的编码方案。
任何信源输出序列能唯一分解为可变长度的码组,这些码组是用等长的码字进行编码的。
Lempel-Ziv 算法及其各种变形使用消息自身迭代性地构造一个变长码字的分析序列,这些不同长度的码字构成一个码字典,编码过程就是在码字典中寻找与编码序列中下一段码相匹配的码。
当找到匹配时,编码按照以下思路进行: (1) 如果因为接收器已存有这个码段,因此那么无需重发,只需要辨认地址以重新取回该码段;
3.8 LZ 编码
47
(2) 如果没有找到匹配码段,则根据码段序列的参考位置,向序列添加下一个码元,以构造码字典的新码字。
(3) 编码开始时,使用一个空码字典,所以第一个码字是与先前码字无关的。
(4) 在一种码字典结构中,递归地形成地址的游程序列和该地址上的字符段。
编码后的码字总是由两部分组成:字典地址和本码段需要添加的消息 。
由此可见, Lempel-Ziv 编码方法充分利用了已编码消息的信息。
3.8 LZ 编码
48
例 待编码的字符序列为:abaaaabaabaaabbbbbbbabbbbbaababaababa··· ,
试用 Lempel-Ziv 方法给出编码结果。 解 编码从建立码字典开始。 由于前面没有编码结果,故对第 1 个消息 a ,其字典地址为 0 ,本码段需要添加的消息为 a ,编码结果为0a ,码字典中的地址为 1 ;
同理,对第 2 个消息 b ,其字典地址亦为 0 ,本码段需要添加的消息为 b ,编码结果为 0b ,码字典中的地址为 2 ;
从第 3 个消息起,将可以利用前面已编码信息了,这里可将第 3、 4 两个看成一个码段,第 3 个消息用码字典中已有的码地址 1来代替,本码段需要添加的消息为 a ,编码结果为 1a ,码字典中的地址为 3 ;
3.8 LZ 编码
49
由于第 5、 6 个消息恰好是码地址 3 对应的消息,故第 5、 6、 7 个消息为一段,编码结果为 3b ,码字典中的地址为 4 ;
依此类推,该序列的编码结果、码字典的地址以及被编码的码段内容,列于下表中。
编码结果 0a 0b 1a 3b 4a 4b 2b 7b 1b 8b 5b 11a ···
地址 1 2 3 4 5 6 7 8 9 10 11 12 ···
码段内容 a b aa aab aaba aabb bb bbb ab bbbb aabab aababa ···
表 本例的有关数据
3.8 LZ 编码
abaaaabaabaaabbbbbbbabbbbbaababaababa··· ,
50
Lempel-Ziv 方法利用了已编码信息来进行当前的编码,编码结果是等长码,编码的过程就是建立码地址和将待编码消息序列分段的过程,所有的码段内容都是不同的。
对于短的消息序列,这种方法很难看出具有高的编码效率,因为要把地址序号在编码中表示出来; 但随着待编码序列的增长,算法的压缩特
性就会变得很明显,因为将会有越来越多的地址所代表的消息长度较长。
3.8 LZ 编码
51
Lempel-Ziv 算法中选择最大地址数的问题 (1) 为解决地址问题,一个方法是去掉那些不再使用的
码组,代以新的码组,另一个方法是不用地址的概念。 (2) 对于前者只要编码和译码约定好就可以。 (3) 后者也称为 Lempel-Ziv 算法的另一种形式,这种
形式是将编码结果表示为 3部分内容: < 先前字符的数目,长度,下一个字符 > ,称之为编码包。这里没有用到地址的概念,而采用先前数据序列作为参照。
3.8 LZ 编码
52
例 需编码的字符序列 [a b a a b a b b b b b b b b a b b b b b a]
解:编码结果如图所示。
编码包 <0,0,a> <0,0,b> <2,1,a> <3,2,b> <1,7,a> <6,5,a>
内容 a b a a ba b bbbbbbb a bbbbb a
文本序列 a ab abaa aba aba b abaababbbbbbbba 整条序列
<0,0,a> ,被编码内容为 a; <0,0,b> ,被编码内容为 b<2,1,a> 向前数 2 个字符: a( b );(从右往左数) 包括这个字符,向后数(长度为 1 ),即就是它本身;(从左往右数) 再加上本次的一个字符: a a a
3.8 LZ 编码
53
<3,2,b> 向前数 3 个字符: b( aa )(从右往左数) 包括这个字符,向后数 2 个字符(长度为 2 ),即 ba
(从左往右数) 再加上本次的一个字符: b ba b <1,7,a> 向前数 1 个字符: b ; 包括这个字符,向后数 7 个字符(长度为 7 ),由于
它后面没有已编码的字符,将其重复 7次,即bbbbbbb
再加上本次的一个字符: a bbbbbbb a <6,5,a> 向前数 6 个字符: b ( bbbba );(从右往左数)
包括这个字符,向后数 5 个字符(长度为 5 ),即bbbbb
再加上本次的一个字符: a bbbbb a
3.8 LZ 编码
a b a a b a b b b b b b b b a b b b b b a
54
我们学习了 6 种信源编码:香农编码、费诺编码、哈夫曼编码、冗余编码、游程编码、算术编码、 LZ 编码。
游程编码和算术编码是非分组编码; LZ 编码是一种通用编码方法。
本章介绍的都是离散信源变长编码。 优点:提高编码效率; 缺点:需要大量缓冲设备来存储这些变长码,然后再以恒定的码
率进行传送;在传输的过程中如果出现了误码,容易引起错误扩散,所以要求有优质的信道。
有时为了得到较高的编码效率,先采用某种正交变换,解除或减弱信源符号间的相关性,然后再进行信源编码;有时则利用信源符号间的相关性直接编码。
3.9 信源编码总结
55
编码后信源信息率:信源编码后平均每个信源符号能载荷的最大信息量。
码率:信源编码后平均每个码元携带的信息量即编码后信道的信息传输率。
编码效率:衡量各种编码距极限压缩值的情况,即信源熵与信息率(编码后信源信息率)之比。
补充材料
2logK
R mL
( ) /H X R
( )
/
H XR
K L
56
最佳码:平均码长为最短的即时码,也称为紧致码
对某个给定分布的离散信源,存在一个二元最佳码,此码满足如下性质:
概率大的信源符号所对应的码长必不大于概率小的信源符号所对应的码长;
两个最小概率的信源符号所对应的码字必具有相同码长;
两个最小概率的信源符号所对应的码字的差别,必是最后一位码元不同。
补充材料
57
已知二元信源 {0,1},其 p0=1/8, p1=7/8 ,试用算术编码对下面序列进行编码,并计算平均码长。
11111100,
11111110111110
课堂练习
58
[解 ]: P(s=11111100)=P2(0)P6(1)=(7/8)6(1/8)2
F(sr)=F(s)+P(s)F(r)
F(s0)=F(s) F(s1)=F(s)+P(s)F(1)= F(s)+P(s)P(0)
F(s)=P(0)+P(1)P(0)+P(1)2P(0)+P(1)3P(0)+P(1)4P(0)+P(1)5P(0)=0.5512=0.1000110100011
得 C= 0.10001110 得 s 的码字为 10001110 。编码效率
)1()()1()1(
)0()()0()0(
)0()()()1(
)()0(
PPPA
PPPA
PPFF
FF
sss
sss
sss
ss
59
[解 ]: P(s= 11111110111110)=P2(0)P12(1)=(7/8)12(1/8)2
F(sr)=F(s)+P(s)F(r)
F(s0)=F(s) F(s1)=F(s)+P(s)F(1)= F(s)+P(s)P(0)
F(s)=0.7986=0.110011000110
得 C= 0.110011001 得 s 的码字为 110011001 。
编码效率
)1()()1()1(
)0()()0()0(
)0()()()1(
)()0(
PPPA
PPPA
PPFF
FF
sss
sss
sss
ss
60
作业pp.98-99(5 道题 )
3.4, 3.8, 3.9, 3.10, 3.12
61
Any QuestionsAny Questions !!