1、实 验 报 告课程名称 信息论与编码 实验项目 信息熵、信道容量的计算 实验仪器 计算机 系 别 信息与通信工程学院 专 业 电子信息工程 班级/学号 学生姓名 实验日期 2012-11-7 成 绩 _指导教师 实验一:信息熵、信道容量的计算实验项目:信息熵、信道容量的计算实验项目性质:验证性实验课程:信息论与编码计划学时:4 学时一、实验目的掌握使用计算机计算信息熵、信道容量的方法。二、实验内容利用 matlab 语言编程实现信息熵、信道容量的计算。三、实验原理1参照教材(焦瑞莉等编著信息论基础教程 )第 14 页式(2-16)理解信息熵的定义2参照教材(焦瑞莉等编著信息论基础教程 )第 6
2、8 页式(3-15)理解信道容量的定义四、实验方法与实验步骤(一)参照教材第 215 页信源熵程序建立文件 entropy.m文件 entropy.m 的代码:%entropy%计算函数%function H=entropy(P,r)if isempty(find(P10e-10)error(Not aprob vector,component do not add up to 1);%判断是否符合概率和为 1end H=(sum(-P.*log2(P)/(log2(r)+eps);(二)建立文件 exercise2_3_1.m 通过调用 entropy.m 计算教材第 59 页练习 2.3(
3、1)(参考答案:0.8113 比特)文件 exercise2_3_1.m 的代码及运行结果:clc;H=entropy(1/4,3/4,2)运行结果:(三)参照教材第 215 页离散无记忆信道容量的迭代计算程序建立文件 channelcap.m文件 channelcap.m 的代码:% 信道容量 C 的迭代算法% 函数说明:% CC,Paa=ChannelCap(P,k) 为信道容量函数% 变量说明:% P:输入的正向转移概率矩阵,k:迭代计算精度% CC:最佳信道容量,Paa:最佳输入概率矩阵% Pa:初始输入概率矩阵,Pba:正向转移概率矩阵% Pb:输出概率矩阵,Pab:反向转移概率矩阵
4、% C:初始信道容量, r:输入符号数,s:输出符号数%*%function CC,Paa=channelcap(P,k)% 提示错误信息 if (isempty(find(P10e-10error(Not a prob.vector,components do not add up to 1) % 判断是否符合概率和为 1end % 1)初始化 Par,s=size(P);Pa=(1/(r+eps)*ones(1,r);Pba=P;% 2)进行迭代计算n=0;C=0; CC=1;while abs(CC-C)=k % 迭代开始n=n+1;% (1)先求 Pb Pb=zeros(1,s); f
5、or j=1:sfor i=1:rPb(j)=Pb(j)+Pa(i)*Pba(i,j); endend% (2)再求 Pabsuma=zeros(1,s);Pab=zeros(s,r);for j=1:sfor i=1:rPab(j,i)=Pa(i)*Pba(i,j)/(Pb(j)+eps);suma(j)=suma(j)+Pa(i)*Pba(i,j)*log2(Pab(j,i)+eps)/(Pa(i)+eps);endend% 3)求信道容量 CC=sum(suma);% 4)求下一次 Pa,即 PaaL=zeros(1,r);a=zeros(1,r);for i=1:rfor j=1:sL
6、(i)=L(i)+Pba(i,j)*log(Pab(j,i)+eps); enda(i)=exp( L(i); endPaa=a./(sum(a)+eps); % 5)求下一次 C,即 CCCC=log2(sum(a)+eps);Pa=Paa;end % 迭代结束% 打印输出结果s0=很好!输入正确,迭代结果如下:;s1=最佳输入概率分布 Pa:;s2=信道容量 C:;s3=迭代次数 n:;s4=输入符号数 r:;s5=输出符号数 s:;s6=迭代计算精度 k:;i=1:r;B=i;disp(s0);disp(s1),disp(B),disp(Paa);disp(s4),disp(r);dis
7、p(s5),disp(s);disp(s2),disp(CC);disp(s6),disp(k); disp(s3),disp(n);(四)建立文件 exercise3_2_b.m 通过调用 channelcap.m 计算教材第 92 页练习 3.2(b)(参考答案:0.0817 比特)文件 exercise3_2_b.m 的代码和运行结果:P= 1/3,1/6,1/3,1/6;1/6,1/3,1/6,1/3;channelcap(P,0.0001)五、心得与体会通过本次试验我掌握了利用 matlab 语言编程实现信息熵、信道容量的计算,不仅如此,通过本次试验,还让我对书本上的本部分知识有了跟深刻的了解,更加熟悉了 MatLab 软件的使用。