文档介绍:信息与编码
实验报告
姓名:
学号:
专业班级:
学院:
联系方式:
实验二:Huffman编码软件实现
一、实验目的
进一步熟悉Huffman编码过程;
掌握Matlab程序的设计和调试技术。
二、实验要求
输入:信源符号个数r、信源的概率分布P;
输出:每个信源符号对应的Huffman编码的码字。
三、实验内容
从键盘输入组成信源S的字符个数N;
从键盘输入信源S和组成信源的字符所对应的概率数组P;
对信源进行二进制Huffman编码。
四、实验报告
简要总结Huffman编码的原理与特点
  霍夫曼(Huffman)编码是1952年为文本文件而建立,是一种统计编码。属于无损压缩编码。霍夫曼编码的码长是变化的,对于出现频率高的信息,编码的长度较短;而对于出现频率低的信息,编码长度较长。这样,处理全部信息的总码长一定小于实际信息的符号长度。霍夫曼编码,有如下特征:
它是一种分组码:各个信源符号都被映射成一组固定次序的码符号。
它是一种唯一可解的码:任何码符号序列只能以一种方式译码。
它是一种即时码:由于代表信源符号的节点都是终端节点,因此其编码不可能是其他终端节点对应的编码的前缀,即霍夫曼编码所得的码字为即时码。所以,一串码符号中的每个码字都可不考虑其后的码符号直接解码出来。
写出Huffman编码的基本步骤,画出实现Huffman编码的程序流程图。
设信源s={s1,s2,…sq},其对应的概率分布为p(si)={p1,p2,…,pq},霍夫曼编码的编码步骤如下:
将q个信源符号按概率递减的方式排列。
用0、1码符号分别表示概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个新的符号,其概率为两符号概率之和,从而得到只包含q-1个符号的新信源,称为s信源的缩减信源s1.
将缩减信源s1中的符号仍按概率大小以递减次序排列,再将其最后两个概率最小的符号合并成一个符号,并分别用0、1码符号表示,这样又形成了由q-2个符号构成的缩减信源s2.
依次继续下去,直到缩减信源只剩下两个符号为止,将最后两个字符分别用0、1码符号表示,从右向左读取相应的码字,即为对应信源符号的码字。
霍夫曼编码程序流程图:
开始
输入信源符号对应的概率p(si)={p1,p2,…,pq}
,其概率为两符号概率之和,s信源的缩减信源s1.
将缩减信源将剩下的最后两个字符分别用0、1码符号表示
把以上概率按递减的方式排列
用0、
将缩减信源s1中的符号仍按概率大小以递减次序排列
进行q-2次循环
从右向左读取相应的码字,输出码字
结束
给出Huffman编码的源程序,并给出实验过程中的测试结果
例:使用matlab语言对以下信源进行Huffman编码,并使用该程序求每个信源符号对应的Huffman编码的码字。
程序如下所示:
%哈夫曼编码的MATLAB实现(基于0、1编码):
clc;
clear;
A=[,,,,,,,];%信源消息的概率序列
A=fliplr(sort(A));%按降序排列
T=A;
[m,n]=size(A)