信息论与编码实验报告-信源熵值的计算
信息论与编码实验报告-信源熵值的计算
实验报告课程名称:信息论与编码姓名:系:专业:年级:学号:指导教师:职称:实验一信源熵值的计算、实验目的1进一步熟悉信源熵值的计算2熟悉Matlab编程、实验原理熵(平均自信息)的计算公式q i qH(x)八P i log2 P i log2 P ii」P i yMATLAB实现:HX 二sum(-x.* Iog2 (x));或者h 二h - x(i)* log2(x(i))流程:第一步:打开一个名为“ nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出现一次该字符的计数器+1;第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat)。
程序流程图:利用:•言息燼公式求出信三、实验内容1、写出计算自信息量的Matlab 程序2、已知:信源符号为英文字母(不区分大小写)和空格。
输入:一篇英文的信源文档。
输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。
四、实验环境Microsoft Windows 7Matlab 6.5五、编码程序#include"stdio.h"#include <math.h>#include <string.h>#define N 1000int main(void){char s[N];int i,n=0;float num[27]={0};double result=0,p[27]={0};FILE *f;char *temp=new char[485];f=fopen("nan311.txt","r");while (!feof(f)) {fread(temp,1, 486, f);}fclose(f);s[0]=*temp;for(i=0;i<strlen(temp);i++){s[i]=temp[i];}for(i=0;i<strlen(s);i++){if(s[i]==' ')num[26]++;else if(s[i]>='a'&&s[i]<='z')num[s[i]-97]++;else if(s[i]>='A'&&s[i]<='Z')num[s[i]-65]++;printf("文档中各个字母出现的频率:\n"); for(i=0;i<26;i++){p[i]=nu m[i]/strle n(s);prin tf("%3c:%f\t",i+65,p[i]);n++;if(n==3){prin tf("\n");n=0;}}p[26]=nu m[26]/strle n(s);prin tf("空格:%f\t",p[26]);prin tf("\n"); for(i=0;i<27;i++){if (p[i]!=0) result=result+p[i]*log(p[i]); }result=-result;printf("信息熵为:%f",result);prin tf("\n");return 0;}六、求解结果其中nan311.txt中的文档如下:There is no hate without fear. Hate is crystallized fear, fear ' divide nd, fear objectivized. We hate what we fear and so where hate is, fear is lurking. Thus we hate what threatens our person, our vanity and our dreams and plans for ourselves. If we can isolate this element in what we hate we may be able to cease from hating.七、实验总结通过这次实验,我们懂得了不必运行程序时重新输入文档就可以对文档进行统计,既节省了时间而且也规避了一些输入错误。
信息论上机实验报告
信息论与编码实验报告实验一:计算离散信源的熵一、实验设备: 1、计算机2、软件:Matlab 二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程; 三、习题:1. 甲地天气预报构成的信源空间为:1111(),,,8482X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨云 大雨晴 乙地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦小雨晴 求此两个信源的熵。
求各种天气的自信息量。
代码:x=[1/2,1/4,1/8,1/8]; y=[7/8,1/8];HX=sum(-x.*log2(x)) HY=sum(-y.*log2(y)) IX=-log2(x) IY=-log2(y) 答案:() 1.75;()0.5436H X H Y ==2、 某信息源的符号集由A 、B 、C 、D 、E 组成,设每一符号独立出现,其出现的概率分别为,1/4,1/8,1/8,3/16,5/16,试求该信源符号的平均信息量。
代码:x=[1/4,1/8,1/8,3/16,5/16]; HX=sum(-x.*log2(x))答案:H(X) = 2.2272bit/符号3、设有四个消息分别以概率1/4,1/8,1/8,1/2传送,每一消息的出现是相互独立的。
试计算其平均信息量。
代码:x=[1/4,1/8,1/8,1/2]; HX=sum(-x.*log2(x)) 答案:H(X) =1.75bit/符号4. 设一个二元信源(只有0和1两种符号)其概率空间为:(),1X p x p p ⎡⎤⎡⎤=⎢⎥⎢⎥-⎣⎦⎣⎦0 1编程画出H 与p 的关系,并说明当P 呈什么分布时,平均信息量达到最大值。
(说明:H=-p.*log2(p)-(1-p).log2(1-p);) 代码:p= 1/1000000:1/1000:1;H=-p.*log2(p)-(1-p).*log2(1-p); plot(p,H) grid on xlabel('p'); ylabel('HP'); 图:实验二:验证熵的可加性与强可加性1. 【例2.6】有一离散无记忆信源123111(),,244a a a X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦验证二次扩展信源2X 的熵等于离散信源X 的熵的2倍,即2()2()H X H X =代码:x=[1/2,1/4,1/4];hx=sum(x.*log2(1./x))x2=[1/4,1/16,1/16,1/8,1/8,1/8,1/16,1/8,1/16] hx2=sum(x2.*log2(1./x2)) 答案:2() 1.5;() 3.0H X H X ==2. 验证两个统计独立的信源,X Y ,验证:()()()H XY H X H Y =+其中:123111(),,244a a a X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦123111(),,333b b b Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦代码:x=[1/2,1/4,1/4]; y=[1/3,1/3,1/3];xy=[1/6,1/6,1/6,1/12,1/12,1/12,1/12,1/12,1/12] hx=sum(x.*log2(1./x)) hy=sum(y.*log2(1./y)) Hxy=sum(xy.*log2(1./xy)) 答案:() 1.5,() 1.585() 3.085H X H Y H XY ===3、条件熵的计算与熵的强可加性 验证离散二维平稳信源,满足:12121()()(|)H X X H X H X X =+某一离散二维平稳信源0121141(),,3694X p x ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦12X X 其联合概率分布12()p X X 为:编程计算:1) 联合熵12()H X X 2) 条件熵21(|)H X X3) 验证:12121()()(|)H X X H X H X X =+代码:x1=[11/36,4/9,1/4]; x2=[11/36,4/9,1/4];b=[1/4,1/18,0;1/18,1/3,1/18;0,1/18,7/36]; HXY=0;for i=1:size(b,1) for j=1:size(b,2) if b(i,j)>0HXY=HXY-b(i,j).*log2(b(i,j)); end end end HXYHx1=sum(x1.*log2(1./x1)) Hx2=sum(x2.*log2(1./x2))b0=b(1,:); b1=b(2,:); b2=b(3,:);x1x2=[b0./x2;b1./x2;b2./x2]; Hx1x2=0;for i=1:size(x1x2,1) for j=1:size(x1x2,2) if x1x2(i,j)>0Hx1x2=Hx1x2-b(i,j).*log2(x1x2(i,j)); end end end Hx1x2 答案:12112121() 1.5426;(|)0.8717() 2.4144()(|) 2.4144H X H X X H X X H X H X X ===+=实验三:离散信道的平均互信息的计算1. 【习题3.1】 设信源12()0.6,0.4X x x p x ⎡⎤⎡⎤=⎢⎥⎢⎥⎣⎦⎣⎦通过一干扰信道,接收到符号为12[,]Y y y =,其信道矩阵为:516631,44P ⎡⎤⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦1) 求信源X 中事件1x 和2x 分别含有的自信息;2) 收到消息(1,2)j y j =后,获得的关于(1,2)i x i =的信息量;3) 求信源X 和输出变量Y 的信息熵; 4) 信道疑义度(|)H X Y 和噪声熵(|)H Y X ; 5) 接收到消息Y 后获得的平均互信息;代码:x=[0.6,0.4];p=[5/6,1/6;3/4,1/4]; Ix1=log2(1./(x(1,1))) Ix2=log2(1./(x(1,2)))pxy=[x(1,1)*p(1,:);x(1,2)*p(2,:)]; py=[x*p(:,1),x*p(:,2)];px_y=[pxy(:,1)/py(1,1),pxy(:,2)/py(1,2)]; I=log2(p./[py;py]) Hx=sum(x.*log2(1./x)) Hy=sum(py.*log2(1./py))Hx_y=sum(sum(pxy.*log2(1./px_y))) Hy_x=sum(sum(pxy.*log2(1./p)))Ixy=sum(sum(pxy.*log2(p./[py;py])))答案:12111221221.()0.737() 1.32192.(;)0.0589,(;)0.263,(;)0.0931,(;)0.32193.()0.971,()0.72194.(|)0.9635(|)0.71455.(;)0.0074I x I x I x y I x y I x y I x y H X H Y H X Y H Y X I X Y ====-=-======2. 二元信道的互信息与信源分布的关系 有二元信源:01()1X p x ωω⎡⎤⎡⎤=⎢⎥⎢⎥-⎣⎦⎣⎦有二元信道,其传递矩阵为:11p p P p p -⎡⎤=⎢⎥-⎣⎦, 其中0.2p =,即传递矩阵0.80.20.20.8P ⎡⎤=⎢⎥⎣⎦编程实现下面题目:1) 画出平均互信息(;)I X Y 随信源分布ω的关系曲线,并求出最大平均互信息。
实验二信源熵的计算及信源编码实验
⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡01.01.015.017.018.019.02.0)(7654321x x x x x x x X P X 实验二 信源熵的计算及信源编码实验实验目的:1、掌握信源熵、疑义度、噪声熵、联合熵和信源的二次扩展信源的熵的计算。
2、掌握哈夫曼编码的Matlab 实现方法。
3、掌握香农编码的Matlab 实现方法。
实验内容与步骤:一、信源熵H(X)、疑义度H(X|Y)、噪声熵H(Y|X)、联合熵H(XY)和信源二次扩展信源的熵H(X 2)的计算已知信源:接到如图所示的信道上,求在该信道上传输信息的信源熵H(X)、疑义度H(X|Y)、噪声熵H(Y|X)、联合熵H(XY)和信源二次扩展信源的熵H(X 2)结果:联合概率:px1y1 =0.4500px1y2 =0.0500px2y1 = 0.1000px2y2 = 0.4000Y 的概率:py1 =0.5500py2 =0.4500疑义度:px1_y1=0.8182px2_y1 =0.1818px1_y2 =0.1111px2_y2 = 0.8889信源熵:HX =1HY = 0.9928HXY =1.5955疑义度:HX_Y = 0.6027噪声熵:HY_X = 0.5955二次扩展信源熵:H_X = 2二、 香农编码实验设信源共7个符号消息,其数学模型如下其香农编码过程如下:0.8 0.1 0.2 X1X2 y1 y2 0.9根据分析模型编写M文件进行仿真,记录结果。
结果:十进制转二进制:c =0 0 0c =0 0 1c =0 1 1c =1 0 0c =1 0 1c =1 1 1 0c =1 1 1 1 1 1 0三、Huffman编码实验1)编写计算信息熵的M文件求信源X=[x1,x2,X3,X4,X5,X6,X7,X8,x9],其相应的概率为p=[0.2,0.15,0.13,0.12,0.1,0.09,0.08,0.07,0.06];利用编写的程序计算信息熵,并记录数值。
信息论与编码实验报告
实验一 绘制二进熵函数曲线(2个学时)一、实验目的:1. 掌握Excel 的数据填充、公式运算和图表制作2. 掌握Matlab 绘图函数3. 掌握、理解熵函数表达式及其性质二、实验要求:1. 提前预习实验,认真阅读实验原理以及相应的参考书。
2. 在实验报告中给出二进制熵函数曲线图三、实验原理:1. Excel 的图表功能2. 信源熵的概念及性质()()[]()[]())(1)(1 .log )( .)( 1log 1log )(log )()(10 , 110)(21Q H P H Q P H b nX H a p H p p p p x p x p X H p p p x x X P X i i i λλλλ-+≥-+≤=--+-=-=≤≤⎩⎨⎧⎭⎬⎫-===⎥⎦⎤⎢⎣⎡∑单位为 比特/符号 或 比特/符号序列。
当某一符号xi 的概率p(xi)为零时,p(xi)log p(xi) 在熵公式中无意义,为此规定这时的 p(xi)log p(xi) 也为零。
当信源X 中只含有一个符号x 时,必有p(x)=1,此时信源熵H (X )为零。
四、实验内容:用Excel 和Matlab 软件制作二进熵函数曲线。
根据曲线说明信源熵的物理意义。
(一) Excel具体步骤如下:1、启动Excel 应用程序。
2、准备一组数据p 。
在Excel 的一个工作表的A 列(或其它列)输入一组p ,取步长为0.01,从0至100产生101个p (利用Excel 填充功能)。
3、取定对数底c,在B列计算H(x) ,注意对p=0与p=1两处,在B列对应位置直接输入0。
Excel中提供了三种对数函数LN(x),LOG10(x)和LOG(x,c),其中LN(x)是求自然对数,LOG10(x)是求以10为底的对数,LOG(x,c)表示求对数。
选用c=2,则应用函数LOG(x,2)。
在单元格B2中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2)双击B2的填充柄,即可完成H(p)的计算。
信息论与编码2-信源及信源熵
实例3
随机天气状况信源,其中晴天、雨天、雪天出现的概率分别是0.7、0.2、0.1。
实例1
随机二进制信源,其中每个二进制符号(0或1)出现的概率为0.5。
离散无记忆信源的实例
离散有记忆信源
03
离散有记忆信源是输出符号序列中符号与符号之间存在记忆关系的离散随机序列。
应用场景
广泛应用于网络通信、金融交易、军事通信等领域,保障信息安全和隐私。
加密通信
03
应用景
广泛应用于通信系统、数据存储等领域,如CD、DVD、硬盘等存储设备的纠错编码。
01
纠错原理
通过在数据中添加冗余信息,检测和纠正数据传输过程中的错误。
02
常见纠错编码
如奇偶校验码、海明码、循环冗余校验码等,这些编码利用数学原理对数据进行校验,确保数据的正确性。
纠错编码
THANKS
感谢观看
离散有记忆信源的输出符号之间存在统计依赖关系,这种关系会影响信息熵的计算。
定义
性质
离散有记忆信源的定义与性质
计算方法
条件熵
联合熵
离散有记忆信源熵的计算
离散有记忆信源熵是描述信源不确定性的度量,可以通过统计模型来计算。具体计算方法包括条件熵和联合熵等。
条件熵是在给定前一个或多个符号条件下,输出符号的熵。
应用场景
广泛应用于文件存储、网络传输、多媒体处理等领域,如JPEG图片压缩、MP3音频压缩等。
数据压缩原理
通过去除数据中的冗余信息,将数据压缩至更小的存储空间,提高存储和传输效率。
数据压缩
加密原理
通过特定的加密算法将明文转换为密文,确保信息在传输过程中的保密性。
信息论实验报告1--信息熵的计算
~
fori=1:5
forj=1:4
sum=sum+A(i,j);
end
A(i,:)=A(i,:)/sum;
,
sum=0;
end
y=A;
求H(x|y):
functiony=H_x_y(A)
"
sum=0;
fori=1:4
forj=1:5
sum=sum+A(j,i);
end
\
A(:,i)=A(:,i)/sum;
实验
总结
日
本次实验的收获、体会、经验、问题和教训:
\
1、信息熵计算Matlab源码
求H(x):
function[a,b]=H_x(A)
sum =0;
B=zeros(5,1);
;
hx=0;%求H(x)的熵
fori=1:5%i代表行
forj=1:4%j代表列
sum=sum+A(i,j);
end
…
hx=hx-sum*log2(sum);
求H(x|y),H(y|x)
A=[ 0 0 0; 0 0;0 0;0 0 ;0 0 0];
H_x_y(A)
ans =
0 0 0
0 0
0 0
0 0
0 0 0
H_y_x(A)
ans =
0 0 0
0 0
0 0
0 0
0 0 0
教师
评语
成绩
辽宁工程技术大学上机实验报告
(
实验名称
信息熵的相关计算
院系
/
姓名
—
实验
)
目的
简述本次实验目的:
1、理解信息熵的概念
信源熵的计算
桂林电子科技大学数学与计算科学学院实验报告 实验室: 实验日期: 2010年 11月 11日院(系) 数学与计算科学学院 年级、专业、班 0800710310 姓名 何帅 成绩课程名称 信息与编码 实验项目名 称 信源熵的计算 指导教师一 实验目的1、掌握香农编码的原理2、掌握二进制小数的输出方法二 实验内容与步骤Shannon 码编码步骤为:1、将信源S 的所有符号按概率从大到小排列:12q P P P ≥≥≥ 2、对第i 个信源符号i s 取整数码长[]1log 1,i i l P ⎡⎤=+⎢⎥⎣⎦为取整运算 3、计算累加概率111,0,(2)i i i k k R R R P i -===≥∑ 4、将i R 变换成二进制数12j i j j R x ∞-==∑,并按步骤2中计算的长度i l 取i R 的二进制系数j x ,组合起来即为i s的香农码字i W 程序:#include<stdio.h>#include<iostream.h>#include<math.h>double P[6]={0.25,0.1,0.2,0.25,0.15,0.05},Pax[6],machang[6];void main(){double temp;for(int a=1;a<6;a++){for(int i=0;i<6-a;i++)if(P[i]<P[i+1]){temp=P[i];P[i]=P[i+1];P[i+1]=temp;}}for(int i=0;i<6;i++)cout<<P[i]<<" ";cout<<endl;for(i=0;i<6;i++){Pax[0]=0.0;Pax[i+1]=Pax[i]+P[i];}cout<<"概率累加和为:"<<endl;for(i=0;i<6;i++)cout<<Pax[i]<<" ";cout<<endl;for(i=0;i<6;i++){double m=log(1/P[i]/log(2));if(m-int(m)==0)machang[i]=log(1/P[i])/log(2);elsemachang[i]=int(m)+1;cout<<P[i]<<"的码长为:"<<machang[i]<<endl;}for(i=0;i<6;i++){for(int j=0;j<machang[i];j++){int n=int(Pax[i]*2);cout<<n;if((Pax[i]*2-1)>0){Pax[i]=Pax[i]*2-1;continue;}if((Pax[i]*2-1)==0)Pax[i]=Pax[i]*2-1;elsePax[i]=Pax[i]*2;}cout<<endl;}}运行结果:三实验体会心得通过本次实验学习了求香农编码的基本步骤,同时学习了如何在C++下实现,在编程中主要是注意求二进制数是通过乘2取整得到的。
信息论与编码实验报告
实验一:计算离散信源的熵一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。
3、将程序在计算机上仿真实现,验证程序的正确性并完成习题。
四、求解:1、习题:A 地天气预报构成的信源空间为:()⎥⎦⎤⎢⎣⎡=⎥⎦⎤⎢⎣⎡6/14/14/13/1x p X 大雨小雨多云晴 B 地信源空间为:17(),88Y p y ⎡⎤⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦⎣⎦ 小雨晴 求各种天气的自信息量和此两个信源的熵。
2、程序代码:p1=[1/3,1/4,1/4,1/6];p2=[7/8,1/8];H1=0.0;H2=0.0;I=[];J=[];for i=1:4H1=H1+p1(i)*log2(1/p1(i));I(i)=log2(1/p1(i));enddisp('自信息I分别为:');Idisp('信息熵H1为:');H1for j=1:2H2=H2+p2(j)*log2(1/p2(j));J(j)=log2(1/p2(j));enddisp('自信息J分别为');Jdisp('信息熵H2为:');H23、运行结果:自信息量I分别为:I = 1.5850 2.0000 2.0000 2.5850信源熵H1为:H1 = 1.9591自信息量J分别为:J =0.1926 3.0000信源熵H2为:H2 =0.54364、分析:答案是:I =1.5850 2.0000 2.0000 2.5850 J =0.1926 3.0000H1 =1.9591; H2 =0.5436实验2:信道容量一、实验设备:1、计算机2、软件:Matlab二、实验目的:1、熟悉离散信源的特点;2、学习仿真离散信源的方法3、学习离散信源平均信息量的计算方法4、熟悉 Matlab 编程;三、实验内容:1、写出计算自信息量的Matlab 程序2、写出计算离散信源平均信息量的Matlab 程序。
信源熵公式
信源熵公式
信源熵是信息论中的一个重要概念,它是用来度量消息的丰富性和
复杂性的一种度量方法。
它的概念源于 Shannon 在 1948 年出版的文章Information Theory。
一、信源熵是什么
信源熵(即 Shannon 熵)是指数据量的复杂性程度的度量,即信息量
在消息中不确定性的度量。
它可以帮助我们测量消息中内容丰富程度,以及消息是否具有冗余性。
通俗来说,信源熵是一种度量消息中有多
少信息和无规律性的度量方法。
二、信源熵的计算公式
信源熵的计算公式是: H(p) = -∑p(i)logp(i) 。
其中,H(p)是具有信息量
p的信息源的熵,p(i)是每一种信息量的概率。
它很好地反映了消息的复杂性,但它不能用来衡量消息的可靠性,因
此不能按照 Shannon 熵来评估消息的独特性。
三、信源熵的应用
信源熵有很多应用,最重要的是在信号处理、声音分析、密码学、数
据库设计和模式分析等领域有广泛的应用。
例如在压缩文件时,可以
使用信源熵来确定哪些数据需要进行压缩处理,从而减小数据的量。
另外,信源熵也可以用来度量信号的复杂性,比如机器学习算法中的模型复杂度因子,可以使用信源熵来衡量模型的复杂度。
四、总结
信源熵是由 Shannon 在 1948 年提出的一种度量方法,它可以度量消息的复杂性和冗余性,可以帮助我们评估消息的信息量。
它被广泛应用于信号处理、声音分析、密码学、数据库设计和模式分析等领域,可以用来度量信号的复杂性,以及机器学习算法中的模型复杂度因子。
信息论实验信息熵函数的计算
H_X=0;
for(i=0;i<m;i++)
H_X=H_X-P_X[i]*log2(P_X[i]);
printf("\n\n信息熵H(X)=%f",H_X);//信息熵H(X)
//条件熵H(X|Y)
H_X_Y=0;
for(j=0;j<n;j++)//求P(Y)
{P_Y[j]=0;
for(i=0;i<m;i++)
{P_Y_X=matrix[i][j];
P_XY=P_Y_X*P_X[i];
P_Y[j]=P_Y[j]+P_XY;}
}
for(i=0;i<m;i++)//求H(X|Y)
{for(j=0;j<n;j++)
{P_Y_X=matrix[i][j];
P_XY=P_Y_X*P_X[i];
P_X_Y=P_XY/P_Y[j];
三.实验方案或步骤(程序设计说明)
实验选用C语言编程,用一维数组存储信源分布数据,二维数组存储信道转移概率矩阵。利用循环(嵌套)语句计算以下公式并输出需要的结果:
,
,
四.实验程序(经调试后正确的源程序)
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#define M 20//最大行数
#d顶的对数*/
float log2(float x)
{return log(x)/log(2);}//log2(x)
/*主函数*/
void main()
信息论与编码实验报告
信息论与编码实验报告一、实验目的1.了解信息论与编码的基本概念和原理。
2.学习如何通过信息论与编码方法实现对数据的压缩和传输。
3.掌握信息论与编码实验的实验方法和实验技能。
4.提高实验设计、数据分析和报告撰写的能力。
二、实验内容1.通过对输入信源进行编码,实现对数据的压缩。
2. 比较不同编码方法的压缩效果,包括Shannon-Fano编码和霍夫曼编码。
3.通过传输信道对编码后的数据进行解码,还原原始信源。
4.分析并比较不同编码方法的传输效果,包括码率和传输质量。
三、实验原理1.信息论:熵是信息论中衡量信源不确定性的指标,熵越小表示信源的可预测性越高,在编码过程中可以压缩数据。
2. 编码方法:Shannon-Fano编码通过分治的方法将输入信源划分为不同的子集,分别进行编码;霍夫曼编码则通过构建最佳二叉树的方式,将较常出现的信源符号编码为较短的二进制码,较少出现的信源符号编码为较长的二进制码。
3.传输信道:信道可能存在误码和噪声,通过差错控制编码可以在一定程度上保障传输数据的正确性和完整性。
四、实验步骤1. 对给定的输入信源进行Shannon-Fano编码和霍夫曼编码。
2.计算编码后的码率,分析不同编码方法的压缩效果。
3.将编码后的数据传输到信道,模拟信道中的误码和噪声。
4.对传输后的数据进行解码,还原原始信源。
5.比较不同编码方法的传输质量,计算误码率和信噪比。
五、实验结果与分析1. 编码结果:通过对输入信源进行编码,得到了Shannon-Fano编码和霍夫曼编码的码表。
2.压缩效果:计算了不同编码方法的码率,比较了压缩效果。
3.传输结果:模拟信道传输后的数据,对数据进行解码,还原原始信源。
4.传输质量:计算了误码率和信噪比,分析了不同编码方法的传输质量。
六、实验总结通过本次实验,我深刻理解了信息论与编码的基本概念和原理,并掌握了信息论与编码实验的实验方法和实验技能。
在实验过程中,我遇到了一些困难,比如对编码方法的理解和实验数据的处理。
信息论实验报告(实验一、信源与信息熵的计算)
学生实验报告
院别电子信息学院课程名称信息论语编码实验
班级实验名称实验一、信源与信息熵的计算姓名实验时间
学号指导教师
成绩
报告内容
一、实验目的和任务
1、理解自信息、互信息、熵等概念;
2、熟悉 MATLAB程序设计;
3、掌握通过计算机实验计算离散信源的信息量及熵的计算方法;
4、对给定信源分别计算出信源熵、条件熵、联合熵、交互熵;
二、实验原理介绍
三、实验设备介绍
1、计算机
2、编程软件MATLAB6.5以上
四、实验内容和步骤
H X H Y H X Y H Y X H XY I X Y 分别求出如下图所示离散信道的(),(),(|),(|),(),(;)
1、面出程序设计的流程图。
2、写出在调试过程中出现的问题。
3、对实验的结果进行分析。
五、实验数据记录
六、实验结论与心得
通过本次实验,加强了对matlab程序的学习,进一步提高了我的编程能力。
信息论实验信息熵函数的计算
信息论实验信息熵函数的计算信息熵是信息论中的一个重要概念,用于度量信息的不确定性或者随机性。
它可以描述信息源的平均信息量,也可以用于衡量编码的效率。
本文将介绍信息熵的计算方法,并通过实例来说明如何计算信息熵。
首先,我们需要了解如何计算一个离散概率分布的信息熵。
对于一个离散概率分布,它可以由一个概率密度函数来描述,其中每个事件的概率都是非负的,并且所有事件的概率之和为1、令p(x)表示事件x的概率,则该分布的信息熵H(X)可以通过以下公式计算:H(X) = -∑ [p(x) * log₂(p(x))]其中,∑表示对所有事件求和。
log₂表示以2为底的对数函数。
该公式的物理意义是,对于每个事件x,我们将其概率p(x)与以2为底的对数计算结果相乘,并将所有结果相加,得到的值即为信息熵。
为了更好地理解信息熵的计算过程,我们可以通过一个实例来进行展示。
假设有一个硬币的抛掷实验,在该实验中,正面向上和反面向上的概率分别为p(正)=1/2和p(反)=1/2、则该实验的信息熵可以使用以下公式进行计算:H(硬币实验) = -[1/2 * log₂(1/2) + 1/2 * log₂(1/2)]首先,我们需要计算log₂(1/2)的值。
根据对数的定义,我们可以将此式化简为:H(硬币实验)=-[1/2*(-1)+1/2*(-1)]=-(-1/2+1/2)=-0正如我们所期望的,在这个实验中,硬币是确定性的,即每次抛掷都会出现正面或反面。
因此,硬币实验的信息熵为0,意味着在该实验中我们不需要任何信息来描述结果。
接下来,我们来计算一个更复杂的实例,假设有一组骰子的抛掷实验,其中每个面出现的概率分别为p(1)=1/6,p(2)=1/6,p(3)=1/6,p(4)=1/6,p(5)=1/6,p(6)=1/6、我们可以使用以上公式计算该实验的信息熵:H(骰子实验) = -[1/6 * log₂(1/6) + 1/6 * log₂(1/6) + 1/6 *log₂(1/6) + 1/6 * log₂(1/6) + 1/6 * log₂(1/6) + 1/6 * log₂(1/6)]首先,我们需要计算log₂(1/6)的值。
信息论与编码实验报告
信息论与编码实验报告一、实验目的本实验旨在通过实践,使学生们对信息论与编码理论有一个更深入的理解,掌握信息论与编码的基本原理和应用方法。
二、实验环境本次实验使用MATLAB软件来实现相关编码算法。
三、实验内容1.信息熵的计算信息熵是信息理论中的一个重要概念,用来度量一些信息源的不确定性。
在实验中,我们将计算给定的一组消息的信息熵。
首先,我们将给定的消息编码为二进制序列。
然后,我们根据信息熵的定义,使用公式计算信息熵:H(X) = -Σ(p(x) * log2(p(x)))其中,H(X)表示信息熵,p(x)表示消息x发生的概率。
2.香农编码的实现香农编码是一种无失真的编码方法,用于将离散的符号序列编码为二进制码字。
在实验中,我们将实现香农编码算法。
首先,我们需要计算给定符号序列中各个符号的概率。
然后,根据概率大小,将概率最高的符号分配最短的二进制码字,将概率较低的符号分配较长的二进制码字。
实现香农编码算法后,我们将计算编码后的码字的平均码长,并与信息熵进行比较,了解香农编码的效率。
3.赫夫曼编码的实现赫夫曼编码是一种常用的无失真编码方法,也被广泛应用于数据压缩中。
在实验中,我们将实现赫夫曼编码算法。
首先,我们需要计算给定符号序列中各个符号的概率。
然后,根据概率大小,使用最小堆数据结构构建赫夫曼树。
最后,根据赫夫曼树的性质,将每个符号的编码确定下来。
实现赫夫曼编码算法后,我们将计算编码后的码字的平均码长,并与信息熵进行比较,了解赫夫曼编码的效率。
四、实验结果与分析1.实验一结果我们选取了一个包含1000个等概率的二进制消息的序列进行实验。
通过计算,我们得到了该消息序列的信息熵为12.实验二结果我们选取了一个包含1000个符号的序列进行实验。
通过计算,我们得到了编码后的平均码长为2.8、与信息熵的比较发现,香农编码的效率很高。
3.实验三结果我们选取了一个包含1000个符号的序列进行实验。
通过计算,我们得到了编码后的平均码长为2.6、与信息熵的比较发现,赫夫曼编码的效率也很高。
关于信源熵的实验报告
实验报告实验名称关于信源熵的实验课程名称信息论与编码姓名xxx 成绩90班级电子信息1102学号0909112204日期2013.11.22地点综合实验楼实验一MATLAB完成离散信源熵的计算一、实验目的1. 通过信息论与编码学理论,掌握离散信源熵的原理和计算方法。
2. 熟悉matlab 软件的基本操作和基本工具以及使用,掌握利用matlab求解信息熵的原理和方法。
3. 练习使用matlab 求解信源的信息熵。
自学图像熵的相关概念,并应用所学知识,使用matlab 或其他开发工具求解图像熵。
4. 掌握Excel的绘图功能,使用Excel绘制散点图、直方图。
二、实验原理1.离散信源的基本概念、原理和信源熵相关计算公式产生离散信息的信源称为离散信源。
离散信源只能产生有限种符号,因此离散离散消息可以看成是一种有限个状态的随机序列。
随机事件的自信息量I(xi)为其对应的随机变量xi 出现概率对数的负值。
即: I (xi )= -log2p ( xi)随机事件X 的平均不确定度(信源熵)H(X)为离散随机变量 xi 出现概率的数学期望,即:2.离散二元信源的信息熵设信源符号集X={0,1} ,每个符号发生的概率分别为p(0)= p,p(1)= q,p+ q =1,即信源的概率空间为:则该二元信源的信源熵为:H(X) = - p*logp–q*logq = - p*logp –(1 - p)*log(1- p)即:H (p) = - p*logp –(1 - p)*log(1- p) 其中 0 ≤ p ≤13.MATLAB二维绘图用matlab 中的命令plot( x , y) 就可以自动绘制出二维图来。
例:在matlab 上绘制余弦曲线图,y = cos x ,其中 0 ≤ x ≤ 2 。
>>x =0:0.1:2*pi; %生成横坐标向量,使其为 0,0.1,0.2,…,6.2>>y =cos(x ); %计算余弦向量>>plot(x ,y ) %绘制图形4.MATLAB求解离散信源熵求解信息熵过程:1) 输入一个离散信源,并检查该信源是否是完备集。
信息论编码实验一熵的计算
实验一 熵的计算一、 实验目的通过本次实验的练习,使学生进一步巩固熵的基本概念,掌握熵的统计方法,培养学生使用编程工具进行分析计算的基本能力。
二、 实验仪器与软件1. PC 机1台2. MATLAB7.0环境三、实验原理1. 信息熵的基本原理离散信源数学模型如下(设该信源可能取的符号有n 个):⎭⎬⎫⎩⎨⎧=⎥⎦⎤⎢⎣⎡)(,),(,),(),( ,, , , , )( 2121n i n i a p a p a p a p a a a a X P X则该信源的信息熵为:)(log )()(21i ni i x p x p X H ∑==H(X)是信源X 中每个事件出现的平均信息量,或者说H(X)表示了信源X 中各符号出现的平均不确定性。
● 图像的信息熵:设数字图像的灰度级集合为{r 1,r 2,…,r m },其对应的概率分别为p (r 1),p (r 2),…,p (r m ),则图像的信息熵可以定义为:图像的信息熵表示像素各个灰度级位数的统计平均值,它给出了对此输入灰度级集合进行无失真图像编码时所需要的平均位数的下限。
2. 图像文件的读取● 函数imread () MATLAB 通过函数imread 完成图像的读取,该函数语法格式如下:I = imread(filename,fmt)用于读取由filename 指定的图像数据到数组A 中,参数fmt 对应于所有图像处理工具所支持的图像文件格式。
如I=imread ('rice.tif');● 函数imhist () 显示图像的直方图 用法: imhist(I,n) 计算和显示图像I 的直方图,n 为指定的灰度级数目,默认为256。
如果I 是二值图像,那么n 仅有两个值。
[counts,x] = imhist(I) 返回直方图数据向量counts 或相应的色彩值向量x 。
● 函数size(a) 表示矩阵a 每个维度的长度 如size([1 2 3;4 5 6]),返回[2 3],表示该矩阵有2行3列 ● find ()寻找非零元素下标 如:x = [11 0 33 0 55]; find(x) ans = 1 3 5 find(x == 0)ans = 2 4 ● 相关函数 点运算 在MATLAB 中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
信息论与编码4----信源及信源熵3
起始 状态 00 01 10 11
终 (00) 1/2 0 1/4 0
止 状 态 (01) (10) (11) 1/2 0 0 0 1/3 2/3 3/4 0 0 0 1/5 4/5
信息论与编码-信源及信源熵
求出的状态转移表如表2所示.方法是:比如在状 态01时,出现符号0,则将0加到状态01后,再 将第一位符号0挤出,转移到状态10,概率为 1/3.依此类推. 状态转移图如下图所示:
信息论与编码-信源及信源熵
p ( S k = s j ) = ∑ p ( S k = s j , S 0 = si )
i
= ∑ p ( S 0 = si ) p ( S k = s j / S 0 = si )
i ( = ∑ p 0 i pijk ) i
信息论与编码-信源及信源熵
( ) lim pijk: k →∞ 两个问题:(1)此极限是否存在;(2)如果存在,其 值是多少. (1)存在问题:p23 (2)求法:如果存在,且等于一个与起始状态 i 无关的 被称为平稳分布的 W j = p( S k = s j ) ,则不论起始状态是什 么,此马氏链可以达到最后的稳定,即所有状态的概 率分布均不变.在这种情况下,就可以用(P)这一矩 阵来充分描述稳定的马氏链,起始状态只使前面有限 个变量的分布改变,如同电路中的暂态一样.
信息论与编码-信源及信源熵
上节课复习 信源序列熵(续) 冗余度
信息论与编码-信源及信源熵
上一讲复习 I 互信息量: ( X;Y) = H( X ) H( X / Y) 互信息量与信源熵的关系:
信息论与编码-信源及信源熵
连续信源熵:h ( X ) = ∫R p ( x ) log p ( x ) dx 它与离散信源熵的差别(差熵) 最大熵:(1)限幅度时的最大熵 (2)限平均功率时的最大熵 序列信源熵: (1)离散无记忆信源序列熵:
信息论与编码实验报告
信息论与编码实验报告信息论与编码实验报告一、引言信息论与编码是现代通信领域中的重要理论基础,通过对信息的量化和编码方式的设计,可以提高通信系统的传输效率和可靠性。
本实验旨在通过对信息论与编码的实际应用进行探索,加深对相关理论的理解和掌握。
二、实验目的1. 了解信息论与编码的基本概念和原理;2. 学习使用信息论与编码的工具和方法;3. 进行实际的编码实验,验证理论的有效性。
三、实验内容1. 信息熵的计算信息熵是信息论中的重要概念,用于衡量信息的不确定性。
我们选择一个简单的例子来计算信息熵,假设有一个硬币,正反面出现的概率分别为0.5。
根据信息熵的公式,我们可以计算出该硬币的信息熵为1比特。
2. 信道容量的计算信道容量是指在给定信道带宽和信噪比条件下,信道能够传输的最大数据率。
我们选择一个高斯信道作为实验对象,通过改变信噪比来计算信道容量。
实验结果显示,信噪比越高,信道容量越大。
3. 奇偶校验码的设计与实现奇偶校验码是一种简单的错误检测码,可以用于检测数据传输过程中的错误。
我们设计了一个简单的奇偶校验码方案,并通过编程实现了该方案。
实验结果表明,奇偶校验码能够有效地检测出数据传输中的错误。
4. 哈夫曼编码的设计与实现哈夫曼编码是一种有效的数据压缩算法,通过对出现频率较高的字符进行短编码,可以实现数据的高效传输和存储。
我们选择一段文本作为实验对象,通过统计字符出现频率并设计相应的哈夫曼编码表,成功地对文本进行了压缩。
四、实验结果与分析通过实验,我们成功地计算了信息熵和信道容量,并验证了理论的准确性。
在奇偶校验码的实验中,我们发现该码能够有效地检测出单比特错误,但对于多比特错误的检测能力有限。
在哈夫曼编码的实验中,我们成功地对文本进行了压缩,并获得了较高的压缩比。
五、实验总结通过本次实验,我们深入了解了信息论与编码的基本概念和原理,并通过实际操作加深了对相关理论的理解。
实验结果表明,信息论与编码在通信系统中具有重要的应用价值,能够提高通信效率和可靠性。
信息与编码实验一-信息熵的计算
void PrintStati(int arr[],int size);
int Stati(const char * arr[]);
float EntropCompute(int arr[],int sum,int arrSize);
if(p){
printf("fail to open file");
return 0;
}
while(1){
c=fgetc(pFile);
if(c==EOF){
break;
}
if(c>='a'&&c<='z'){
arr[c-'a']++;
sum++;
}else if(c>='A'&&c<='z'){
arr[_ALAPHA_NUMBER+c-'A']++;
printf("%c:%d ",i+'a',arr[i]);
}
else{
printf("%c:%d ",i+'A'-_ALAPHA_NUMBER,arr[i]);
}
i++;
}
}
int Stati(const char * arr[]){
FILE *p;
char c;
int sum=0;
p(,"rb");
哈夫曼编码信源熵的计算方法
哈夫曼编码信源熵的计算方法哈夫曼编码是一种基于信息熵的编码方法,用于将数据压缩成更小的形式。
在哈夫曼编码中,信息熵是通过计算信源的信息量来确定的。
具体来说,对于给定的信源,需要计算其中每个字符出现的概率,然后将这些概率相乘并取绝对值的和,以此作为信源的信息熵。
计算信源的信息熵时,需要考虑到字符之间的相互独立性。
具体来说,如果两个字符之间是独立的,那么它们出现的概率之和等于它们单独出现的概率之和。
因此,在计算信源的信息熵时,需要考虑到所有可能的字符组合,而不是只考虑单个字符。
以一个二进制信源为例,其中每个字符只有两种状态,即“0”和“1”。
假设该信源中“0”的概率为 0.5,“1”的概率为 0.5。
那么,该信源的信息熵为: H(X) = -0.5 * log2(0.5) - 0.5 * log2(0.5) = 0.5 * log2(2) = 0.5 * 1 = 0.5在这个例子中,信源中每个字符的概率都是 0.5,因此字符之间的相互独立性为 0。
因此,需要将每个字符出现的概率相乘并取绝对值的和,以此作为信源的信息熵。
在实际应用中,哈夫曼编码的实现过程可以分为两个步骤:1. 构建哈夫曼树:将信源中的所有字符按照出现频率从高到低排序,然后将它们分别放入哈夫曼树的不同的分支中。
每个字符都对应着哈夫曼树中的一个节点,节点的度数代表着该字符出现的频率。
2. 编码:对于每个字符,将其对应的哈夫曼树中的节点编号作为编码,并将其存储在输出文件中。
在哈夫曼编码中,每个字符都有唯一的编码,而且编码是唯一的。
这是因为哈夫曼编码是基于字符之间的相互独立性构建的,因此每个字符的编码都是唯一的,并且编码的长度越短,表示该字符的频率越高。
哈夫曼编码的实现过程中,通常需要用到递归算法。
具体来说,递归算法可以分为两个步骤:1. 构建哈夫曼树:将当前字符和它出现的频率作为参数,调用哈夫曼编码算法中的递归函数,将当前字符的所有可能编码都计算出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
课程名称:信息论与编码姓名:
系:
专业:
年级:
学号:
指导教师:
职称:
年月日
实验一 信源熵值的计算
一、 实验目的
1 进一步熟悉信源熵值的计算
2熟悉 Matlab 编程
二、实验原理
熵(平均自信息)的计算公式
∑∑=--==q i i i q
i i i p p p p x H 1212log 1log )( MATLAB 实现:))(log *.(2x x sum HX -=;或者))((log *)(2i x i x h h -=
流程:第一步:打开一个名为“nan311”的TXT 文档,读入一篇英文文章存入一个数组temp ,为了程序准确性将所读内容转存到另一个数组S ,计算该数组中每个字母与空格的出现次数(遇到小写字母都将其转化为大写字母进行计数),每出现一次该字符的计数器+1;
第二步:计算信源总大小计算出每个字母和空格出现的概率;
最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat )。
程序流程图:
三、实验内容
1、写出计算自信息量的Matlab 程序
2、已知:信源符号为英文字母(不区分大小写)和空格。
输入:一篇英文的信源文档。
输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。
四、实验环境
Microsoft Windows 7
Matlab 6.5
五、编码程序
#include"stdio.h"
#include <math.h>
#include <string.h>
#define N 1000
int main(void)
{
char s[N];
int i,n=0;
float num[27]={0};
double result=0,p[27]={0};
FILE *f;
char *temp=new char[485];
f=fopen("nan311.txt","r");
while (!feof(f)) {
fread(temp,1, 486, f);}
fclose(f);
s[0]=*temp;
for(i=0;i<strlen(temp);i++)
{
s[i]=temp[i];
}
for(i=0;i<strlen(s);i++)
{
if(s[i]==' ')
num[26]++;
else if(s[i]>='a'&&s[i]<='z')
num[s[i]-97]++;
else if(s[i]>='A'&&s[i]<='Z')
num[s[i]-65]++;
}
printf("文档中各个字母出现的频率:\n");
for(i=0;i<26;i++)
{
p[i]=num[i]/strlen(s);
printf("%3c:%f\t",i+65,p[i]);
n++;
if(n==3)
{
printf("\n");
n=0;
}
}
p[26]=num[26]/strlen(s);
printf("空格:%f\t",p[26]);
printf("\n");
for(i=0;i<27;i++)
{
if (p[i]!=0)
result=result+p[i]*log(p[i]);
}
result=-result;
printf("信息熵为:%f",result);
printf("\n");
return 0;
}
六、求解结果
其中nan311.txt中的文档如下:
There is no hate without fear. Hate is crystallized fear, fear’s dividend, fear objectivized. We hate what we fear and so where hate is, fear is lurking. Thus we hate
what threatens our person, our vanity and our dreams and plans for ourselves. If we can isolate this element in what we hate we may be able to cease from hating.
七、实验总结
通过这次实验,我们懂得了不必运行程序时重新输入文档就可以对文档进行统计,既节省了时间而且也规避了一些输入错误。
在实验中,我们进一步了解到信源熵的计算,理论和实践的结合让我们对这个知识点了解的更加深刻了。