二进制哈夫曼编码1.docx

上传人:b****5 文档编号:5699492 上传时间:2022-12-31 格式:DOCX 页数:9 大小:147.90KB
下载 相关 举报
二进制哈夫曼编码1.docx_第1页
第1页 / 共9页
二进制哈夫曼编码1.docx_第2页
第2页 / 共9页
二进制哈夫曼编码1.docx_第3页
第3页 / 共9页
二进制哈夫曼编码1.docx_第4页
第4页 / 共9页
二进制哈夫曼编码1.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

二进制哈夫曼编码1.docx

《二进制哈夫曼编码1.docx》由会员分享,可在线阅读,更多相关《二进制哈夫曼编码1.docx(9页珍藏版)》请在冰豆网上搜索。

二进制哈夫曼编码1.docx

二进制哈夫曼编码1

课程设计任务书

2011—2012学年第一学期

专业:

通信工程学号:

姓名:

课程设计名称:

信息论与编码课程设计

设计题目:

二进制哈夫曼编码的分析与实现

完成期限:

自年月日至年月日共周

一.设计目的

1、深刻理解信源编码的基本思想与目的;

2、理解哈夫曼编码方法的基本过程与特点;

3、提高综合运用所学理论知识独立分析和解决问题的能力;

4、使用MATLAB或其他语言进行编程。

二.设计内容

假设已知一个信源的各符号概率,编写适当函数,对其进行哈夫曼编码,得出二进制码字,平均码长和编码效率,总结此编码方法的特点和应用。

三.设计要求

1、编写的函数要有通用性;

2、信源可以自由选择,符号信源与图像信源均可。

四.设计条件

计算机、MATLAB或其他语言环境

五.参考资料

[1]曹雪虹,张宗橙.信息论与编码.北京:

清华大学出版社,2007.

[2]王慧琴.数字图像处理.北京:

北京邮电大学出版社,2007.

 

指导教师(签字):

教研室主任(签字):

批准日期:

年月日

摘要

霍夫曼编码是可变字长编码(VLC)的一种。

Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。

它是根据可变长最佳编码定理,应用哈夫曼算法而产生的一种编码方法。

在非均匀符号概率分布的情况下,变长编码总的编码效率要高于等字长编码。

因为具体规定了编码的方法,能使无失真编码的效率非常接近与1,所以在压缩信源信息率的实用设备中,哈夫曼编码还是比较常用的。

本课题利用哈夫曼编码的方法实现了对信源符号的熵、平均码长、传输速率、编码效率等的求解。

关键词:

Huffman;可变长编码;信源编码

 

目录

1.课题描述1

2设计原理1

3设计过程2

3.1课题介绍2

3.1.1Huffman编码特点2

3.1.2哈夫曼编码方法3

3.2设计内容3

3.3设计步骤4

4哈夫曼编码的MATLAB实现5

总结8

参考文献9

 

1.课题描述

huffman编码是一种二进制编码的算法,目的是缩小原来的数据,简单的说就是将出现概率较高的符号分配较少的码字,而出现概率大的符号分配较长的码字,这样起到压缩数据的作用。

哈夫曼编码是可变字长编码(VLC)的一种。

Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。

本课题是利用哈夫曼编码方式来实现对信源符号码字、平均码长及编码效率的求解。

开发工具:

MATLAB。

2设计原理

设计原理如下:

设数字图像像素灰度级集合为{d1,d2,…,dm},其对应的概率分别为p(d1),p(d2),…,p(dm)。

按信息论中信源信息熵的定义,图像的熵定义为:

(2.1)

图像的熵表示像素各个灰度级位数的统计平均值,给出了对此输入灰度级集合进行编码时所需的平均位数的下限。

设βi为数字图像中灰度级di所对应的码字长度(二进制代码的位数),其相应出现的概率为P(di),则该数字图像所赋予的平均码字长度为:

(2.2)

(2.3)

根据信息论中信源编码理论,可以证明在R≧H条件下,总可以设计出某种无失真编码方法。

当然如果编码结果使R远大于H,表明这种编码方法效率很低,占用比特数太多。

最好编码结果是使R等于或接近于H。

