ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:132.10KB ,
资源ID:3883203      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3883203.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息论实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息论实验报告.docx

1、信息论实验报告实 验 报 告实验名称信息论信源信道编码课程名称信息论与编码姓名成绩班级学号日期2011/12/20地点综合实验楼备注:1.实验目的本次信息论与编码的实验分 信道编码 及 信源编码 两个部分,其中信源编码包括Huffman码和Fano码,信道编码为Hamming码(74 Hamming码)。通过对三种编码的实现,了解Huffman码、Fano码和Hamming码编码对信息论的意义,了解相应的编码与译码原理,加深对编码的理解。本次实验三个编码皆用MATLAB实现。2.实验环境(软件、硬件及条件)Windows2000/XP;MATLAB 6.x or above;3.实验方法Huf

2、fman码:哈夫曼编码是可变字长编码的一种。该方法完全依据字符出现概率来构造异字头的平均长 度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。哈夫曼编码的一般步骤如下:(1)首先统计信源中各符号出现的概率,按符号出现的概率从大到小排序;(2)把最小的两个概率相加合并成新的概率,与剩余的概率组成新的概率集合;(3)对新的概率集合重新排序,再次把其中最小的两个概率相加,组成新的概率集合,如此重复进行,直到最后两个概率的和为1;(4)分配码字。码字分配从最后一步开始反向进行;平均码长=sum(p.*ll); 其中p为各码字出现概率,ll为编码后的码字长度;信源熵hh=sum(p.*(-

3、log2(p);;编码效率 t=hh/l。Fano码:费诺编码属于概率匹配编码,但它不是最佳的编码方法。不过有时也可以得到紧致码的性能。信源符号以概率递减的次序排列进来,将排列好的信源符号划分为两大组,使第组的概率和近于相同,并各赋于一个二元码符号”0”和”1”.然后,将每一大组的信源符号再分成两组,使同一组的两个小组的概率和近于相同,并又分别赋予一个二元码符号.依次下去,直至每一个小组只剩下一个信源符号为止.这样,信源符号所对应的码符号序列则为编得的码字。费诺码编码的一般步骤如下:(1)将信源消息符号按其出现的概率大小依次排列排列:。(2)将依次排列的信源符号按概率值分为两大组,使两个组的概

4、率之和近似相同,并且对各组赋予一个二进制码元“0”和“1”。(3)将每一大组的信源符号再分成两组,使划分后的两个组的概率之和近似相同,并且对各组赋予一个二进制符号“0”和“1”。以上两部分在程序中。(4)如此重复,直到每个组只剩下一个信源符号为止。在程序中本部分采用递归思想。信源符号所对应的码字即为费诺编码。Hamming码:汉明码是用于数据传送,能检测所有一位和双位差错并纠正所有一位差错的二进制代码。与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位

5、置。汉明码的编码一般步骤如下:(1)码长n=7,信息元k=4,检验元r=n-k=3。长为3的二元序列共有23个。我们将其中7个非全零序列按列排成如下矩阵H矩阵称为:一致监督矩阵。(2)设码字C=(c6 c5 c4 c3 c2 c1 c0),有: HCT=0T其中:0(0 0 0),0T是0矢量的转置,即满足: c3+c2+c1+c0=0 c5+c4+c1+c0=0 c6+c4+c2+c0=0得出汉明码。(3)汉明码译码,由 H=H+H= 求出伴随式S (4)给出生成矩阵满足:mG=c G=0(5)其译码纠错功能原理如下图所示,按照错误图样找到错误码字:图14.实验分析Huffman码:运行结果

6、: please input a number:0.2 0.5 0.3p = 0.2000 0.5000 0.3000q = 0.2000 0.3000 0.5000l = 1 3 2a = 1 3 2 0 0 0q = 0.5000 0.5000 1.0000l = 1 2 3a = 1 3 2 1 2 0c = 0 0 1 c = 00 0 1 c = 00 0 0 1 c = 00 01 0 1 c = 00 01 1 0 1 h = 00ll = 2h = 00 1ll = 2 1h = 00 1 01ll = 2 1 2 huffman code:h = 00 1 01 the hu

7、ffman effciency:t = 0.9903 l = 1.5000 %平均码长 hh = 1.4855 %信源熵平均码长十分接近信源熵,编码效率t =hh/l=0.9903。Fano码:运行结果: input the A:0.15 0.1 0.2 0.05 0.2 0.2 0.1encoding = 0.2000 0 0 -1.0000 -1.0000 -1.0000 0.2000 0 1.0000 -1.0000 -1.0000 -1.0000 0.2000 1.0000 0 0 -1.0000 -1.0000 0.1500 1.0000 0 1.0000 -1.0000 -1.00

8、00 0.1000 1.0000 1.0000 0 -1.0000 -1.0000 0.1000 1.0000 1.0000 1.0000 0 -1.0000 0.0500 1.0000 1.0000 1.0000 1.0000 -1.0000%编码过程A = 0.2000 0.2000 0.2000 0.1500 0.1000 0.1000 0.0500%原码排序,与下面的编码相对应 CODE = 0, 1, 100, 101, 110, 1110, 1111 avlen = 2.3500 %平均码长Hamming码:运行结果: y=encoding(1 1 0 1)y = 1 1 0 1

9、0 1 0%(7,4)汉明码 x=decoding(y)x = 1 1 0 1%解码 x2=decoding(1 0 0 1 0 1 0)x2 = 1 1 0 1%模拟传输中第二个码字发生了错误,进行译码纠错5.实验结论本次对信源编码与信道编码在MATLAB上的实现,通过对网上资料的参考与自己的思考,给出了HUFFMAN码、FANO码、HAMMING码的matlab程序,更深入地了解了三种编码的编码原理及特征,收获颇丰。附(相关代码):1.Huffman码:p=input(please input a number:) n=length(p);for i=1:n if p(i)0 fprint

10、f(n The sum of the probabilities in huffman can more than 1!n); p=input(please input a number:) %如果输入的概率数组总和大于1,则重新输入概率数组end q=p;a=zeros(n-1,n); for i=1:n-1 q,l=sort(q) %对概率数组q进行从小至大的排序,并且用l数组返回一个数组,该数组表示概率数组q排序前的顺序编号 a(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,1:n*n)=bl

11、anks(n*n); %生成一个n-1行n列,并且每个元素的的长度为n的空白数组,c矩阵用于进行huffman编码,并且在编码中与a矩阵有一定的对应关系end c(n-1,n)=0; c(n-1,2*n)=1; %后两个概率,因此其值为0或1,在编码时设第n-1行的第一个空白字符为0,第二个空白字符1。for i=2:n-1 c(n-i,1:n-1)=c(n-i+1,n*(find(a(n-i+1,:)=1)-(n-2):n*(find(a(n-i+1,:)=1) %矩阵c的第n-i的第一个元素的n-1的字符赋值为对应于a矩阵中第n-i+1行中值为1的位置在c矩阵中的编码值 c(n-i,n)=

12、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(a(n-i+1,:)=j+1)-1)+1:n*find(a(n-i+1,:)=j+1) %矩阵c中第n-i行第j+1列的值等于对应于a矩阵中第n-i+1行中值为j+1的前面一个元素的位置在c矩阵中的编码值 end end for i=1:n h(i,1:n)=c(1,n*(find(a(1,:)=i)-1)+1:find(a(1,:)=i)*n) %用h表示最后的huffman编码,矩阵h的第i行的元

13、素对应于矩阵c的第一行的第i个元素 ll(i)=length(find(abs(h(i,:)=32) %计算每一个huffman编码的长度end l=sum(p.*ll); %计算平均码长fprintf(n huffman code:n);hhh=sum(p.*(-log2(p); %计算信源熵 fprintf(n the huffman effciency:n); t=hh/l %计算编码效率2.Fano码:A=input(input the A:);A=fliplr(sort(A);%降序排列m,n=size(A);for i=1:n encoding(i,1)=A(i);%生成B的第1列

14、end%生成B第2列的元素a=sum(encoding(:,1)/2;for k=1:n-1 if abs(sum(encoding(1:k,1)-a)=abs(sum(encoding(1:k+1,1)-a) break; endendfor i=1:n%生成B第2列的元素 if i=k encoding(i,2)=0; else encoding(i,2)=1; endend%生成第一次编码的结果CODE=encoding(:,2);CODE=sym(CODE);%生成第3列及以后几列的各元素j=3;while (j=0) p=1; while(p=n) x=encoding(p,j-1)

15、; for q=p:n if x=-1 break; else if encoding(q,j-1)=x y=1; continue; else y=0; break; end end end if y=1 q=q+1; end if q=p|q-p=1 encoding(p,j)=-1; else if q-p=2 encoding(p,j)=0; CODE(p)=char(CODE(p),0; encoding(q-1,j)=1; CODE(q-1)=char(CODE(q-1),1; else a=sum(encoding(p:q-1,1)/2; for k=p:q-2 if abs(s

16、um(encoding(p:k,1)-a)=abs(sum(encoding(p:k+1,1)-a); break; end end for i=p:q-1 if i=k encoding(i,j)=0; CODE(i)=char(CODE(i),0; else encoding(i,j)=1; CODE(i)=char(CODE(i),1; end end end end p=q; end C=encoding(:,j); D=find(C=-1); e,f=size(D); if e=n j=0; else j=j+1; endendencodingACODEfor i=1:n u,v=s

17、ize(char(CODE(i); L(i)=v;endavlen=sum(L.*A)3.Hamming码:function y=encoding(m)n=length(m);% n为原始码字的长度,即为4% (7,4)汉明y=;if mod(n,4)=0n=n+4-mod(n,4)m=m zeros(1,4-mod(n,4);endfor i=1:n/4 a=m(i-1)*4+1:i*4); for j=1:4 b=mod(sum(a(1:3),2); c=mod(sum(a(1:2) a(4),2); d=mod(a(1)+a(3)+a(4),2); end y=y a,b,c,d;end

18、;function y=decoding(m)H=1 1 1 0 1 0 0;1 1 0 1 0 1 0; 1 0 1 1 0 0 1;s=mod(m*(H),2);if sum(s=0 0 0)=3 y=m(1:4);else if sum(s=0 0 1)=3 y=m(1:4); else if sum(s=0 1 0)=3 y=m(1:4); else if sum(s=1 0 0)=3 y=m(1:4); else if sum(s=0 1 1)=3 y=m(1:3) m(4); else if sum(s=1 0 1)=3 y=m(1:2) m(3) m(4); else if sum(s=1 1 0)=3 y=m(1) m(2) m(3:4); else if sum(s=1 1 1)=3 y=m(1) m(2:4); end end end end end end endend参考文献:信息理论基础 北京航空航天大学出版社 周荫清 主编 MATLAB程序设计与典型应用 电子工业出版社 张德丰 主编

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

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