1 / 61

没有想像力的灵魂,就像没有望远镜的天文台。 - 爱因斯坦

没有想像力的灵魂,就像没有望远镜的天文台。 - 爱因斯坦. 第五章 信源编码. 3.1 引言 3.2 香农编码 3.3 费诺编码 3.4 哈夫曼编码 3.5 游程编码 3.6 算术编码 3.7 冗余编码 3.8 LZ 编码 3.9 信源编码总结. 3.5 游程编码. 3.5.1 游程编码对象和性质 3.5.2 游程编码的定义 3.5.3 二元独立序列 3.5.4 游程编码的效率 3.5.5 长码的截断处理方法. 3.5.1 游程编码对象和性质.

Download Presentation

没有想像力的灵魂,就像没有望远镜的天文台。 - 爱因斯坦

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 没有想像力的灵魂,就像没有望远镜的天文台。没有想像力的灵魂,就像没有望远镜的天文台。 -爱因斯坦

  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. 3.5.3 二元独立序列 • 游程变换减弱了原序列符号间的相关性。 • 游程变换将二元序列变换成了多元序列;这样就适合于用其他方法,如哈夫曼编码,进一步压缩信源,提高通信效率。 • 编码方法: • 首先测定“0”游程长度和“1”游程长度的概率分布,即以游程长度为元素,构造一个新的信源; • 对新的信源(游程序列)进行哈夫曼编码。 • 多元序列也可以变换成游程序列,如m元序列可有m种游程。但是变换成游程序列时,需要增加标志位才能区分游程序列中的“长度”是m种游程中的哪一个的长度,否则,变换就不可逆。这样,增加的标志位可能会抵消压缩编码得到的好处。所以,对多元序列进行游程变换的意义不大。 3.5游程编码

  8. 3.5.3 二元独立序列 ② 二元独立序列游程长度的熵 • 若二元序列的概率特性已知,由于二元序列与游程变换序列的一一对应性,可计算出游程序列的概率特性。 • 令“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游程编码

  9. 3.5.3 二元独立序列 • 游程长度至少是1,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。 • 同理可得“1”游程长度L(1)的概率为 P[L(1)]=p1L(1)-1p0 • “0”游程长度的熵 3.5游程编码

  10. 3.5.3 二元独立序列 • 游程长度至少是1,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。 • 同理可得“1”游程长度L(1)的概率为 P[L(1)]=p1L(1)-1p0 • “0”游程长度的熵 3.5游程编码

  11. 3.5.3 二元独立序列 • 游程长度至少是1,理论上,游程长度可以是无穷,但很长的游程实际出现的概率非常小。 • 同理可得“1”游程长度L(1)的概率为 P[L(1)]=p1L(1)-1p0 • “0”游程长度的熵 3.5游程编码

  12. 3.5.3 二元独立序列 3.5游程编码

  13. 3.5.3 二元独立序列 3.5游程编码

  14. 3.5.3 二元独立序列 ③ 二元独立序列的平均游程长度 • “0”游程序列的平均游程长度 • 同理可得“1”游程长度的熵和平均游程长度 3.5游程编码

  15. 3.5.3 二元独立序列 ④ 二元独立序列的熵 • “0”游程序列的熵与“1”游程长度的熵之和除以它们的平均游程长度之和,即为对应原二元序列的熵H(X) • 游程变换后符号熵没有变。因为游程变换是一一对应的可逆变换,所以变换后熵值不变,这也说明变换后的游程序列是独立序列。 3.5游程编码

  16. 3.5.3 二元独立序列 • 对于有相关性的二元序列,也可以证明变换后的游程序列是独立序列,并且也有 的结论,只是此时H[L(0)],H[L(1)],l0和l1的具体表达形式不同,它们是相关符号的联合概率和条件概率的函数。 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 算术编码 3.6.1 算术编码特点及应用 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6.3 信源序列累积分布函数的递推公式 3.6.4 算术编码方法 3.6.5 算术编码的译码

  20. 3.6.1 算术编码的码特点及应用 3.6 算术编码 • 算术编码不同于哈夫曼码,它是非分组(非块)码。它从全序列出发,考虑符号之间的关系来进行编码。 • 算术编码利用了累积概率的概念。 • 算术码主要的编码方法是计算输入信源符号序列所对应的区间。 • 因为在编码过程中,每输入一个符号要进行乘法和加法运算,所以称此编码方法为算术编码。 • 二元序列的算术编码可用于黑白图像的编码,例如传真。

  21. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 设信源符号集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)

  22. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 计算二元无记忆信源序列的累积分布函数 • 初始时:在[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;

  23. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 输入第二个符号为“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)

  24. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 输入第三个符号为“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)。

  25. 3.6.3 信源序列累积分布函数的递推公式 3.6 算术编码

  26. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 归纳 • 当已知前面输入符号序列为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)

  27. 3.6.2 信源符号序列的累积分布函数F(s)及对应的区间 3.6 算术编码 • 符号序列对应的区间宽度 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)。

  28. 3.6.3 信源序列累积分布函数的递推公式 3.6 算术编码 • 二元信源符号序列的累积分布函数的递推公式 • 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)

  29. 3.6.3 信源序列累积分布函数的递推公式 3.6 算术编码 • 举例:已输入二元符号序列为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)

  30. 3.6.3 信源序列累积分布函数的递推公式 3.6 算术编码 • 上述整个分析过程可用图5.6.1描述 • 式(3.6.1)和(3.6.2)是可递推运算,在实际中,只需两个存储器,把P(s)和F(s)存下来,然后,根据输入符号和式(3.6.1)、(3.6.2)更新两个存储器中的数值。因此在编码过程中,每输入一个符号要进行乘法和加法运算,所以称为算术编码。 • 二元信源符号序列的累积分布函数的递推公式 • 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 信源序列累积分布函数的递推公式 3.6 算术编码

  32. 3.6.4 算术编码方法 3.6 算术编码 通过关于信源符号序列的累积分布函数的计算,把区间分割成许多小区间,不同的信源符号序列对应不同的区间为[F(s),F(s)+P(s))。可取小区间内的一点来代表这序列。 • 编码方法:将符号序列的累积分布函数写成二进位的小数,取小数点后k位,若后面有尾数,就进位到第k位,这样得到的一个数C,并使k满足 • 举例

  33. 3.6.4 算术编码方法 3.6 算术编码 • 编码效率 • 这样选取的数值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))内。而信源符号序列对应的不同区间(左封右开)是不重叠的,所以编得的码是即时码。

  34. 3.6.4 算术编码方法 3.6 算术编码 • 算术编码的编码效率很高。当信源符号序列很长时,L很大时,平均码长接近信源的熵。

  35. 3.6.5 算术编码的译码 3.6 算术编码 译码就是一系列比较过程,每一步比较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”。

  36. 举 例 3.6 算术编码 例:设二元无记忆信源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。 编码效率

  37. 举 例 3.6 算术编码

  38. 3.7 冗余编码 3.7.1 冗余编码特点及应用 3.7.2 冗余编码方法 3.7.3 L-D编码方法 3.7.4 L-D译码方法 3.7.5 举例

  39. 3.7.1 冗余编码特点及应用 3.7 冗余编码 • 冗余位:在信源序列中,常有许多符号不携带信息,除了符号的数目或所占时长外,完全可以不传送。这些符号称为冗余位。如语音通信中讲话的间歇;图像通信中,图像的背景基本不变,并在图像中占相当大一部分。 • 这些冗余位所占的时长对正确表达信源是必须的,但没有必要全部传送,如果能去掉一部分,将会提高通信效率。 • L-D编码是一种典型的冗余位编码,它适合于冗余位较多的情况。当冗余位和信息位数相当时, L-D编码非但不能压缩码率,反而使其有所扩展,不易应用。

  40. 3.7.2 冗余编码方法 3.7 冗余编码 • 设多元消息序列 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… 删除了所有的冗余位,只把信息位排在一起。 • 把一个多元序列分解成一个二元序列和一个缩短了的多元序列,对两个序列分别用不同不同的方法编码,可更有效地压缩信源。 • 这种方法要求同时传输两个序列,才能在接收端实时恢复出原来的多元序列,在实用上有一定的困难。

  41. 3.7.3 L-D编码方法 3.7 冗余编码 • L-D(Lynch,Davission分别独立提出)编码方法是一种分帧传送冗余序列的方式; • 编码方法 • 在冗余位序列中取N个符号作为一帧,编成一个码字,码字中含有信息位的数量和位置信息,在接收端依据这些信息进行译码; • 每个码字传送两个数:Q和T,由下式计算

  42. 3.7.3 L-D编码方法 3.7 冗余编码 • Q的位数: • T的位数: • 总位数:

  43. 3.7.4 L-D译码方法 3.7 冗余编码 • 寻找某一值K • 若 • 再找某一值L

  44. 3.7.5 举 例 3.7 冗余编码 • 例:有一冗余位序列:001000000010000,令N=15,对其编L-D码。 • 这里,Q=2,n1=3,n2=11。则

  45. 3.8 LZ编码 • 哈夫曼编码的问题: • 首先,要求信源消息的概率必须已知或者可估计。因此编码过程必须分为两步,第一步估算信源的统计特性,第二步才是编码。在信源具有记忆性能并且用Huffman编码来表示信源的扩展输出时,第一步会耗费很多时间。 • 其次,如果信源消息数目变大,则树型结构的大小和算法的复杂性会呈指数规律增加。 • 在要求很高的传输速度的应用中,Huffman编码的复杂性和编码速度就成为了瓶颈。 • Lempel-Ziv编码即针对此问题而提出的新方法。 LZ码是1977年两位以色列研究人员,J.Ziv和A.Lempel提出的,它是一种基于字典的编码方法。1984年T.A.Welch给出了LZ算法的修正形式,称为LZW算法,成为计算机文件压缩的标准算法。

  46. 3.8 LZ编码 • Lempel-Ziv算法独立于信源的统计特性,是一种变长到定长的编码方案。 • 任何信源输出序列能唯一分解为可变长度的码组,这些码组是用等长的码字进行编码的。 • Lempel-Ziv算法及其各种变形使用消息自身迭代性地构造一个变长码字的分析序列,这些不同长度的码字构成一个码字典,编码过程就是在码字典中寻找与编码序列中下一段码相匹配的码。 • 当找到匹配时,编码按照以下思路进行: (1)如果因为接收器已存有这个码段,因此那么无需重发,只需要辨认地址以重新取回该码段;

  47. 3.8 LZ编码 (2)如果没有找到匹配码段,则根据码段序列的参考位置,向序列添加下一个码元,以构造码字典的新码字。 (3)编码开始时,使用一个空码字典,所以第一个码字是与先前码字无关的。 (4)在一种码字典结构中,递归地形成地址的游程序列和该地址上的字符段。 • 编码后的码字总是由两部分组成:字典地址和本码段需要添加的消息 。 • 由此可见, Lempel-Ziv编码方法充分利用了已编码消息的信息。

  48. 3.8 LZ编码 • 例 待编码的字符序列为: abaaaabaabaaabbbbbbbabbbbbaababaababa···,  试用Lempel-Ziv方法给出编码结果。 解 编码从建立码字典开始。 • 由于前面没有编码结果,故对第1个消息a,其字典地址为0,本码段需要添加的消息为a,编码结果为0a,码字典中的地址为1; • 同理,对第2个消息b,其字典地址亦为0,本码段需要添加的消息为b,编码结果为0b,码字典中的地址为2; • 从第3个消息起,将可以利用前面已编码信息了,这里可将第3、4两个看成一个码段,第3个消息用码字典中已有的码地址1来代替,本码段需要添加的消息为a,编码结果为1a,码字典中的地址为3;

  49. 3.8 LZ编码 • 由于第5、6个消息恰好是码地址3对应的消息,故第5、6、7个消息为一段,编码结果为3b,码字典中的地址为4; • 依此类推,该序列的编码结果、码字典的地址以及被编码的码段内容,列于下表中。 abaaaabaabaaabbbbbbbabbbbbaababaababa···, 表 本例的有关数据

  50. 3.8 LZ编码 • Lempel-Ziv方法利用了已编码信息来进行当前的编码,编码结果是等长码,编码的过程就是建立码地址和将待编码消息序列分段的过程,所有的码段内容都是不同的。 • 对于短的消息序列,这种方法很难看出具有高的编码效率,因为要把地址序号在编码中表示出来;    但随着待编码序列的增长,算法的压缩特性就会变得很明显,因为将会有越来越多的地址所代表的消息长度较长。

More Related