这种状态的编码方法,称为最佳编码。

压缩比是指编码前后平均码长之比,如果用n表示编码前每个符号的平均码长,通常为用自然二进制码时的位数,则压缩比可表示为:

(2.4)

一般来讲,压缩比大,则说明被压缩掉的数据量多。

一个编码系统要研究的问题是设法减小编码平均长度R,使编码效率

尽量趋于1,而冗余度趋于0。

3设计过程

3.1课题介绍

3.1.1Huffman编码特点

凡是能载荷一定的信息量,且码字的平均长度最短,可分离的变长码的码字集合称为最佳变长码。

为此必须将概率大的信息符号编以短的码字,概率小的符号编以长的码字,使得平均码字长度最短。

哈夫曼(Huffman)编码是最佳变长编码方法的一种,它是根据可变长最佳编码定理,应用哈夫曼算法而产生的一种编码方法。

进行哈夫曼编码时,为得到码方差最小的码,应使合并的信源符号位于缩减信源序列尽可能高的位置上,以减少再次合作的次数,充分利用短码。

哈夫曼码是用概率匹配方法进行信源编码。

它有两个明显的特点:

一是哈夫曼码的编码方法保证了概率大的符号对应于短码,概率小的符号对应于长码,充分利用了短码;二是缩减信源的最后两个码字总是最后一位不同,从而保证了哈夫曼编码是即时码。

哈夫曼编码方法得到的码并非是唯一的,造成并非唯一的原因是:

首先,每次对信源缩减时,赋予信源最后两个概率最小的符号,用0和1可以任意的,所以可以得到不同的哈夫曼码,但不会影响码字的长度。

其次:

对信源进行缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减信源中进行概率排序,其位置放置次序是可以任意的,故会得到不同的哈夫曼码。

此时将影响码字的长度,一般将合并的概率放在上面,这样可以获得较小的码方差。

对于多进制哈夫曼编码,为了提高编码效率,就要使长码的符号数量尽量少、概率尽量小,所以信源符号数最好满足

其中r为进制数,n为缩减的次数。

例如,要进行三进制编码,那么最好信源有7个符号,第1次合并后减少2个成为5个,第2次合并后又减少2个成为3个,这样给每一步赋予三进制符号就没有浪费了。

但如果信源只有6个符号时,为了尽量减少最长码的数量,则应该在第1次合并时添置概率为零的虚拟符号1个,事实上只合并2个概率最小的符号,后面每次合并三个,就可以使得最长码的符号数量最少,也就是长码的概率最小,从而得到最高的编码效率。

哈夫曼变长码的效率是相当高的,它可以单个信源符号编码或用L较小的信源序列编码,对编码器的设计来说也将简单的多。

但是应当注意,要达到很高的效率仍然需要按长序列来计算,这样才能使平均码字长度降低。

3.1.2哈夫曼编码方法

(1)将信源消息符号按其出现的概率大小依次排列为P1≧P2≧…≧Pn

(2)将两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。

(3)对重排后的两个概率最小符号重复步骤

(2)的过程。

(4)不断继续上述过程,直到最后两个符号配以0和1为止。

(5)从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。

3.2设计内容

一个有8个符号的信源X,各个符号出现的概率为:

X=

试进行霍夫曼编码,并计算平均码长、编码效率、压缩比、冗余度等。

3.3设计步骤

最终的各符号的霍夫曼编码如下:

u1:

1u2:

001u3:

011u4:

0000

u5:

0100u6:

0101u7:

00010u8:

00011

霍夫曼编码时,对同一源图像序列,霍夫曼编码并不是唯一的。

如果节

标1和标0的对调,则相应的霍夫曼编码变成:

u1:

0u2:

110u3:

100u4:

1111

u5:

1011u6:

1010u7:

11101u8:

11100

对照两组霍夫曼编码不难看出,尽管两者的组成不同,但两者的平均码长是一致的。

再根据以上数据,可分别计算其信源的熵、平均码长、编码效率及冗余度,即

熵:

=-0.4lb0.4-0.18lb0.18-0.10lb0.1-0.07lb0.07-0.06lb0.06

-0.05lb0.05-0.04lb0.04

