收藏 分销(赏)

《信息论与编码》实验讲义.doc

上传人:s4****5z 文档编号:8755413 上传时间:2025-03-01 格式:DOC 页数:11 大小:4.97MB 下载积分:10 金币
下载 相关 举报
《信息论与编码》实验讲义.doc_第1页
第1页 / 共11页
《信息论与编码》实验讲义.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
信息论与编码 实验讲义 2 学生实验守则 1、进实验室前,必须根据每个实验的预习要求,阅读有关资料。 2、按时进入实验室,保持安静和整洁,独立完成实验。 3、实验开始前,应仔细检查仪器、设备是否齐备和完好。若有不全或损坏情况,应及时报告指导教师。 4、爱护公物,正确使用实验仪器和设备,不得随意动用与本实验无关的仪器和设备。 5、接线完毕,先自行检查,再请指导教师检查,确认无误后,方可接通电源。 6、在实验过程中必须服从教师指导,严格遵守操作规程,精力高度集中,操作认真,要有严格的科学态度。 7、实验进行中,严禁用手触摸线路中带电部分,严禁在未切断电源的情况下改接线路;若有分工合作的情况,必须要分工明确,责任分明,操作要有序,以确保人身安全和设备安全。 8、实验中若出现事故或发现异常情况,应立即关断电源,报告指导教师,共同分析事故原因。 9、实验完毕,应报请指导教师检查实验报告,认为达到要求后,方可切断电源。并整理好实验装置,经指导教师检查后才能离开实验室。 9 实验一 绘制二进制熵函数曲线 一、实验目的 1.掌握二进制符号熵的计算; 2.掌握MATLAB的应用; 3.掌握Matlab绘图函数; 4.掌握、理解熵函数表达式及其性质 二、实验条件 计算机一台,MATLAB仿真软件。 三、实验内容 (1)MATLAB的应用(请参阅相关书籍) (2)打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图1: 图1 MATLAB的编辑窗口 (3)输入源程序: clear; x=0.001:0.001:0.999 y=-x.*log2(x)-(1-x).*log2(1-x); plot(x,y); grid on (4)保存文件为entropy.m; (5)单击Debug菜单下的Run,或直接按F5执行; (6)执行后的结果图2: 四、实验分析 (1)熵函数是一个严格上凸函数 (2)熵的极大值,二进符号的熵在p(x1)=p(x2)=0.5取得极大值 (3)调调整p(x1)的取值步长,重画该曲线 图2 二进制符号熵函数图 实验二 一般信道容量迭代算法 一、实验目的 1.掌握准对称信道信道容量的计算方法 2.掌握准对称信道信源输入概率分布的计算 3.掌握一般信道容量迭代算法的原理 4.掌握应用MATLAB计算准对称信道的方法 5.掌握准对称信道的性质 6.掌握互信量的概念及与信道容量的关系 二、实验条件 计算机一台,MATLAB仿真软件。 三、实验内容 (1)MATLAB的应用(请参阅相关书籍) (2)打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图3: 图3 MATLAB的编辑窗口 (3)MATLAB仿真 建立一个函数Channel.m输入如下代码: function []=Channel(ArrayP) Hxy=0; for i=1:size(ArrayP,2) Hxy=Hxy-ArrayP(1,i)*log2(ArrayP(1,i)); end %Hxy=-1/2*log2(1/2)-1/4*log2(1/4)-1/8*log2(1/8)-1/8*log2(1/8) x=0:0.01:1; Py=ArrayP'*[x;1-x]; Y=Py'; result=[]; for i=1:size(Y,1) result(i)=0; for j=1:size(Y,2) result(i)=result(i)-Y(i,j)*log2(Y(i,j)) ; end result(i)=result(i)-Hxy; end plot(x,result,'r'); grid on 在命令窗口输入: p=[1/2 1/4 1/8 1/8;1/4 1/2 1/8 1/8]; channel(p); 得到计算结果如图4 图4 对于给定P后互信息量图 实验三 Huffman编码 一、实验目的 1.掌握变长编码原理 2.掌握二进制Huffman编码原理 3.掌握Huffman编码的最佳性 二、实验条件 计算机一台,MATLAB仿真软件。 三、实验内容 (1)MATLAB的应用(请参阅相关书籍) (2)打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图3: 图3 MATLAB的编辑窗口 (3)MATLAB仿真 建立一个函数huffman.m输入如下代码: function [h,H,L]=huffman(p) %变量p为所有符号出现概率所组成的概率向量 %返回值h为利用Huffman编码算法编码后最后得到的编码结果 %返回值H为信源熵 %返回值为进行Huffman编码后所得到的编码的码字长度 if length(find(p<0))~=0 error('Not a prob.vector,negaative component(s)') end if (abs(sum(p)-1)>10e-10) error('Not a prob.vector,component do not add to 1') end H=-sum(p.*log2(p)) n=length(p); 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)); end end for i=1:n h(i,1:n)=c(1,n*(find(m(1,:)==i)-1)+1:find(m(1,:)==i)*n); L1(i)=length(find(abs(h(i,:))~=32)); end L=sum(p.*L1) 在命令窗口中输入: p=[0.2 0.19 0.18 0.17 0.15 0.1 0.01] [h,H,L]=huffman(p) 得到该信源的熵: H =2.6087 平均编码长度: L =2.7200 编码结果发如下: h = 01 00 111 110 101 1001 1000 可计算出编码效率为: 实验四 线性分组码的信道编码和译码 一、内容 编程实现线性分组码的信道编码和译码。 二、要求 1. 掌握线性分组码的编码和译码原理以及纠错原理 2. 掌握matlab开发环境的使用(尤其是程序调试技巧) 3. 掌握matlab语言编程(尤其是位运算的操作) 三、实验内容 (1)MATLAB的应用(请参阅相关书籍) (2)打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图3: 图3 MATLAB的编辑窗口 (3)MATLAB仿真 建立一个函数linecode.m输入如下代码: clear; K=3; for i=1:2^k for j=K:-1:1 if rem(i-1,2^(-j+K+1))>2^(-j+k) m(i,j)=1; else m(i,j)=0; end end end g=[1 0 0 1 1 1 0; 0 1 0 0 1 1 1; 0 0 1 1 1 0 1]; %产生码字空间 code=m*g; c=rem(m*g,2) %找出最小汉明距离 d_min=min(sum((c(2:2^k,:))')) dcode=rem(code/g,2) 执行程序得到结果如下: c = 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1 0 0 1 1 1 0 1 1 1 0 1 0 1 0 0 1 1 1 0 1 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0 d_min = 4 dcode = 0 0 0 0.0000 0.0000 1.0000 -0.0000 1.0000 0.0000 0.0000 1.0000 1.0000 1.0000 0.0000 0.0000 1.0000 0.0000 1.0000 1.0000 1.0000 0.0000 1.0000 1.0000 1.0000 (4)测试线性分组码的纠错能力 在命令窗口输入: >>g=[ 1 0 0 1 1 1 0; 0 1 0 0 1 1 1; 0 0 1 1 1 0 1]; >>H=[1 0 1 1 0 0 0; 1 1 1 0 1 0 0; 1 1 0 0 0 1 0; 0 1 1 0 0 0 1]; >> A = [1 1 0]; >> B = [A*G] B = 1 1 0 1 2 2 1 这不是我们想要的7 位编码字,MATLAB做的是传统的矩阵乘法。为了得到击破要的码字,必须把所有偶数值改为0,把奇数值改为1。在这里使用除2 的余数 >> B = mod(B,2) B = 1 1 0 1 0 0 1 注意到B 中前3位是A,后3位是约束位。 解码器探询误差时使用矩阵H: >> C = mod(B*H’,2) C = 0 0 0 0 C完全是0,这表示没有需要校正的误差,所以解码器只是简单地去除掉约束位。现在假设在第3位发生了误差,所以解码器收到的信息是[1 1 1 1 0 0 1],而不是[1 1 0 1 0 0 1]。现在, >> B(3) = ~B(3); >> C = mod(B*H’,2) C = 1 1 0 1 由于我们选择的H,得到的结果是1 1 0 1,与H矩阵的第3列相同,即第3位发生了错误,可以纠正为1 1 0 1 0 0 1。 四、实验总结 通过该实验可以验证,(7,3)线性分组码可以检测并同时纠正1位错误。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服