基于MATLAB的霍夫曼程序设计

(9页)

'基于MATLAB的霍夫曼程序设计'
本科课程设计基于MATLAB的霍夫曼编码设计院(系)名称专业名称学生姓名学号指导教师完成时 间 2016.12.31 基于MATLAB的霍夫曼编码设计霍夫曼编码是一种无损的统计编码方法,利用信息符号概率分布特性改变字长进行 编码;舴蚵嗦胧视糜诙嘣懒⑿旁,对于多元独立信源来说它是最佳码。1基本原理霍夫曼编码是一种利用信息符号概率分布特征的变字长的编码方法,即对于出现概 率大的信息符号编以短字长的码,对于出现概率小的信息符号编以长字长的码。如果码 字长度严格按照所对应符号出现概率大小逆序排列,则编码结果的平均码字长度一定小 于任何其他排列形式;舴蚵嗦朐蚴茄细癜凑招旁捶懦鱿值母怕蚀笮±垂乖炻胱, 因此这种编码方式形成的平均码字长度最短;舴蚵嗦胂低持饕治顾醵藻枋淙、概率统计、构造Huffman树、生成Huffman 树、压缩编码环节组成,如图所示霍夫曼解码系统构成。编程依据霍夫曼的编程步骤进 行,实现对数据的压缩及其压缩参数的计算;舴蚵嗦胪枷袷淙敫虐凑章矢怕释炒笮〖频剐51排列构生生造成成霍霍霍夫夫夫曼曼曼树树n码压缩图像输出2霍夫曼编码的步骤:2.1将信源符号按岀现概率从大到小排成一列,然后把最末两个符号的概率相加, 合成一个概率。2. 2把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的 概率加起来,合成一个概率。2.3重复上述做法,直到最后剩下两个概率为止。2. 4从最后一步剩下的两个概率开始逐步反向进行编码。没步只需对两个分支各赋予?个二进制码,如对概率大的赋予码0,对概率小的赋予码1。?20.26严.o0.19C.P0200 ?“八M ?0.18e.is?.it0.2(>?026?.17?47o.ir.aw J?.ISo.isri ?.mJ0?叩0.0 lLJe.iiu?Kk<020102*0.19112al 「0.180003 ]?470013*0.1S01030.10?IM4 1■?Ml01114倂对以卜信激退疗哈夫曼第码3实例分析设输入信源L1,L2, L3, L4的概率分别为:0. 5, 0. 19, 0. 19, 0. 12借源缩減年俞入 输入概率111^14O. 5O. 19O. 19O. 5 0 5?O? 31一严 o* 5O. 19 O?12原始信源信源缩减綸入输入概率码字12110. 500. 50. 5 0】20. 19110. 310^-T—0. 5 1130. 19100 ?—0. 191」1A 1 O1 n i 亠编码结果为:Ll=0, L2=ll,L3=100,L4=10,根据所给参数求得信息源嫡为:4//(X) = -^/> log2 pk =-(0.51og2 0.5 + 0.191og2 0.19+0.191og2 0.19+0.121og2 0.12) = 1.78k=\平均码字长度为:4R =》BR =0.5x1+ 0.19x2 + 0.19x3 + 0.12x3 = 1.81k=]编码效率为:= 983%冗余度为:y = 1-7; = 1-0.983 = 0.017压缩比为:r = - = — = \A\ R 1.814程序%霍夫曼编码 李晓东130524050 close all;clear all;clc;A=[0. 5, 0. 19, 0. 19, 0. 12];A=fliplr(sort (A));T二 A;[m, n]=sizo(A);B二zeros (n, n-1); for i=l:nB(i,l)=T(i);end r=B(i,l)+B(i-l, 1); T(n-l)=r;T(n)=0;T=fliplr(sort(T)); t=n-l;for%关闭所有图形窗口,清楚工作空间所有变量,清除命令行%信源消息的概率序列%按降序排列%空的编码表(矩阵)%生成编码表的第一列%最后两个元素相加j=2:n-lfor i二l:tB(i, j)=T(i);endK=find(T==r);B(n, j)=K(end); r=(B(t-l, j)+B(t, j)); T(t-l)=r;T(t)=O;T=fliplr(sort(T)); t二t—1;%生成编码表的其他各列%从第二列开始,每列的最后一个元素记录特征元素在盖烈的位置%最后两个元素相加endB;END1 二sym(' [0, 1]');EMD二EMD1;t 二3;d二 1;for j二n-2 :T : 1for i=l:t-2if i>l&B(i, j)==B(i-l, j)%输出编码表%给最后一列的元素编码elsed=l;endB(B(n, j+1), j+1)二-1;temp=B(:, j+1);x二find(temp==B(i,j)); END(i)=ENDl(x(d));endy=B (n, j+1);END(t-l) = [char(END1 (y)),' O'];END(t) = [char(END1 (y)), * T ]; t二t+1;E7D1二END;enddispf排序后的原概率序列P:'); disp(A)dispC编码结果END') disp(END);for i=l:n[a, b] =size (char (END (i)));L(i)二 b;enddispf平均码子长度') avlen=sum(L. *A);disp(avlen); Hl=log2(A);dispf信息矯')H=-A*(HD ;disp(H) d
关 键 词:
基于 MATLAB 霍夫曼 程序设计
 剑锋文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:基于MATLAB的霍夫曼程序设计
链接地址: //www.wenku365.com/p-43768097.html
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给剑锋文库发消息,QQ:1290478887 - 联系我们

本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。本站是网络服务平台方,若您的权利被侵害,侵权客服QQ:1290478887 欢迎举报。

1290478887@qq.com 2017-2027 //www.wenku365.com 网站版权所有

粤ICP备19057495号 

收起
展开