=2.55

平均码长:

=1×0.04+3×0.18+3×0.10+4×0.10+4×0.07+4×0.06+5×0.05

+5×0.04

=2.61

编码效率:

压缩之前8个符号需要3个比特量化,经压缩之后的平均码字长度为2.61,因此压缩比为:

冗余度为:

对上述信源X的霍夫曼编码,其编码效率已达97.7%,仅有2.3%的冗余。

4哈夫曼编码的MATLAB实现

在matlab中调用了用户自定义文件humanff.m的文件,其源代码为:

function[h,l]=huffman(p)

iflength(find(p<0))~=0;

error('Inputisnotaprob.vector,thereisnegatibecomponent');

end

ifabs(sum(p)-1)>10e-10

error('Inputisnotaprob.vector,thesumofthecomponentisnotequalto1.');

end

n=length(p);%得到输入的元素个数

q=p;

m=zeros(n-1,n);

fori=1:

n-1,

[q,e]=sort(q);

m(i,:

)=[e(1:

n-i+1),zeros(1,i-1)];

q=[q

(1)+q

(2)+q(3:

n),e];

end

fori=1:

n-1,

c(i,:

)=blanks(n*n);

end

%以下计算各个元素码字

c(n-1,n)='0';

c(n-2,2*n)='1';

fori=2:

n-1;

c(n-i,1:

n-1)=c(n-i+1,n*(find(m(n-i+1,:

)==1))-(n-2):

n*(find(m(n-i+1,:

)==1)));

c(n-i,n)='0';

c(n-i,n+1:

2*n-1)=c(n-i,1:

n-1);

c(n-i,2*n)='1';

forj=1:

i-1

c(n-i,(j+1)*n+1:

(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:

)==j+1)-1)+...

1:

n*find(m(n-i+1,:

)==j+1));

end

在计算信源平均信息量的时候调用了message函数,在计算信源平均信息量的时候调用了message函数,message函数的源代码为:

functionr=message(x,n)%参数x是概率分布,n是离散信源的分布值数目

r=0;

fori=1:

n

r=r-x(i)*log(x(i))/log

(2);

end

disp('此离散信源的平均信息量为');

r

通常哈夫曼编码学的效率是小于1的,但当信源为某些特殊情况时,可以是效率达到1,当然是不可能超过1的。

如:

分别调用huffman和message函数如下:

clearall;

p=[1/3,1/6,1/15,1/15,11/30]%定义概率序列

p=

0.33330.16670.06670.06670.3667

截图为:

总结

通过该课程设计,我掌握了编译程序的原理以及步骤,还有编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,构造工具及其相关的技术。

课本上的知识是机械的,抽象的。

在本次课程设计,我有很大的收获。

这首先体现在理论知识的完善上:

采用等长编码的优点是编码过程和解码过程简单,可是这种方法没有考虑各个符号出现的概率,实际上就是将它们当做等概率事件处理的,所以它的编码效率比较低,而哈夫曼编码是根据可变长最佳编码定理,应用哈夫曼算法而产生的一种编码方法,它的平均码长最小,消息传输速率最大,编码效率最高;同时实践能力和动手能力有了质的飞跃!

设计中,我自感知识的缺陷,不断的上网查阅资料,翻阅各类相关书籍,自己动手,自己设计,让我的思维逻辑更加清晰。

在上机操作中,靠这次设计我熟练掌握了计算机编程,将理论变为实际开了一个好头。

在我设计好之后,老师对我进行指导,使得我的课程设计进一步完善,更加完美。

在这次课程设计过程中,我发现了自己综合应用能力的欠缺。

以后,我会更加重视用软件编程,应用计算机来对处理信号。

总之,基本达到了预期的课程设计目的。

参考文献

[1]李朝辉,张弘.数字图像处理及应用.北京:

机械工业出版社,2004.

[2]贾永红.数字图像处理.武汉:

武汉大学出版社,2003.

[3]周炯磐,丁晓明.信源编码原理.北京:

人民邮电出版社,1996.

[4]吴柏修,祝宗泰,钱霖君.信息论与编码.南京:

东南大学出版社,1991.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1