- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息论与编码--费诺编码与哈弗曼编码比较
信源编码的比较
姓名:
班级:
学号:
实验目的:
1、实现常用的信源编码方案,以加深对编码理论的理解,促进对本课程所学知识的理解和把握。?
2、课程实验主要为设计性实验,要求掌握
3、通过信源编译码,理解信源编码的主要目的,掌握信源编码的方法和手段,掌握费诺编码和霍夫曼编码方法
二、实验设备:
装有matlab的计算机
信源编码主要可分为无失真信源编码和限失真信源编码。无失真信源编码主要适用于离散信源或数字信号,如文本、表格及工程图纸等信源,它们要求进行无失真地数据压缩,要求完全能够无失真地可逆恢复。?
香农码、费诺码、哈夫曼码都考虑了信源的统计特性,使经常出现的信源符号对应较短的码字,使信源的平均码长缩短,从而实现了对信源的压缩。?
费诺码比较适合于对分组概率相等或接近的信源编码。?
哈夫曼码对信源的统计特性没有特殊要求,编码效率比较高,对编码设备的要求也比较简单,因此综合性能优于香农码和费诺码。?
(1)费诺码属于概率匹配编码,编码过程如下:?
1、将信源发出的N个消息符号按其概率的递减次序依次排列。?
2、将依次排列的信源符号依概率分成两组,使两个组的概率和近于相同,并对各组赋予一个二进制代码符号“0”和“1”(编m进制?码就分成m组)。?
3、将每一个大组的信源符号进一步再分成两组,使划分后的两个组的概率和近于相同,并又分别赋予两组一个二进制符号“0”和“1”?
4、如此重复,直至每组值只剩下一个信源符号为止?
5、信源符号所对应的码符号序列即为费诺码?
(2)霍夫曼编码过程:?
1、将信源发出的N个消息符号按其概率的递减次序依次排列。?
2、取概率最小的两个符号分别配以0和1两个码元,并将这两个符号的概率相加作为一个新概率,与未分配码元的符号重新按概率排队?3、对重排后的两个概率最小符号重复步骤2?
4、不断重复上述过程,直到最后两个符号配以0和1为止?
5、重最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。?
实验内容:
1、哈弗曼编码
对如下信源进行哈弗曼编码,并计算编码效率。
X s1 s2 s3 s4 s5 s6 s7
P 0.09 0.18 0.23 0.17 0.1 0.07 0.16
计算信源的信息熵,并对信源概率进行排序
(2)把概率最小的两个数相加合成一个概率,把这个合成概率与其他概率进行组合成新概率,再将最小的两个概率相加,直到只剩下两个概率,再反过来逐步向前编码,每一次有二个分支各赋予一个二进制码,大的赋值为1,小的赋值为0;
(3)向前返回得到各个信源符号所对应的码元序列,即相应的码字。
(4)计算码字平均码长,得出编码效率。
(5)实验程序:
1.哈弗曼编码
clear all;
p=[0.09 0.18 0.23 0.17 0.10 0.07 0.16];
l=0;
H=0;
N=length(p);
for i=1:N
H=H+(- p(i)*log2(p(i)));
end
fprintf(信源信息熵:\n);
disp(H)
for i=1:N-1
for j=i+1:N
if p(i)p(j)
m=p(j);
p(j)=p(i);
p(i)=m;
end
end
end
Q=p;
m=zeros(N-1,N);
for i=1:N-1
[Q,l]=sort(Q);
m(i,:)=[l(1:N-i+1),zeros(1,i-1)];
Q=[Q(1)+Q(2),Q(3:N),1];
end
for i=1:N-1
c(i,:)=blanks(N*N);
end
c(N-1,N)=0;
c(N-1,2*N)=1;
for i=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;
for j=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));
文档评论(0)