文档介绍:实验一离散信源及其信息测度
一、实验目的
1、理解信源编码的意义;
2、熟悉 MATLAB程序设计;
3、掌握哈夫曼编码的方法及计算机实现;
二、实验原理
通信的根本问题是如何将信源输出的信息在接收端的信宿精确或近似的复制出来。为了有效地复制信号,就通过对信源进行编码,使通信系统与信源的统计特性相匹配。
若接收端要求无失真地精确地复制信源输出的信息,这样的信源编码即为无失真编码。即使对于一个小的时间段内,连续信源输出的信息量也可以是无限大的,所以对其是无法实现无失真编码的;而离散信源输出的信息量却可以看成是有限的,所以只有离散信源才可能实现无失真编码。
凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合都可以称为最佳码。为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。
变字长编码的最佳编码定理:在变字长码中,对于概率大的信息符号编以短字长的码;对于概率小的信息符号编以长字长的码。如果码字长度严格按照符号概率的大小顺序排列,则平均码字长度一定小于俺任何顺序排列方式得到的码字长度。
哈夫曼编码就是利用了这个定理,讲等长分组的信源符号,根据其概率分布采用不等长编码。概率大的分组,使用短的码字编码;概率小的分组,使用长的码字编码。哈夫曼编码把信源按概率大小顺序排列,并设法按逆次序分配码字的长度。在分配码字的长度时,首先将出现概率最小的两个符号相加,合成一个概率;第二步把这个合成的概率看成是一个新组合符号的概率,重复上述做法,直到最后只剩下两个符号的概率为止。完成以上概率相加顺序排列后,再反过来逐步向前进行编码。每一步有两个分支,各赋予一个二进制码,可以对概率大的编为0码,概率小的编为1码。反之亦然。
哈夫曼编码的具体步骤归纳如下:
统计n个信源消息符号,得到n个不同概率的信息符号。
将这n个信源信息符号按其概率大小依次排序:
p(x1) ≥ p(x2)≥…≥ p(xn)
取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。
将剩余的信息符号,按概率大小重新进行排序。
重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。
如此反复重复n-2次,最后只剩下两个概率。
从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。编码结束。
哈夫曼编码产生最佳整数前缀码,即没有一个码字是另一个码字的前缀,因此哈夫曼编码是唯一码。
编码之后,哈夫曼编码的平均码长为:
哈夫曼编码的效率为:
三、实验内容
实验一、对信源进行哈夫曼编码,并计算编码效率。
1、按照实验一中的方法生成一10维离散无记忆信源X的概率分布。
2、对信源概率进行排序,(排序可用sort命令)。
3、取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列,(分配的0,1可另建一个向量保存)。
4、将剩余的信息符号,按概率大小重新进行排序。
5、重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序(利用for循环)。
6、如此反复重复n-2次,最后只剩下两个概率。