信息论实验报告李红莲实验一
- 格式:doc
- 大小:18.00 KB
- 文档页数:3
信息论基础
实验报告
专业:电子信息工程
姓名:
班级/学号:电信1002/
指导老师:李红莲
实验一:信息熵、信道容量的计算
一、实验目的
掌握使用计算机计算信息熵、信道容量的方法。
二、实验原理
1.参照教材(焦瑞莉等编著《信息论基础教程》)第14页式(2-16)理解信息熵的定义
2.参照教材(焦瑞莉等编著《信息论基础教程》)第68页式(3-15)理解信道容量的定义
三、实验方法与实验步骤
(一)参照教材第215页信源熵程序建立文件entropy.m
(二)建立文件exercise2_3_1.m通过调用entropy.m计算教材第69页练习2.3(1)(参考答案:0.81比特)
(三)参照教材第215页离散无记忆信道容量的迭代计算程序建立文件channelcap.m
(四)建立文件exercise3_2_b.m通过调用channelcap.m计算教材第92页练习3.2(b)(参考答案:0.0817比特)
四.源程序代码
1)function H=entropy(P,r)
if(~isempty(find(P<=0)))
error('Not a prob.Vector,negative component');
end
if(abs(sum(P)-1)>10e-10)
error('Not aprob vetor,component do not add up to 1');
end
H=(sum(-P.*log2(P)))/(log2(r)+eps);
clc;
H=entropy([1/4,3/4],2
2)function [CC,Paa]=channelcap(P,k)
% 提示错误信息
if (~isempty(find(P<0, 1)))
error('Not a prob.vector,negative component'); % 判断是否符合概率分布条件
end
if abs(sum((P'))-1)>10e-10
error('Not a prob.vector,components do not add up to 1') % 判断是否符合概率和为1
end
% 1)初始化Pa
[r,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);
for j=1:s
for i=1:r
Pb(j)=Pb(j)+Pa(i)*Pba(i,j);
end
end
% (2)再求Pab
suma=zeros(1,s);
Pab=zeros(s,r);
for j=1:s
for i=1:r
Pab(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));
end
end
% 3)求信道容量C
C=sum(suma);
% 4)求下一次Pa,即Paa
L=zeros(1,r);
a=zeros(1,r);
for i=1:r
for j=1:s
L(i)=L(i)+Pba(i,j)*log(Pab(j,i)+eps);
end
a(i)=exp( L(i));
end
Paa=a./(sum(a)+eps);
% 5)求下一次C,即CC
CC=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);
disp(s5),disp(s);
disp(s2),disp(CC);
disp(s6),disp(k);
disp(s3),disp(n);
clc,clear
close all
P=[1/3,1/6,1/3,1/6;1/6,1/3,1/6,1/3]
k=10e-9
[CC,Paa]=ChannelCap(P,k)
五、实验结果
1)
2)
六.思考题
使用计算机编程进行信道容量的迭代计算是否肯定收敛,即是否一定能得出近似正确结果?
否
七.实验体会
对信道容量的迭代计算有了进一步了解,以及信息熵的计算。收获颇丰