文档详情

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

daj****de
实名认证
店铺
DOCX
234.02KB
约12页
文档ID:154896784
《信息论与编码》实验讲义_第1页
1/12

信息论与编码实验讲义学生实验守则1、 进实验室前,必须根据每个实验的预习要求,阅读有关资料2、 按时进入实验室,保持安静和整洁,独立完成实验3、 实验开始前,应仔细检查仪器、设备是否齐备和完好若有不全或损坏 情况,应及时报告指导教师4、 爱护公物,正确使用实验仪器和设备,不得随意动用与本实验无关的仪 器和设备5、 接线完毕,先自行检查,再请指导教师检查,确认无误后,方可接通电 源6、 在实验过程中必须服从教师指导,严格遵守操作规程,精力高度集中, 操作认真,要有严格的科学态度7、 实验进行中,严禁用手触摸线路中带电部分,严禁在未切断电源的情况 下改接线路;若有分工合作的情况,必须要分工明确,责任分明,操作要有序, 以确保人身安全和设备安全8、 实验中若出现事故或发现异常情况,应立即关断电源,报告指导教师, 共同分析事故原因9、 实验完毕,应报请指导教师检查实验报告,认为达到要求后,方可切断 电源并整理好实验装置,经指导教师检查后才能离开实验室实验一绘制二进制熵函数曲线一、 实验目的1. 掌握二进制符号炳的计算;2. 掌握MATLAB的应用;3. 掌握Matlab绘图函数;4. 掌握、理解嫡函数表达式及其性质二、 实验条件计算机一台,MATLAB仿真软件。

三、 实验内容(1) MATLAB的应用(请参阅相关书籍)(2) 打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图1:图1 MATLAB的编辑窗口(3) 输入源程序:clear;x=0.001:0.001:0.999y=—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)的取值步长,重画该曲线1 gwe Ho.File Edi t Yiew Insert Tools Window Kelp]!□ a; Q a k A Z Z 务-Q图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)resul t(i)=result (i) -Y(i,j)*log2(Y(i,j));endresult(i)=result(i)-Hxy;endplot(x,result,'r');grid onch:±rLTLel (p)U. 5LILILIU.2500在命令窗口输入:p=[1/2 1/4 1/8 1/8;1/4 1/2 1/8 1/8]; channel(p);得到计算结果如图4p=[l/2 "4 1/8 1/3;1/4 1/2 1/8 1/8:图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))~=0error('Not a prob.vector,negaative component(s)')endif (abs(sum(p)T)〉10eT0)error('Not a prob.vector,component do not add to 1') endH=-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];endfor i=1:n-1c(i,:)=blanks(n*n);endc(nT,n)=,0,;c(nT,2*n)='1‘;for i=2:n-1c(n-i,1:nT)=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*nT)=c(n-i,1:nT);c(n-i,2*n)=,1,;for j=1:i-1c(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));endendfor i=1:nh(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));endL=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 = 010011111010110011000=95.9一、,『工、, H 2.6087可计算出编码效率为:门=—=L 2.7 2实验四线性分组码的信道编码和译码一、 内容编程实现线性分组码的信道编码和译码。

二、 要求1. 掌握线性分组码的编码和译码原理以及纠错原理2. 掌握matlab开发环境的使用(尤其是程序调试技巧)3. 掌握matlab语言编程(尤其是位运算的操作)三、 实验内容(1) MATLAB的应用(请参阅相关书籍)(2) 打开MATLAB,在命令窗口中输入eidt,弹出编辑窗口,如图3:图3 MATLAB的编辑窗口(3) MATLAB仿真建立一个函数linecode.m^入如下代码:clear;K=3;for i=1:2"kfor j=K:-1:1if rem(i-1,2”(-j+K+1))〉2”(-j+k)m(i,j)=1;elsem(i,j)=0;endendendg=[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 =0000 0000011 1010100 1110111 0101001 1101010 0111101 0011110 100d_min =4dcode =0000.00000.00001.0000-0.00001.00000.00000.00001.00001.00001.00000.00000.00001.00000.00001.00001.00001.00000.00001.00001.00001.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 =110 12 2 1这不是我们想要的7位编码字,MATLAB做的是传统的矩阵乘法。

为了得到击破要的码字, 必须把所有偶数值改为0,把奇数值改为1在这里使用除2的余数>> B = mod(B,2)B =110 10 0 1注意到B中前3位是A,后3位是约束位解码器探询误差时使用矩阵H:>> C = mod(B*H’,2)C =000 0C完全是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 =1101由于我们选择的H,得到的结果是11 0 1,与H矩阵的第3列相同,即第3位发生了错误,可 以纠正为1 10 10 0 1四、实验总结通过该实验可以验证,(7, 3)线性分组码可以检测并同时纠正1位错误。

下载提示
相关文档
正为您匹配相似的精品文档