- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
霍夫曼编码(含源程序)讲述
多媒体技术基础实验报告 ?——霍夫曼编码学院:电子工程与光电技术学院 专业:电子信息工程姓名:学号:任课老师:康其桔实验时间:一、实验内容及要求1、使用Matlab编程实现霍夫曼编码2、通过键盘输入字符串3、在屏幕上显示编码结果二、实验原理霍夫曼编码是霍夫曼在1952年提出和描述的“从下到上”的熵编码方法。根据给定数据集中各元素所出现的频率来压缩数据的一种统计压缩编码方法。这些元素(如字母)出现的次数越多,其编码的位数就越少。其基本步骤为:(1) 将压缩的各字符的出现概率按减少(或增加)的顺序进行排列。(2) 将两个最小的概率进行组合相加得到一个新概率将这一新概率与其它概率一起继续执行1 和2 的操作直至最后概率为1.0。(3) 对每对组合中的概率较大者指定为1,较小者指定为0。(4) 画出由每个信源符号概率到1.0处的路径记下路径的1和0。(5) 对每个信源符号由从右到左写出1/0序列,对概率较高的标1,对概率较低的标0(或对概率较高的标0,对概率较低的标1),就得到了对应的Huffman码。 下面举个例子来说明霍夫曼编码的具体过程。 设需要编码的信息为:BACDEBACDEBACDEBADEBAEBABABABB,统计各个字符出现的次数分别为B(10次)、A(8次)、C(3次)、D(4次)、E(5次)。各个字符出现的概率为B(10/30)、A(8/30)、E(5/30)、D(4/30)、C(3/30)。霍夫曼编码的过程如下: B(10/30) A(8/30) E(5/30) D(4/30) C(3/30)霍夫曼编码后平均码长为。而信源熵。由此,我们可以看出,霍夫曼编码结果已经很接近理想信源熵。三、设计方案设计的流程图如下:四、各模块设计(一)读入字符串并去除空格在Matalb中使用语句inputstring=input(请输入需要编码的字符:,s),输入的字符串存入char型数组inputstring中。 去除空格的思想为:输出的inputletters数组存储的是输入字符串去除空格后的字符集的ASCII值,如果需要显示字符需要用语句:disp(char(inputletters))。这一部分代码如下:inputstring=input(请输入需要编码的字符:,s);%输入字符并存储 spacenumber=0; %存储空格数目 for i=1:length(inputstring)if abs(inputstring(i))==32 spacenumber=spacenumber+1;continueelse inputletters(i-spacenumber)=inputstring(i);endenddisp([去除空格后字符为:,char(inputletters)])(二)统计字符种类及概率统计字符的种类,需要去除输入字符中的重复字符,并存入数组letters中,其基本流程图如下:这一部分的程序如下:letters(1)=inputletters(1);for m=2:length(inputletters) repeatn=0; %定义一个数记录是否有重复for n=1:length(letters)if letters(n)==inputletters(m) repeatn=repeatn+1; endendif repeatn==0 letters(length(letters)+1)=inputletters(m);endend概率的统计即是统计letters中每个元素在inputletters出现的次数,除以总次数即可得到每个字符出现的概率。概率统计的程序如下:for p=1:length(letters) repeatn=0; %计算重复次数 for q=1:length(inputletters)if letters(p)==inputletters(q) repeatn=repeatn+1;endend letterp(p)=repeatn/length(inputletters);end对得到概率letterp进行降序排序得到huffmanprob,并使字符集与概率相对应生成字符集huffamnletters。这一过程主要是为了方便输出字符集的输出。这一部分的程序如下:[huffmanprob,sort_index] = s
原创力文档


文档评论(0)