信息论实验报告
信息论实验报告
![信息论实验报告](https://img.taocdn.com/s3/m/29fc87e75ef7ba0d4a733b72.png)
信息论实验报告班级:姓名:学号:实验一:信道容量的迭代算法1.实验目的(1)进一步熟悉信道容量的迭代算法;(2)学习如何将复杂的公式转化为程序;(3)掌握C 语言数值计算程序的设计和调试技术。
2、实验要求(1)已知:信源符号个数r 、信宿符号个数s 、信道转移概率矩阵P 。
(2)输入:任意的一个信道转移概率矩阵。
信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。
(3)输出:最佳信源分布P*,信道容量C 。
3.算法分析1:procedure CHANNEL CAPACITY(r,s,(ji p )) 2:initialize:信源分布i p =1/r ,相对误差门限σ,C=—∞3:repeat4:5:6: C 2211log [exp(log )]r s ji ij r j p φ==∑∑7:until C Cσ∆≤8:output P*= ()i r p ,C9:end procedure4.程序调试21211exp(log )exp(log )sji ij j r s ji ij r j p p φφ===∑∑∑i p 1i ji r i ji i p p p p =∑ijφ1、头文件引入出错f:\visualc++\channel\cpp1.cpp(4) : fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory————#include<unistd.h>纠错://#include<unistd.h>f:\visualc++\channel\cpp1.cpp(5) : fatal error C1083: Cannot open include file: 'values.h': No such file or directory————#include<values.h>纠错://#include<values.h>2、变量赋值错误f:\visualc++\channel\cpp1.cpp(17) : error C2065: 'ij' : undeclared identifierf:\visualc++\channel\cpp1.cpp(17) : error C2440: 'initializing' : cannot convert from 'int' to 'float ** ' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast————float **phi_ij=ij=NULL;纠错:float **phi_ij=NULL;3、常量定义错误f:\visualc++\channel\cpp1.cpp(40) : error C2143: syntax error : missing ';' before 'for' ————for(i=0;i<r;i++)phi_ij[i]=(float *)calloc(s,sizeof(float));f:\visualc++\channel\cpp1.cpp(52) : error C2021: expected exponent value, not ' '————if(fabs(validate -1.0)>DELTA)f:\visualc++\channel\Cpp1.cpp(84) : error C2021: expected exponent value, not ' '————if(fabs(p_j)>=DELTA)f:\visualc++\channel\Cpp1.cpp(100) : error C2021: expected exponent value, not ' '————if(fabs(phi_ij[i][j])>=DELTA)f:\visualc++\channel\Cpp1.cpp(116) : error C2021: expected exponent value, not ' ' ————while(fabs(C-C_pre)/C>DELTA);纠错:#define DELTA 0.000001;F:\visualc++\channel\Cpp1.cpp(68) : error C2065: 'MAXFLOAT' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(68) : warning C4244: '=' : conversion from 'int' to 'float', possible loss of data————C=-MAXFLOAT;纠错:#define MAXFLOAT 1000000;3、引用中文逗号f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1'f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1'f:\visualc++\channel\cpp1.cpp(60) : error C2065: 'Starting' : undeclared identifierf:\visualc++\channel\cpp1.cpp(60) : error C2059: syntax error : '.'f:\visualc++\channel\cpp1.cpp(60) : error C2017: illegal escape sequencef:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xa1'f:\visualc++\channel\cpp1.cpp(60) : error C2018: unknown character '0xb1'————fprintf(stdout,”Starting..\n”);纠错:fprintf(stdout,"Starting..\n");4、没有进行强制转换F:\visualc++\channel\Cpp1.cpp(65) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————p_i[i]=1.0/(float)r;纠错:p_i[i]=(float)(1.0/(float)r);F:\visualc++\channel\Cpp1.cpp(101) : warning C4244: '+=' : conversion from 'double' to 'float', possible loss of data————sum[i]+=p_ji[i][j]*log( phi_ij[i][j])/ log(2.0);纠错:sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0));F:\visualc++\channel\Cpp1.cpp(103) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————sum[i]=pow(2.0,sum[i]);纠错:sum[i]=(float)(pow(2.0,sum[i]));F:\visualc++\channel\Cpp1.cpp(114) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data————C= log(p_j)/ log(2.0);纠错:C= (float)(log(p_j)/ log(2.0));4、表达式错误F:\visualc++\channel\Cpp1.cpp(86) : error C2065: 'phi_ji' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer typeF:\visualc++\channel\Cpp1.cpp(86) : error C2109: subscript requires array or pointer type ————phi_ij[i][j]=p_i[i]* phi_ji[i][j]/p_j;纠错:phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'fprint' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'F:\visualc++\channel\Cpp1.cpp(122) : error C2065: 'The' : undeclared identifierF:\visualc++\channel\Cpp1.cpp(122) : error C2146: syntax error : missing ')' before identifier 'iteration'F:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2017: illegal escape sequenceF:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xa1'F:\visualc++\channel\Cpp1.cpp(122) : error C2018: unknown character '0xb1'————fprint(stdout,”The iteration number is %d.\n\n”,k);纠错:fprintf(stdout,"The iteration number is %d.\n\n",k);F:\visualc++\channel\Cpp1.cpp(145) : error C2143: syntax error : missing ')' before ';' ————free((p_i);纠错:free(p_i);5、没有返回值F:\visualc++\channel\Cpp1.cpp(149) : warning C4508: 'main' : function should return a value; 'void' return type assumed、纠错:return 0;5.改进程序/*引入头文件*/#include<stdio.h>#include<math.h>#include<stdlib.h>/*定义常量*/#define DELTA 0.0000001//DELTA为相对误差门限#define MAXFLOAT 1000000;//MAXFLOAT为初始化信道容量值int main( void){/*定义全局变量*//*register允许直接从寄存器中读取变量,提高速率*/register int i,j;//i、j为整型变量register int k;//信道容量迭代计算次数int r,s;//r为信源符号个数,s为新宿符号个数float *p_i=NULL;//r个信源符号发生的概率float **p_ji=NULL;//信源到新宿的信道转移概率矩阵Pfloat **phi_ij=NULL;float C,C_pre,validate;//C为信道容量,C_pre为信道最大容量,validate为判定输入转移概率矩阵是否合法float * sum=NULL;//信源符号所带的全部信息量float p_j;//条件概率/*输入信源符号和新宿符号个数*/printf("请输入信源符号个数r、信宿符号个数s...\n");printf("+++++注意!!!r必须大于等于s!!+++++\n");fscanf(stdin,"%d",&r);fscanf(stdin,"%d",&s);/*为 p_i,p_ji 和 phi_ij 分配内存空间*/p_i=(float *)calloc(r,sizeof(float));p_ji=(float **)calloc(r,sizeof(float));/*为每个p_ji分配大小为s的内存空间*/for(i=0;i<r;i++)p_ji[i]=(float *)calloc(s,sizeof(float));phi_ij=(float **)calloc(r,sizeof(float*));/*输入转移概率矩阵*/for(i=0;i<r;i++)/*为每个phi_ij分配大小为s的内存空间*/phi_ij[i]=(float *)calloc(s,sizeof(float));printf("信道转移概率矩阵P...\n");for(i=0;i<r;i++)for(j=0;j<s;j++)fscanf(stdin,"%f",&p_ji[i][j]);/*判定输入的转移概率矩阵是否正确*/for(i=0;i<r;i++){validate=0.0;for(j=0;j<s;j++){validate +=p_ji[i][j];}if((validate-1.0)>=0)//如果转移概率矩阵的概率和大于1,输入数据不合法{fprintf(stdout,"invalid input data.\n");exit(-1);}}/*显示开始计算..*/fprintf(stdout,"Starting..\n");/*初始化 p_i 和 phi_ij*/for(i=0;i<r;i++){/* p_i为等概率,即概率为1/r*/p_i[i]=(float)(1.0/(float)r);}/*初始化信道容量c,迭代次数k和临时变量variable*/C=-MAXFLOAT;k=0;/* 为sum分配大小为r的内存空间*/sum=(float *)calloc(r,sizeof(float));/*开始迭代计算*/do{k++;//每进行一次迭代,迭代次数k加1/* 计算phi_ij(k)*/for(j=0;j<s;j++){p_j=0.0;for(i=0;i<r;i++)p_j+=p_i[i]*p_ji[i][j];if(fabs(p_j)>=DELTA)for(i=0;i<r;i++)phi_ij[i][j]=p_i[i]* p_ji[i][j]/p_j;elsefor(i=0;i<r;i++)phi_ij[i][j]=0.0;}/*计算p_i(k+1)*/p_j=0.0;for(i=0;i<r;i++){sum[i]=0.0;for(j=0;j<s;j++){/*相对误差门限为0*/if(fabs(phi_ij[i][j])>=DELTA)sum[i]+=(float)(p_ji[i][j]*log( phi_ij[i][j])/ log(2.0)); }sum[i]=(float)(pow(2.0,sum[i]));p_j+=sum[i];}for(i=0;i<r;i++){p_i[i]=sum[i]/p_j;}C_pre=C;C= (float)(log(2.0)/log(p_j) );}while(fabs(C-C_pre)/C>DELTA);free(sum);sum=NULL;/*显示结果*/fprintf(stdout,"The iteration number is %d.\n\n",k);//迭代次数fprintf(stdout,"The capacity of the channel is %.6f bit/symbol:\n\n",C);//信道容量fprintf(stdout,"The best input probability distribution is :\n");//最佳信源分布 for(i=0;i<r;i++)fprintf(stdout,"%.6f\n",p_i[i]);fprintf(stdout,"\n");/* 释放指针空间*/for(i=s-1;i>=0;i--){free(phi_ij[i]);phi_ij[i]=NULL;}free(phi_ij);phi_ij=NULL;for(i=r-1;i>=0;i--){free(p_ji[i]);p_ji[i]=NULL;}free(p_ji);p_ji=NULL;free(p_i);p_i=NULL;exit(0);return 0;}6.实验结果6.实验二:唯一可译码判决准则1.实验目的(1)进一步熟悉唯一可译码判决准则;(2)掌握C语言字符串处理程序的设计和调试技术。
信息论课程实验报告—哈夫曼编码
![信息论课程实验报告—哈夫曼编码](https://img.taocdn.com/s3/m/8003273c376baf1ffc4fadd1.png)
*p2 = j;
}
}
void CreateHuffmanTree(HuffmanTree T)
{
int i,p1,p2;
InitHuffmanTree(T);
InputWeight(T);
for(i = n;i < m;i++)
4)依次继续下去,直至信源最后只剩下两个信源符号为止,将这最后两个信源符号分别用二元码符号“0”和“1”表示;
5)然后从最后—级缩减信源开始,进行回溯,就得到各信源符号所对应的码符号序列,即相应的码字。
四、实验目的:
(1)进一步熟悉Huffman编码过程;(2)掌握C语言递归程序的设计和调试技术。以巩固课堂所学编码理论的知识。
#include "stdio.h"
#include "stdlib.h"
#include <float.h>
#include <math.h>
#define n 8
#define m 2*n-1
typedef struct
{
float weight;
int lchild,rchild,parent;
}
}
void InputWeight(HuffmanTree T)
{
float temp[n] = {0.20,0.18,0.17,0.15,0.15,0.05,0.05,0.05};
for(int i = 0;i < n;i++)
T[i].weight = temp[i];
}
信息论上机实验报告
![信息论上机实验报告](https://img.taocdn.com/s3/m/28e643721711cc7931b716fe.png)
信息论与编码实验报告实验一:计算离散信源的熵一、实验设备: 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 随信源分布ω的关系曲线,并求出最大平均互信息。
信息导论实验报告总结(3篇)
![信息导论实验报告总结(3篇)](https://img.taocdn.com/s3/m/50ec13c2294ac850ad02de80d4d8d15abe2300df.png)
第1篇一、实验背景随着信息技术的飞速发展,信息已成为现代社会的重要资源。
为了让学生更好地了解信息的基本概念、信息处理技术以及信息在各个领域的应用,我们开展了信息导论实验。
本次实验旨在通过实际操作,使学生掌握信息处理的基本方法,提高信息素养,为后续相关课程的学习打下基础。
二、实验目的1. 理解信息的基本概念,掌握信息处理的基本方法。
2. 掌握信息检索技巧,提高信息获取能力。
3. 了解信息在各个领域的应用,增强信息意识。
4. 培养学生的动手能力和团队协作精神。
三、实验内容1. 信息检索实验:通过搜索引擎、数据库等工具,查找特定主题的相关信息,并评价信息的可靠性。
2. 信息处理实验:运用文字处理软件、表格处理软件等工具,对收集到的信息进行整理、分析、加工和展示。
3. 信息安全实验:学习信息加密、数字签名等安全技术在信息传输和存储中的应用。
4. 信息可视化实验:运用图表、图形等手段,将抽象的信息转化为直观的可视化形式。
四、实验过程1. 实验准备:学生分组,明确实验任务,查阅相关资料,准备实验所需的软件和工具。
2. 实验实施:按照实验指导书的要求,完成各项实验任务。
3. 实验总结:对实验过程中遇到的问题进行分析,总结实验经验,撰写实验报告。
五、实验结果与分析1. 信息检索实验:学生通过搜索引擎、数据库等工具,成功检索到所需信息,并学会评价信息的可靠性。
2. 信息处理实验:学生运用文字处理软件、表格处理软件等工具,对收集到的信息进行整理、分析、加工和展示,提高了信息处理能力。
3. 信息安全实验:学生掌握了信息加密、数字签名等安全技术在信息传输和存储中的应用,增强了信息安全意识。
4. 信息可视化实验:学生通过图表、图形等手段,将抽象的信息转化为直观的可视化形式,提高了信息传达效果。
六、实验心得与体会1. 信息检索实验让我认识到,信息检索是获取信息的重要途径,掌握信息检索技巧对于提高信息素养至关重要。
2. 信息处理实验让我体会到,信息处理能力是信息时代必备的基本技能,通过实际操作,我学会了如何高效地处理信息。
北邮信息论实验报告
![北邮信息论实验报告](https://img.taocdn.com/s3/m/540c363c3169a4517723a36f.png)
信息论实验报告一、实验要求掷骰子游戏,每次同时抛掷两枚骰子,将两枚骰子点数的和作为游戏结果,重复抛掷1000次(视为1000次信源符号输出)。
要求:(1) 对1000次游戏结果进行逐符号二进制定长编码和译码。
(2) 对1000次游戏结果进行逐符号二进制变长编码和译码(Huffman编码)。
(3) 比较上述两种编码的效率二、实验结果(1) 对1000次游戏结果进行逐符号二进制定长编码和译码。
1、随机游戏模拟的信源的熵2、产生的随机序列3、定长码编码译码结果:由于篇幅限制,仅截取部分编码结果:观察出译码正确。
4、定长码编码效率:(2) 对1000次游戏结果进行逐符号二进制变长编码和译码(Huffman编码)。
1、随机游戏模拟的信源的熵:H(X)=3.2744 bit/符号2、Huffman编码的码字结果:3、平均码长:l=3.3056 bit4、部分序列编码、译码结果:信源序列:编码结果:译码结果:5、编码效率:(3)两者编码效率的比较:答:由MATLAB仿真实验的结果可以看出,定长码的编码效率是0.8186,而Huffman 编码的效率是0.9906,明显看出Huffman编码的效率要高。
三、实验代码(2)Huffman编码译码部分:四、实验总结本实验通过MATLAB模拟掷骰子游戏,每次同时抛掷两枚骰子,将两枚骰子点数的和作为游戏结果,重复抛掷1000次(视为1000次信源符号输出)。
然后通过定长编码译码和Huffman编码译码对信源进行处理,最后得到正确的编码译码结果,同时可以看出Huffman编码的效率比定长码高。
由此可以看出在信源各符号出现的概率差别很大时,采用Huffman编码使平均码长最短,编码效率达到最佳。
信息论实验报告香农编码
![信息论实验报告香农编码](https://img.taocdn.com/s3/m/1c3eef03a6c30c2259019e20.png)
目录实验目的: (2)实验要求: (2)程序算法: (2)程序运行结果: (4)程序操作步骤: (5)试验中遇到的困难及解决方法: (5)实验心得及体会: (5)实验目的:1.进一步熟悉使用C++编程语言及软件。
2.进一步认识shannon编码过程,并能在学习中灵活运用。
实验要求:要求:(a) 允许使用的编程语言:C、C++、Basic、Pascal、Fortran、Java、Perl、Tk/Tcl(b) 输入:信源符号个数q、信源符号s0,...,sq−1,信源概率分布p0,...,pq−1。
(c) 输出:信源符号与码字的对应关系表(编码表)。
(d) 源程序格式整齐清晰,注释简单明了。
程序算法:(a) 将q 个信源符号按其概率的递减次序排列:p(s0) > p(s1) > ... > p(sq−1)(b) 计算出各个信源符号的累加概率:(c) 按下式计算第i 个消息的二元代码组的码长li:(d) 将累加概率F(si)(十进制小数)变换成二进制小数。
根据码长li 取小数点后li 个二进制符号作为第i 个消息的码字。
程序代码:#include <iostream>#include <math.h>using namespace std;void InsertSort(double r[],char m[] ,int n)//直接插入排序算法按照概率从大到小排列符号和相应概率{for(int i=1;i<n;i++){r[n]=r[i]; //设置哨兵m[n]=m[i]; //设置哨兵for(int j=i-1;(r[n]>r[j])&&(j>=0);j--)//寻找插入位置{r[j+1]=r[j];//记录后移m[j+1]=m[j];//记录后移}r[j+1]=r[n];m[j+1]=m[n];}}void Leijia(double p[], int s)//将当前概率及之前概率相加{for(int r=1;r<s;r++)p[r]=p[r-1]+p[r];}void main(){int geshu,erjinzhi[100][100];int z=0,g=0;double gailv[100],L[100];char fuhao[100];cout<<"请输入需要编码的字符个数(小于100)"<<endl; cin>>geshu;cout<<"请按照先后顺序输入符号"<<endl;for(int i=0;i<geshu;i++)cin>>fuhao[i];cout<<"请输入各相应符号的概率"<<endl;for(int j=0;j<geshu;j++)cin>>gailv[j];InsertSort( gailv,fuhao, geshu);for(z=0;z<geshu;z++){L[z]=-log(gailv[z])/log(2);L[z]=ceil(L[z]);//向上取整求所需要的位数}Leijia( gailv, geshu);for( z=0;z<geshu;z++)//求相应的二进制编码{gailv[z]=gailv[z]-floor(gailv[z]);for( g=0;g<L[z];g++){if((gailv[z]*2)>=1){erjinzhi[z][g]=1;gailv[z]=(gailv[z]*2)-1;}else{erjinzhi[z][g]=0;gailv[z]=gailv[z]*2;}}}cout<<"各信源符号及相应码字分别为"<<endl; for(z=0;z<geshu;z++){cout<<fuhao[z]<<'\t';for( g=0;g<L[z];g++)cout<< erjinzhi[z][g];cout<<endl;}}程序运行结果:程序操作步骤:1.按照提示输入所要编码的符号个数并回车2.按顺序输入要求个数的符号并回车3.按顺序输入各符号相应的概率并回车4.即可得到各符号相应的shannon编码试验中遇到的困难及解决方法:本次试验相对而言比较简单,但由于长时间没有联系C++语言有些生疏。
信息论实验报告
![信息论实验报告](https://img.taocdn.com/s3/m/076236707275a417866fb84ae45c3b3567ecdde3.png)
一、实验目的1. 理解信息论的基本概念和原理;2. 掌握信息熵、条件熵、互信息等基本概念的计算方法;3. 学会使用 MATLAB 进行信息论实验,并分析实验结果;4. 提高编程能力和数据分析能力。
二、实验原理信息论是一门研究信息传输、处理和存储的学科,其核心是信息熵。
信息熵是衡量信息不确定性的度量,表示信息中所包含的平均信息量。
信息熵的计算公式如下:H(X) = -Σ p(x) log2(p(x))其中,H(X) 表示随机变量 X 的熵,p(x) 表示 X 取值为 x 的概率。
条件熵是衡量在已知另一个随机变量 Y 的条件下,随机变量 X 的不确定性。
条件熵的计算公式如下:H(X|Y) = -Σ p(x,y) log2(p(x|y))其中,H(X|Y) 表示在 Y 已知的条件下 X 的熵,p(x,y) 表示 X 和 Y 同时取值为x 和 y 的概率,p(x|y) 表示在 Y 已知的情况下 X 取值为 x 的条件概率。
互信息是衡量两个随机变量之间相互依赖程度的度量。
互信息的计算公式如下:I(X;Y) = H(X) - H(X|Y)其中,I(X;Y) 表示随机变量 X 和 Y 之间的互信息。
三、实验内容1. 使用 MATLAB 编写程序,计算给定信源的概率分布,并计算其熵;2. 使用 MATLAB 编写程序,计算给定两个随机变量的联合概率分布,并计算其条件熵和互信息;3. 分析实验结果,验证信息熵、条件熵和互信息之间的关系。
四、实验步骤1. 输入信源的概率分布,使用 MATLAB 计算 H(X);2. 输入两个随机变量的联合概率分布,使用 MATLAB 计算 H(X,Y)、H(X|Y) 和I(X;Y);3. 分析实验结果,比较 H(X)、H(X|Y) 和 I(X;Y) 之间的关系。
五、实验结果与分析1. 信源概率分布及其熵输入信源的概率分布为:p(x) = [0.2, 0.3, 0.5]计算得到:H(X) = -0.2 log2(0.2) - 0.3 log2(0.3) - 0.5 log2(0.5) ≈ 1.5852. 两个随机变量的联合概率分布及其条件熵和互信息输入两个随机变量的联合概率分布为:p(x,y) = [0.1, 0.2, 0.3, 0.4]计算得到:H(X,Y) = -0.1 log2(0.1) - 0.2 log2(0.2) - 0.3 log2(0.3) - 0.4log2(0.4) ≈ 2.097H(X|Y) = -0.1 log2(0.1) - 0.2 log2(0.2) - 0.3 log2(0.3) - 0.4log2(0.4) ≈ 1.585I(X;Y) = H(X) - H(X|Y) ≈ 0.512分析实验结果,可以发现:(1)信息熵 H(X) 表示信源中包含的平均信息量,当信源概率分布越均匀时,信息熵越大;(2)条件熵 H(X|Y) 表示在已知随机变量 Y 的条件下,随机变量 X 的不确定性,当 X 和 Y 之间的依赖程度越高时,条件熵越小;(3)互信息 I(X;Y) 表示随机变量 X 和 Y 之间的相互依赖程度,当 X 和 Y 之间的依赖程度越高时,互信息越大。
信息论算术编码实验报告
![信息论算术编码实验报告](https://img.taocdn.com/s3/m/ff0ad25d3b3567ec102d8a44.png)
实验三算术编码一、实验目的1.进一步学习C++语言概念和熟悉VC 编程环境。
2.学习算术编码基本流程, 学会调试算术编码程序。
3. 根据给出资料,自学自适应0 阶算术编、解码方法。
二、实验内容与原理(一)实验原理:1.算术编码基本原理这是将编码消息表示成实数0 和1 之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。
算术编码用到两个基本的参数:符号的概率和它的编码间隔。
信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。
编码过程中的间隔决定了符号压缩后的输出。
首先借助下面一个简单的例子来阐释算术编码的基本原理。
考虑某条信息中可能出现的字符仅有a b c 三种,我们要压缩保存的信息为bccb。
在没有开始压缩进程之前,假设对a b c 三者在信息中的出现概率一无所知(采用的是自适应模型),暂认为三者的出现概率相等各为1/3,将0 - 1 区间按照概率的比例分配给三个字符,即a 从0.0000 到0.3333,b 从0.3333 到0.6667,c 从0.6667 到1.0000。
进行第一个字符b编码,b 对应的区间0.3333 -0.6667。
这时由于多了字符b,三个字符的概率分布变成:Pa = 1/4,Pb = 2/4,Pc = 1/4。
按照新的概率分布比例划分0.3333 - 0.6667 这一区间,划分的结果可以用图形表示为:+-- 0.6667 Pc = 1/4 | +-- 0.5834 | | Pb = 2/4 | | | +-- 0.4167 Pa = 1/4 | +-- 0.3333 接着拿到字符c,现在要关注上一步中得到的c 的区间0.5834 -0.6667。
新添了c 以后,三个字符的概率分布变成Pa = 1/5,Pb = 2/5,Pc = 2/5。
用这个概率分布划分区间0.5834 - 0.6667:+-- 0.6667 | Pc = 2/5 | +-- 0.6334 | Pb = 2/5 || +-- 0.6001 Pa = 1/5 | +-- 0.5834 输入下一个字符c,三个字符的概率分布为:Pa = 1/6,Pb = 2/6,Pc = 3/6。
北京邮电大学信息论实验1
![北京邮电大学信息论实验1](https://img.taocdn.com/s3/m/952cc63b482fb4daa58d4b8b.png)
信息论实验·第一次实验报告题目一:掷毂子游戏的熵实验步骤:(程序见附件)我们首先计算掷毂子游戏熵的理论值:首先可以得到加和为2、3、…12的概率分别为1/36、2/36….6/36、5/36…1/36,然后利用公式:可以得到掷毂子游戏的熵的理论值为3.27bit/符号。
然后计算熵的仿真值:首先设定N=100:100:100000,然后做N次试验,统计最后加和的值所出现的频率,用频率近似概率,再次利用以上公式,得到仿真熵。
最后对不同的N得到的仿真熵与理论值的差别作图,寻找规律。
实验结论:经过理论分析,我们可知加和为2、3、…12的概率分别为1/36、2/36….6/36、5/36…1/36,进而得到掷毂子游戏的熵的理论值为3.27bit/符号。
下图为N取不同值时仿真熵的变化曲线(N=100:100:100000):根据观察可以得到,当N逐渐增大时,仿真熵逐渐趋近于理论计算得到的熵3.27bit/符号。
题目一(可选):计算英文文本的熵实验步骤:(程序见附件)首先,我们导入了一段样本文本,节选自欧亨利的小说《警察与赞美诗》(文本见附件),统计这段文本中英文字母(区分大小写)和空格出现的个数,进而得到各个字母出现的概率p(x),然后利用公式:计算样本的熵H(X)。
然后,我们统计了文本中相邻两个字符出现的概率p(xy),通过计算边缘概率分布可得p(x),然后利用公式p(y|x)=p(xy)/p(x)条件分布概率p(y|x),最后利用公式:计算得到样本的相邻两个字符的条件熵H(Y|X)。
最后,我利用生成了一组独立等概分布的英文随机序列,重新计算H(X)、H(Y|X),以检验模型的正确性。
实验结论:首先,我们可得实验的结果列表:输入文本测试项目实验值理论值小说节选H(X) 4.21bit/symbol 4.03bit/symbol小说节选H(Y|X) 3.14bit/symbol 3.32bit/symbol随机序列H(X) 5.72bit/symbol 5.73bit/symbol随机序列H(Y|X) 5.51bit/symbol 5.73bit/symbol 在上表中,实验值是通过matlab仿真得到,小说节选的两项理论值是通过查阅《信息论基础》(田宝玉、杨洁等编著,57页)得到,随机序列的理论值是通过计算:得到,随机序列共有53个符号,等概出现,我们认为H(Y|X)=H(Y)=。
信息论实验报告
![信息论实验报告](https://img.taocdn.com/s3/m/e5ad3ca6ee06eff9aef807f9.png)
前言信息论是现代通信与信息工程的理论基础。
作为电子信息科学与技术专业本科生的学科基础课,本课程主要讲授:信息的定义和测度、信源和信息熵、连续熵和信息变差、信道和互信息、平均互信息和信道容量、数据处理和信息测量理论、无失真信源编码理论和编码方法等内容。
本课程按“单符号离散信息系统”、“多符号离散信息系统”、“连续信息系统”三个“系统”层面,逐步深入展开,以严密的数学分析贯串始终。
通过教学,使学生掌握信息理论的基本概念和信息分析方法,为今后进一步研究信息科学和信息技术打下坚实的理论基础。
实验一:唯一可译码判断实验学时:3实验类型:(演示、验证、综合、√设计、研究)实验要求:(√必修、选修)一、实验目的通过本次试验了解唯一可译码地判断原理;实现用C语言编写判断唯一可译码地程序二、实验内容编程实现唯一可译码的判决准则―――Sardinas-Patterson算法三、实验原理、方法和手段Sardinas-Patterson算法描述:设C为码字集合,按以下步骤构造此码的尾随后缀集合F:(1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中;(2) 考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi是Wj∈C的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中;(3)F=∪Fi即为码C的尾随后缀集合;(4) 若F中出现了C中的元素,则算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素,则返回真。
在我们设计的算法中,需要注意的是我们需要的是先输出所有尾随后缀的集合,然后再判断该码是否是唯一可译码,即如F中出现了C中的元素,则C不是唯一可译码,否则若F中没有出现新的元素,则C为唯一可译码。
而不是F中出现C中的元素就终止,这也是在本题的要求中需要注意的问题。
1、概要设计:由于需要判断尾随后缀,所以我们需要反复的比较C和F中的码字。
1)首先我们用一个b[30][30]的数组来存放所有的尾随后缀的集合;用Q记录所有尾随后缀的个数;2)用数组a[30][30]来存放输入的码字,L[30]来存放码字的长度;通过一个双重循环并调用houzhui(a[i],a[j],L[i],L[j])函数来找到a[30][30]中的为随后缀,即:for(i=0;i<n-1;i++){for(j=0;j<n;j++){if(i!=j&&L[i]<L[j])HuoZhui(a[i],a[j],L[i],L[j]);}}3)通过判断Q是否大于0,如果不大于0,即b[30][30]中没有码字,也就是不存在尾随后缀,那么可判断a[30][30]是唯一可译码,否则进行如下操作;4)计算b[30][30]中尾随后缀的长度,用k1表示;并调用HuoZhui(b[i],a[j],k1,L[j])其中k1<L[j]来a[30][30]中所存在的后缀,并加入到b[30][30]中,通过一个循环,找到a[30][30]中所有尾随后缀;即for(i=0;i<Q;i++){k1=strlen(b[i]);for(j=0;j<n;j++){if(k1<L[j])HuoZhui(b[i],a[j],k1,L[j]);}}5)寻找b[30][30]中的尾随后缀;用k2表示b[30][30]中码字的长度,并调用HuoZhui(a[i],b[j],L[i],k2)来实现,其中k2>L[j];通过循环调用即可找到b[30][30]中的所有尾随后缀,最后再将他们分别存放在b[30][30]中;即通过for(i=0;i<n;i++){for(j=0;j<Q;j++){k2=strlen(b[j]);if(k2>L[i]){HuoZhui(a[i],b[j],L[i],k2);}}}6)在反复调用HuoZhui(a[i],a[j],L[i],L[j])函数中如果b[30][30]中有重复出现的,即尾随后缀相同的不用再次放入b[30][30]中。
最新《信息论基础》实验报告-实验1
![最新《信息论基础》实验报告-实验1](https://img.taocdn.com/s3/m/61296c04c950ad02de80d4d8d15abe23482f0387.png)
最新《信息论基础》实验报告-实验1实验目的:1. 理解信息论的基本概念,包括信息熵、互信息和编码理论。
2. 通过实验掌握香农信息熵的计算方法。
3. 学习并实践简单的数据压缩技术。
实验内容:1. 数据集准备:选择一段英文文本作为实验数据集,统计各字符出现频率。
2. 信息熵计算:根据字符频率计算整个数据集的香农信息熵。
3. 编码设计:设计一种基于频率的霍夫曼编码方案,为数据集中的每个字符分配一个唯一的二进制编码。
4. 压缩与解压缩:使用设计的霍夫曼编码对原始文本进行压缩,并验证解压缩后能否恢复原始文本。
5. 性能评估:比较压缩前后的数据大小,计算压缩率,并分析压缩效果。
实验步骤:1. 从文本文件中读取数据,统计每个字符的出现次数。
2. 利用统计数据计算字符的相对频率,并转换为概率分布。
3. 应用香农公式计算整个数据集的熵值。
4. 根据字符频率构建霍夫曼树,并为每个字符生成编码。
5. 将原始文本转换为编码序列,并记录压缩后的数据大小。
6. 实现解压缩算法,将编码序列还原为原始文本。
7. 分析压缩前后的数据大小差异,并计算压缩率。
实验结果:1. 原始文本大小:[原始文本大小]2. 压缩后大小:[压缩后大小]3. 压缩率:[压缩率计算结果]4. 霍夫曼编码表:[字符与编码的对应表]实验讨论:- 分析影响压缩效果的因素,如字符集大小、字符频率分布等。
- 讨论在实际应用中,如何优化编码方案以提高压缩效率。
- 探讨信息论在数据压缩之外的其他应用领域。
实验结论:通过本次实验,我们成功地应用了信息论的基本原理,通过霍夫曼编码技术对文本数据进行了有效压缩。
实验结果表明,基于字符频率的霍夫曼编码能够显著减少数据的存储空间,验证了信息论在数据压缩领域的有效性和实用性。
信息论实验
![信息论实验](https://img.taocdn.com/s3/m/2e6b5f1f5f0e7cd184253687.png)
北京科技大学UNIVERSITY OF SCIENCE AND TECHNOLOGY BEIJING 信息论实验报告学院:计算机与通信工程学院一1.实验目的(1)进一步熟悉唯一可译码判决准则(2)掌握C语言字符串处理程序的设计和调试技术2.实验要求(1)已知:信源符号个数q、码字集合C(2)输入:任意的一个码。
码字个数和每个具体的码字在运行时从键盘输入(3)输出:判决(是唯一可译码/不是唯一可译码)3.实验代码#include<stdio.h>#include<string.h>#define MAX 100char c[MAX][MAX];char f[MAX][MAX];int N,sum=0;int flag;void patterson(char c[],char d[]){int i,j,k;for(i=0;;i++){if(c[i]=='\0'&&d[i]=='\0') //2字符串一样,就跳出break;if(c[i]=='\0') //若d比c长,将d的尾随后缀放入f中{for(j=i;d[j]!='\0';j++) f[sum][j-i]=d[j];f[sum][j-i]='\0';for(k=0;k<sum;k++){if(strcmp(f[sum],f[k])==0) /*看当前生成的尾随后缀在f集合中是否存在*/ {sum--;break;}}sum++;break;}if(d[i]=='\0') //c比d长,将c的尾随后缀放入f中{for(j=i;c[j]!='\0';j++) f[sum][j-i]=c[j];f[sum][j-i]='\0';for(k=0;k<sum;k++){if(strcmp(f[sum],f[k])==0) /*查看当前生成的尾随后缀在f集合中是否存在*/{sum--;break;}}sum++;break;}if(c[i]!=d[i])//字符不一样了也退出break;}}/*主函数*/main(){int i,j;printf("输入码字的个数:");scanf("%d",&N);while(N>100){printf("输入码字个数过大,请输入小于100的数\n");printf("请输入码字的个数:");scanf("%d",&N);}flag=0;printf("请分别输入码字,长度<100个字符):\n");for(i=0;i<N;i++){scanf("%s",&c[i]);}for(i=0;i<N-1;i++)//判断如果码本身是否重复for(j=i+1;j<N;j++){if(strcmp(c[i],c[j])==0){flag=1;break;}}if(flag==1)//如果码本身有重复,就可以断定它不是唯一可译码{printf("这不是唯一可译码。
信息论实验报告实验1
![信息论实验报告实验1](https://img.taocdn.com/s3/m/89beffbc8662caaedd3383c4bb4cf7ec4afeb620.png)
信息论实验报告一实验一1、实验内容(1)英文信源由26个英文字母和1个空格组成,假定字符从中等概选取,那么一条100个字符的信息提供的信息量为多少?(2)若将27个字符分为三类,9个出现概率占2/7,13个出现概率占4/7,5个出现占1/7,而每类中符号出现等概,求该字符信源的信息熵。
2、设计思路及步骤I=log2P iH(X)=∑−P i log2Pii26个字母和一个空格,因等概选取可以先求得其中一个字符的信息量,通过扩展实现计算100个字符的信息量。
对于第二问,可以将字符分为三组,又因每组字符的概率相等,因此可以求出每组每一个字符的概率。
通过信息熵的定义可以求出结果。
3、程序代码及调试过程4、出现的问题及解决方法(1)没有看清题目要求,漏掉空格(2)是否可以将三组字符看作整体5、结果及说明通过实验结果可以看出100个字符的信息量,以及字符信源熵。
比较H2与H3可以看出,并不可以简单的将三组数据看作整体。
6、实验总结本实验通过计算多字符的信息量与分组信息熵,让我们加深了信息论中有关信息量与信息熵的概念与定义,同时也让我们熟悉了matlab的基本操作。
实验二1、实验内容绘制二进制信源熵函数曲线。
2、设计思路及步骤根据信源熵的定义以及公式计算出熵,通过matlab的矩阵运算计算出熵数组,然后通过plot函数画出图像。
3、程序代码及调试过程4、出现的问题及解决方法矩阵乘法出错,,需要使用matlab中的点乘5、结果及说明信源熵的图像为凸形曲线,熵在信源等概分布时取最大值,先增大再减小。
6、实验总结本实验通过对信源熵的作图让我们熟悉了matlab中图像生成函数,以及矩阵运算。
实验三,四1、实验内容求信源的熵和其二次、三次扩展信源的熵。
离散二维平稳信源的概率空间:求:(a)信源符号之间无依赖性时,信源X的信息熵H(X);(b)信源符号有依赖性时的条件熵H(X2|X1);(c)联合熵H(X1X2);(d)根据以上三者之间的关系,验证结果的正确性。
信息论课程设计实验报告
![信息论课程设计实验报告](https://img.taocdn.com/s3/m/ea71db2583c4bb4cf7ecd1f0.png)
《信息论课程设计》实验报告题目 1:实现香农编码及计算其编码效率题目 2:实现有噪信道编码中的循环码院系(部):计算机科学与技术学院专业及班级:信息与计算科学1301班姓名:唐诗韵学号: 1308060105 日期: 2016/01/10目录1. 课题描述 (1)2. 信源编码的相关介绍 (2)3. 香农编码(题目一) (3)3.1. 香农编码算法 (3)3.2. 香农编码特点 (4)4. 香农编码的C++程序实现 (4)4.1. 程序设计 (4)4.2. 运行结果 (6)5. 实现有噪信道中的循环码编码方法(题目二) (6)5.1. 循环码编码算法 (6)5.2. 循环码编码特点 (7)6. 循环码编码的C++程序实现 (7)6.1. 程序设计 (7)6.2. 运行结果 (9)7. 总结 (10)8. 参考文献 (11)1.课题描述信息论是一门理论和实践相结合的专业,因此相关题目都是来自于实践,同时具有上机练习的可操作性,此门科目是通信的基础。
香农1984年发表的一篇论文标志着信息论诞生,在他的论文中主要用概率来描述有效传输信息的问题,用概率给予了信息的定量描述方法,并提出了信源熵的概念,在现实生活中,人们经常把消息和信息分不清,认为消息就是信息,实则不是,消息是描述实物,而信息是定量描述一个消息所传输的信息量,通常用自信息量来描述一个消息所传达的信息量,它取值为此事件发生的概率的负对数,它表示一个事件发生之前此事件发生的不确定性大小,也表示一个事件发生后它所能提供的信息量,两个相互独立的消息所提供的信息量等于各自信息量之和。
此外,还可用互信息来描述信息的传达,为一个事件给出关于另一个事件的信息量,也表示事件y出现后信宿获得的关于x的信息量,互信息的引出,使信息的传递得到了定量的表示。
如果事件是以序列的形式表示的,及事件集,则用平均自信息量来表示信源所传递的信息,平均信息量表示信源的平均不确定性,比如抛掷一枚硬币的试验所包含的平均信息量。
信息论课程实验报告—唯一可译码的判定
![信息论课程实验报告—唯一可译码的判定](https://img.taocdn.com/s3/m/cecf5bc70c22590102029dd1.png)
return ISUDC; } /************************************************************************/ /* 该函数是用来对每个 pPostfix 和原码字序列进行比较, 如果重复了则在 pRetnBuf 中 /* 返回本身.并返回 1.否则如果没有得到新的后缀码的话返回 0 表示无重复*/ /* Stack 用来存储递归中产生的后缀码集合,这样确保每次得到的后缀码不会重复 /* 防止进去死循环 /************************************************************************/ int GetBacktraceSeq(const pCharVector& pCode,char* pPostfix,pCharVector& Stack,char** pRetnBuf) { char* iter1; for (int i = 0; i < pCode.size(); i++) { iter1 = pCode.at(i); int nRetn = IsPrefix(iter1,pPostfix); if (nRetn == ISSAME) { //第一次进来的话由于是码字序列内部的比较,所以 //肯定会遇到自己跟自己比较然后相等的情况,对该情况不允考虑 if(Stack.size() == 0) continue; *pRetnBuf = new char[strlen(pPostfix) + 1]; strcpy(*pRetnBuf,pPostfix); return 1; } if (ISPREFIX == nRetn) { //新得到的后缀码已经重复了,跳过对他的处理 if(PushBackUniqueValue(Stack,iter1) == false) continue; char* pTemp = NULL; //递归处理下一个后缀码 if(GetBacktraceSeq(pCode,pPostfix+strlen(iter1),Stack,&pTemp) == 0) { *pRetnBuf = NULL; Stack.pop_back(); continue; } Stack.pop_back(); //递归过程中遇到重复码字,算法应立即返回. //将自身和递归得到的后面的后缀码组合成一个歧义序列返回 char* pNewTraceSeq = new char[strlen(iter1) + strlen(pTemp) + 1]; pNewTraceSeq[0] = 0; strcat(pNewTraceSeq,iter1); strcat(pNewTraceSeq + strlen(iter1),pTemp); delete[] pTemp;
信息类实验设计实验报告(3篇)
![信息类实验设计实验报告(3篇)](https://img.taocdn.com/s3/m/dfcb596a7dd184254b35eefdc8d376eeafaa1711.png)
第1篇实验名称:信息类实验实验目的:1. 掌握信息处理的基本方法和技巧。
2. 熟悉信息检索工具的使用。
3. 提高信息分析和综合能力。
实验时间:2021年X月X日实验地点:XX大学信息检索实验室实验器材:1. 计算机2. 信息检索系统3. 信息处理软件实验人员:XX(姓名)、XX(姓名)实验步骤:一、实验准备1. 确定实验主题:选择一个与专业相关的主题,例如“人工智能在医疗领域的应用”。
2. 熟悉信息检索系统:了解所使用的信息检索系统的基本操作和功能。
3. 准备信息处理软件:安装并熟悉信息处理软件,如Excel、SPSS等。
二、信息检索1. 使用信息检索系统,以关键词“人工智能”、“医疗”进行检索。
2. 分析检索结果,筛选出与实验主题相关的文献资料。
3. 下载并整理检索到的文献资料。
三、信息处理1. 使用信息处理软件对文献资料进行整理,包括文献的分类、排序等。
2. 对文献内容进行摘要和总结,提炼出关键信息。
3. 对整理后的信息进行统计分析,得出实验结论。
四、实验结果分析1. 通过信息检索,共检索到100篇与实验主题相关的文献资料。
2. 经过筛选,选出30篇具有代表性的文献资料。
3. 对30篇文献资料进行整理和分析,得出以下结论:(1)人工智能在医疗领域的应用主要体现在辅助诊断、治疗和康复等方面。
(2)目前,人工智能在医疗领域的应用还存在一些挑战,如数据质量、算法可靠性等。
(3)未来,人工智能在医疗领域的应用前景广阔。
五、实验总结1. 通过本次实验,掌握了信息处理的基本方法和技巧,提高了信息检索能力。
2. 熟悉了信息检索系统的使用,为今后的研究提供了便利。
3. 培养了信息分析和综合能力,为今后的学术研究奠定了基础。
实验报告:一、实验背景随着信息技术的快速发展,信息处理在各个领域都发挥着越来越重要的作用。
为了提高信息处理能力,我们进行了本次实验,旨在掌握信息处理的基本方法和技巧,熟悉信息检索工具的使用,提高信息分析和综合能力。
信息论实验一实验报告范文
![信息论实验一实验报告范文](https://img.taocdn.com/s3/m/2b2243365627a5e9856a561252d380eb62942326.png)
信息论实验一实验报告范文一、简要总结信源的熵、信道容量的物理意义,概念:信源熵的物理意义:指信源中的各个符号的平均不确定性;熵是信源符号的平均信息量,是信源符号的平均不确定度。
信道容量概念:在信道可以传输的基本前提下,对信源的一切可能的概率分布而言,信道能够传输的最大(接收)熵速率称为信道容量。
意义:求出了某个信道的信道容量,也就找到了信源的最佳概率分布。
从而指导人们改造信源,使之最大可能地利用信道的传输能力。
二、写出离散信源熵、离散信道容量计算的基本步骤,画出实现离散信源熵、离散信道容量计算的程序流程图。
离散信源熵的计算步骤:q1Hr某Elogrpailograip(ai)i1信道容量的计算步骤:CI某;Ybit/符号ma某P某实现离散信源熵的计算流程图:输入P(ai)H(某)=0,i=1H(某)=H(某)+P(a1)logr(1/a1)i“”实现离散信道容量计算的程序流程图:输入p(某i)p(0)(某i)p(yj/某i)aie某pp(yj/某i)lnp(某i)p(yj/某i)jiC1n1,nlnp(某i)aiiC2n1,nlnma某aiiC1n1,nC2n1,n是CC1n1,n结束p(某i)p(某i)aip(某i)aii否三、实现离散信源熵、离散信道容量计算的matlab源程序:离散信源的熵(借助习题2.16)和离散信道容量(借助习题3.6)分析习题2.16的matlab程序:Clearall;%清除所有变量P某=[0.70.3];P=0;%输入信源概率,P某=p(某)H某=-P某某log2(P 某’)%计算信源的熵H(某)Py某=[0.90.2;0.10.8];p某=[0.70.3;0.70.3];%Py某为条件概率P某y=Py某.某p某;fori=1:2 h某某(i,1)=-P某y(I,:)某log2(P某y(i,:)’);P=P+h某某(i,1);%计算H(某^2)endh2某=P/2%计算H2(某)程序运行结果:H某=0.8813H2某=0.7131习题3.6的matlab程序:clearall;%清除所有变量a=0;p=[2/31/3;1/32/3];%信道矩阵Pfori=1:2,a=a+p(1,i)某log2(p(1,i));endC=log2(2)+a%计算对称离散信道的信道容量Cfori=1:2,p1(i)=1/2;endp1%最佳输入概率分布程序运行结果C=0.0817p1=0.50000.50004、讨论信源的熵的大小与前后符号之间相关性的关系,讨论信道容量与信源先验概率及信道转移概率的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息论实验
姓名:邓梅学号:2013090102030
实验一:信息度量方法
1.实验目的:
本实验通过计算给定的信源的熵,加深对信源及其扩展信源的熵的概念的理解
2.实验原理:
信源熵是信源的统计平均不确定性的描述,是概率p(x)的函数
3.实验内容:
有两个二元随机变量X,Y,他们的联合概率呈一定分布,同时定义另一随机变量Z=X*Y,求相关熵,条件熵及互信息
实验二:哈夫曼编码
1.实验目的:
掌握哈弗曼编码的原理及编码步骤
2.实验原理:
①把信源发出的n个消息按其概率递减次序排列
②把概率最小的两个消息分别编成“1”和“0”码元(即把概率较大的消息编为“1”,概率较小的消息编为“0”;或反之也可),并对这两个消息求概率之和
③把上述的概率和作为一个新消息的概率,再与原来的其他消息按概率递减的次序排列
④重复上述编码步骤②与③,直到概率和是1为止
⑤从最终的编码步骤,在各个消息编码方向线的逆行程顺序地取下所编出的码元,构成相对的代码组
3.实验内容:
根据哈弗曼算法为某一信源进行哈弗曼编码,并计算其平均码长和编码效率
相关程序及结果:(1)信源熵程序及结果
(2)哈弗曼编码程序:
运行结果:
直接调用MATLAB中Huffman函数现实如下
直接调用的结果:
实验结论:
通过本次实验,我对信源熵的概念更加了解了,同时也对MATLAB的应用更加熟练,尽管还有很多不足之处。
在哈弗曼实验中,对矩阵的一些循环处理还不是很会,需要求助网络和相关资料书,接下来的学习时间中会加强对MATLAB的练习,。