哈夫曼编码 MATLAB实现2010-01-05
PAGE
PAGE 5实验七三明学院 《通信原理基础教程》实验(七)
题 目: 哈弗曼编码
学 年:09~10学年 学 期:第一学期
专 业: 电信 班 级: 07
学 号:20070662135 姓 名:林烟泉指导教师: 邱思杰
时 间: 2010年01月05日
三 明 学 院 实 验 报 告 物理与机电工程 系 电子信息工程 专业 07 级 通信原理基础教程 科目 姓名 林烟泉 座号 35号 同组人 指导老师 邱思杰 2010 年 01 月 05 日
实验七:哈弗曼编码 日期:01-05实验目的掌握Huffman编码的方法;了解Huffman编码效率及冗余度的计算;了解用计算机实现Huffman编码的方法;实验原理先统计数据中各字符出现的概率,再按字符出现频率高低的顺序分别赋以由短到长的代码,从而保证文件整体的大部分字符是由较短的编码所构成。①将信源符号按概率递减顺序排列;②将两个最小的概率加起来作为新符号的概率;③重复步骤①和②,直到概率和等于1;④完成上述步骤后沿路径返回进行编码。寻找从每一信源符号到概率为1处的路径,每层有两个分支,分别大的概率赋予0和小的概率为1,从而得到每个符号的编码。三 明 学 院 实 验 报 告 物理与机电工程 系 电子信息工程 专业 07 级 通信原理基础教程 科目 姓名 林烟泉 座号 35号 同组人 指导老师 邱思杰 2010 年 01 月 05 日
程序如下:%运行主程序close allclear allp=[0.2,0.19,0.18,0.17,0.15,0.10,0.01];h=entropy(p);%返回该概密矢量的比特熵h[code,l]=huffman(p);%返回Huffman矩阵、平均码字长度lhcodel
运行结果:h = 熵
2.6087
code =
00 11 000 001 010 0110 1110
l = 平均码长 2.7200其中要添加两个子函数程序entropy.m和huffman.m三 明 学 院 实 验 报 告 物理与机电工程 系 电子信息工程 专业 07 级 通信原理基础教程 科目 姓名 林烟泉 座号 35号 同组人 指导老师 邱思杰 2010 年 01 月 05 日%子函数2 huffman.mfunction[h,l]=huffman(p);% HUFFMAN 哈夫曼码生成器。% [h,l]=huffman(p),哈夫曼码生成器% 返回哈夫曼码矩阵h和一个概率向量为p的信源的码字长度。if length(find(p<0))~=0, error('Not a prob.vector,negative component(s)')endif abs(sum(p)-1)>10e-10, error('Not a prob.vector,components do not add up to 1')endn=length(p);q=p;m=zeros(n-1,n);for i=1:n-1 [q,l]=sort(q); m(i,:)=[l(1:n-i+1),zeros(1,i-1)]; q=[q(1)+q(2),q(3:n),1];endfor i=1:n-1 c(i,:)=blanks(n*n);endc(n-1,n)='0';c(n-1,2*n)='1';for i=2:n-1 c(n-i,1:n-1)=c(n-i+1,n*(fi