哈尔滨理工大学实验报告课程名称:信息论基础学院:自动化专业班级:电技12-3学生姓名:樊晓晨学号:1212020303指导教师:刘燕实验一课程名称信息论基础时间2014-10-15实验名称信息熵的计算地点B302姓名樊晓晨学号1212020303班级电技12-3同实验者学号班级一.实验目的:通过本次实验的练习,使学生进一步巩固信息熵的基本概念,掌握信息熵的统计方法,培养学生使用编程工具进行分析计算的基本能力。二.实验内容:(1)计算图像的信息熵基于一幅已知图像,读取该图像信息,并通过统计该图像的像素值计算各个像素值出现的概率,进而得到该图像的信息熵。(2)多个信源比较对多个不同图像源进行上述操作,从物理意义上对这些图像的信源熵进行比较分析,得出结论三.实验结果分析:1.图像一:050100150200250050100150200250300350H=7.1750比特/符号2.图像二:05010015020025001002003004005006007008009001000H=6.47743.图像三:050100150200250020040060080010001200H=6.4129比特/符号4.matlab程序:I=imread('03.jpg');S=rgb2gray(I);imshow(S)[a,b]=size(S);C=a*b;[x,y]=imhist(S);figureimhist(S);xlabel('XÖá');ylabel('YÖá');p=x(find(x))./CH=-sum(p.*log2(p))5.实验结论与心得:通过此次试验可以得出如下结论:a.图像色调越深,信息熵就越大;b.图2和图三灰度图看起来有点类似,计算出的信息熵用近似,通过对比两幅图的熵函数图像也可以看出两幅图相近。c.通过这次试验,加深了对所学知识的理解和掌握,并能加以应用,这才是学习的目的所在。成绩评定:指导教师:年月日实验二课程名称信息论基础时间2014-11-21实验名称信道容量的迭代计算地点B302姓名樊晓晨学号1212020303班级电技12-3同实验者邹环宇学号1212020331班级电技12-3一.实验目的:本次实验的练习,使学生进一步巩固信息容量的基本概念,掌握信息容量的迭代计算的基本原理和方法,培养学生使用编程工具进行分析计算的基本能力。二.实验内容:1.用matlab软件编程实现一般信道容量迭代算法;2.设定不同的信道分别计算其信道容量(至少选择以下两个信道);0.980.020.050.95P,0.60.40.010.99P,0.790.160.050.050.150.08P3.设定不同的迭代精度分别求解器信道容量(至少两种精度).三.实验结果分析:1.结果一:输入信源个数3输入信宿个数2输入信道容量的精度:0.005输入信道转移矩阵P:[0.10.50.4;0.60.20.2]P=0.10000.50000.40000.60000.20000.2000原始信源分布:ans=0.50000.5000迭代次数:k=1最大信道容量时的信源分布:p=0.50940.49062.结果二:输入信源个数2输入信宿个数2输入信道容量的精度:0.0006输入信道转移矩阵P:[0.980.02;0.050.95]P=0.98000.02000.05000.9500原始信源分布:ans=0.50000.5000迭代次数:k=1最大信道容量时的信源分布:p=0.51120.48883.结果三:输入信源个数3输入信宿个数2输入信道容量的精度:0.008输入信道转移矩阵P:[0.20.10.7;0.30.40.3]P=0.20000.10000.70000.30000.40000.3000原始信源分布:ans=0.50000.5000迭代次数:k=1最大信道容量时的信源分布:p=0.50250.49754.MATLAB程序:clear;r=input('输入信源个数');s=input('输入信宿个数');deta=input('输入信道容量的精度:');Q=rand(r,s);A=sum(Q,2);B=repmat(A,1,s);P=input('输入信道转移矩阵P:')[r,s]=size(P);fori=1:rif(sum(P(i,:))~=1)error('概率转移矩阵输入有误!!')return;endforj=1:sif(P(i,j)0||P(i,j)1)error('概率转移矩阵输入有误!!')return;endendendi=1:1:r;p(i)=1/r;disp('原始信源分布:')p(i)E=repmat(p',1,s);fork=1:1:1/detam=E.*P;a=sum(m);%把得到的矩阵m每列相加之和构成一行su1=repmat(a,r,1);%把得到的行矩阵a复制r行,成一新矩阵sul,后验概率的分母部分t=m./su1;%后验概率矩阵n=exp(sum(P.*log(t),2));%信源分布的分子部分su2=sum(n);%信源分布的分母部分p=n/su2;%信源分布E=repmat(p,1,s);C(k+1)=log(sum(exp(sum(P.*log(t),2))))/log(2);kk=abs(C(k+1)-C(k))/C(k+1);if(kk=deta)break;enddisp('迭代次数:k='),disp(k)enddisp('最大信道容量时的信源分布:p='),disp(p')成绩评定:指导教师:年月日实验三课程名称信息论基础时间2014-11-21实验名称霍夫曼编码实验地点B302姓名樊晓晨学号1212020303班级电技12-3同实验者邹环宇学号1212020331班级电技12-3一.实验目的:通过本次实验的练习,使学生进一步巩固霍夫曼编码的原理,掌握霍夫曼编码方法,培养学生使用编程工具进行分析计算的基本能力。二.实验内容:1.应用Matlab软件编程实现霍夫曼编码算法(信源空间自行设计)2.显示所有码字并计算编码效率三.实验结果分析:1.MATLAB程序clc;clear;A=[0.10.10.20.30.10.10.1];%待编码啊序列概率A=fliplr(sort(A));%按降序排列T=A;[m,n]=size(A);B=zeros(n,n-1);%空的编码表(矩阵)fori=1:nB(i,1)=T(i);%生成编码表的第一列endr=B(i,1)+B(i-1,1);%最后两个元素相加T(n-1)=r;T(n)=0;T=fliplr(sort(T));t=n-1;forj=2:n-1%生成编码表的其他各列fori=1:tB(i,j)=T(i);endK=find(T==r);B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在%该列的位置r=(B(t-1,j)+B(t,j));%最后两个元素相加T(t-1)=r;T(t)=0;T=fliplr(sort(T));t=t-1;endB;%输出编码表END1=sym('[0,1]');%给最后一列的元素编码END=END1;t=3;d=1;forj=n-2:-1:1%从倒数第二列开始依次对各列元素编码fori=1:t-2ifi1&B(i,j)==B(i-1,j)d=d+1;elsed=1;endB(B(n,j+1),j+1)=-1;temp=B(:,j+1);x=find(temp==B(i,j));END(i)=END1(x(d));endy=B(n,j+1);END(t-1)=[char(END1(y)),'0'];END(t)=[char(END1(y)),'1'];t=t+1;END1=END;endA%排序后的原概率序列END%编码结果fori=1:n[a,b]=size(char(END(i)));L(i)=b;endavlen=sum(L.*A)%平均码长H1=log2(A);H=-A*(H1')%熵P=H/avlen%编码效率2.编码结果:A=0.30000.20000.10000.10000.10000.10000.1000END=[1,10,1,0,1,110,111]avlen=1.6000H=2.6464P=1.6540成绩评定:指导教师:年月日