信息论与编码课程大作业二进制哈夫曼编码.doc

信息论与编码课程大作业二进制哈夫曼编码.doc

ID:56517787

大小:49.00 KB

页数:7页

时间:2020-06-26

信息论与编码课程大作业二进制哈夫曼编码.doc_第1页
信息论与编码课程大作业二进制哈夫曼编码.doc_第2页
信息论与编码课程大作业二进制哈夫曼编码.doc_第3页
信息论与编码课程大作业二进制哈夫曼编码.doc_第4页
信息论与编码课程大作业二进制哈夫曼编码.doc_第5页
资源描述:

《信息论与编码课程大作业二进制哈夫曼编码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、信息论与编码课程大作业题目:二进制哈夫曼编码学生姓名:学号:2010020200专业班级:2010级电子信息班2013年5月18日二进制哈夫曼编码1、二进制哈夫曼编码的原理及步骤1、1信源编码的计算设有N个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n、信源的概率分布P={p(si)},i=1,…..,n。且各符号xi的以li个码元编码,在变长字编码时每个符号的平均码长为;信源熵为:;唯一可译码的充要条件:;其中m为码符号个数,n为信源符号个数,Ki为各码字长度。构造哈夫曼数示例如下图所示。1.00000000

2、0.400.600.300.300.150.150.090.600.030.030.040.051、2二元霍夫曼编码规则(1)将信源符号依出现概率递减顺序排序。(2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用s1表示。(3)将缩减信源s1的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。(4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两

3、个符号的概率之和必为1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。1、3二元哈夫曼编码流程图如下图所示。开始等待数据输入判断输入的概率是否小于零是结束显示结果计算码长生成一个n-1行n列的数组判断概率和是否大于1是按照哈弗曼的编码规则进行编码计算信源熵计算编码效率2、二元哈夫曼编码程序p=input('pleaseinputanumber:')%提示输入界面n=length(p);fori=1:nifp(i)<0fprintf('Theprobabilitiesinhuffmancannotlessth

4、an0!');p=input('pleaseinputanumber:')%如果输入的概率数组中有小于0的值,endendifabs(sum(p)-1)>0fprintf('Thesumoftheprobabilitiesinhuffmancanmorethan1!');p=input('pleaseinputanumber:')%如果输入的概率数组总和大于1,则重endq=p;a=zeros(n-1,n);%生成一个n-1行n列的数组fori=1:n-1[q,l]=sort(q);%对概率数组q进行从小至大的排序,并且用l数组返

5、回一个q排序前的顺序编号a(i,:)=[l(1:n-i+1),zeros(1,i-1)];%由数组l构建一个矩阵,该矩阵表明概率合并q=[q(1)+q(2),q(3:n),1];%将排序后的概率数组q的前两项,即概率最小的两endfori=1:n-1c(i,1:n*n)=blanks(n*n);endc(n-1,n)='0';%由于a矩阵的第n-1行的前两个元素为进行huffman编码加和运算时所得的最c(n-1,2*n)='1';fori=2:n-1c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)==1))-(

6、n-2):n*(find(a(n-i+1,:)==1)));c(n-i,n)='0';%根据之前的规则,在分支的第一个元素最后补0c(n-i,n+1:2*n-1)=c(n-i,1:n-1);c(n-i,2*n)='1';%根据之前的规则,在分支的第一个元素最后补1forj=1:i-1c(n-i,(j+1)*n+1:(j+2)*n)=c(n-i+1,n*(find(a(n-i+1,:)==j+1)-1)+1:n*find(a(n-i+1,:)==j+1));endend%完成huffman码字的分配fori=1:nh(i,1:n)=c(1,n*

7、(find(a(1,:)==i)-1)+1:find(a(1,:)==i)*n);ll(i)=length(find(abs(h(i,:))~=32));%计算每一个huffman编码的长度enddisp('二元霍夫曼编码平均码长')l=sum(p.*ll)%计算平均码长%fprintf('huffmancode:');hdisp('信源熵')hh=sum(p.*(-log2(p)))%计算信源熵%fprintf('thehuffmaneffciency:');disp('编码效率')t=hh/l%计算编码效率3、运行结果及分

8、析当输入数据[0.01,0.02,0.03,0.04,0.10,0.15,0.20,0.25,0.20]时3、1运行结果:pleaseinputanumber:[0

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。