- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Matlab函数实现哈夫曼编码算法讲义
编写Matlab函数实现哈夫曼编码的算法
在当今信息化时代,数字信号充斥着各个角落。在数字信号的处理和传输中,信源编码是首先遇到的问题,一个信源编码的好坏优劣直接影响到了后面的处理和传输。如何无失真地编码,如何使编码的效率最高,成为了大家研究的对象。
哈夫曼编码就是其中的一种,哈夫曼编码是一种变长的编码方案
设计原理
哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。uffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。
假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为:
(1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
(2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
(3)从森林中删除选取的两棵树,并将新树加入森林;
(4)重复(2)、(3)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
图1 哈夫曼树构建过程
哈夫曼树构造成功后,就可以根据哈夫曼树对信源符号进行哈夫曼编码。具体过程为先找到要编码符号在哈夫曼树中的位置,然后求叶子节点到根节点的路径,其中节点的左孩子路径标识为0,右孩子路径标识为1
例如对上例图中“1”的编码为“100”,“3”的编码为“101”,“5”的编码为“11”。
对于一个信源消息的熵可以以下公式(1)求得:
(1)
其中H(x)表示信源的总信息量,既为信源的熵。p()为信源中一特定符号出现的概率。
详细设计步骤
首先对设计题目进行系统理论分析。由给定的8种可能符号的信源,各种符号发生的概率分别为:0.30、0.16、0.14、0.12、0.10、0.09、0.06、0.04。可以根据哈夫曼树的构造原理得出如下哈夫曼树型结构(图2):
图2 哈夫曼树
其中每个结点中的上面的整数为结点有编号,下面的小数为该结点的权值,在这里指的各结点的概率。
由以是的哈夫曼树图,根据哈夫曼的编码规则可求该8个输出符号的顺序为:0.30,0.16,0.14,0.12,0.10,0.09,0.06,0.04对应编码输出应该为:1 0 1 1 0 1 1 1 0 1 0 0 0 0 0 0 1 0 1 1 0 0 1 1 1,编码长度为25。
由熵的计算公式可知:H(X)=-(0.30.3+0.160.16+0.140.14+0.0.12+0.10.1+0.090.09+0.060.06+0.040.04)=2.7824
哈夫曼树在matlab中的构造,在matlab中用tree(MN,s1,s2,s3……)这个系统函数来构造哈夫曼二叉树。声明一个tree(5,x)结构的树型结点,一个结点包括有5个变量存储单元。其中tree(1,x)记录该结点的编号;tree(2,x)记录该结点的概率值;tree(3,x)记录该结点的父结点编号;tree(4,x)记录该结点是左结点还是右结点(其中左结点为“0”,右结点为“1”);tree(5,x)记录该结点是否为根结点标志(该结点为根结点记为“1”,否则决为“0”)。由哈夫曼树构造原则,先选出所有结点中概率值最小的两个结点,把这两个结点组合在一起形成一个新的二叉树。新二叉树的根结点为两个子结点的概率这和,同时根据实际情况标记结点的相关属性(如左右子结点,是否为根结点),之后再将新的二叉树跟剩下的结点集合在一起,再选出概率值最小的两个结点,并重复以上的过程,直到把所有的结点都加到二叉树中,开成一根哈夫曼二叉树。在matlab编程实现中先编写一个子函数用于找出所有结点中概率值最小的两个结点,子函数如下:
function [l,r]=findminval(tree)
s=find(tree(5,:)==1);
if size(s,2)2
error(Error input!);
end
firval=realmax;secval=realmax;
for i=s;
if firvaltree(2,i)
if secvalfirval
second=first;secval=firval;
end
first=i;firval=tree(2,i);
elseif
您可能关注的文档
- mapgis培训教材讲义.ppt
- MAANCITY2015年营销推广方案讲义.ppt
- MapsMaroon5音乐ppt讲义.ppt
- Marketing Concept营销理念讲义.ppt
- M32全面培训第九讲一一录音、重放与DAW控制讲义.ppt
- Marketplace帮助文档表讲义.docx
- Markov过程读书报告讲义.doc
- Marketing王老吉营销战略讲义.ppt
- Markov链预测法讲义.doc
- MAST语言建模-副本讲义.ppt
- 2025年中山市沙溪镇人民政府所属事业单位招聘11人笔试备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库及参考答案详解一套.docx
- 2025年中山市横栏镇人民政府所属事业单位第二期招聘笔试高频难、易错点备考题库含答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库及完整答案详解1套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库参考答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试高频难、易错点备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库附答案详解.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及答案详解一套.docx
- 2025年中山市阜沙镇人民政府所属事业单位招聘笔试备考题库及完整答案详解1套.docx
文档评论(0)