2014—2015 学年第 1 学期 合肥学院数理系 实验报告 课程名称: 信息论与编码 实验项目: 信息熵函数的计算 实验类别: 综合性□ 设计性□ 验证性□ 专业班级: 11 级信息与计算科学专业 姓 名: 学 号: 实验地点: 数理系机房 实验时间: 2014.12.12 指导教师: 余海峰 成 绩: 一. 实验目的 任选C 语言,C++,或MATLAB 等一种语言编写程序,计算信息熵、条件熵、联合熵,并通过 2~3 个运行的结果,验证程序的正确性。通过编程实现信息论的一些基本计算,熟悉和理解信息论基本概念 二. 实验内容 程序要求: 输 入 : 信源 分 布12,,,mp pp,信道 转 移 概 率 矩 阵 其 中111212122212,nnmmmnppppppppp p1(| ), 1nijjiijjpp yxp; 输出:信源熵()H X ,条件熵(| ), ( | )H X YH Y X ,联合熵()H XY 。 三. 实验方案或步骤(程序设计说明) 实验选用 C 语言编程,用一维数组存储信源分布数据,二维数组存储信道转移概率矩阵。利用循环(嵌套)语句计算以下公式并输出需要的结果: 22logloglog / logxxaax , 1logmiiiH XP xP x 1,,,|,|,/mjijijjiiijijjiP yP x yP x yP yx P xP xyP x yP y 11|,log|mnijijijH X YP x yP xy 11|,log|mnijjiijH Y XP x yP yx , |H XYH XH Y X 四. 实验程序(经调试后正确的源程序) #include "stdio.h" #include "stdlib.h" #include "math.h" #define M 20 //最大行数 #define N 20 //最大列数 /*求以2 为底x 为顶的对数*/ float log2(float x) { return log(x)/log(2);} //log2(x) /*主函数*/ void main() { int m,n,i,j; float H_X,H_X_Y,H_Y_X,H_XY;//H(X),H(X|Y),H(Y|X),H(XY) float P_X_Y,P_Y_X,P_XY;//P(X|Y),P(Y|X),P(XY) float P_X[M],P_Y[N],matrix[M][N];//信源分布P(X),P(Y),信道转移概率矩阵 while(1) { printf("\n 请输入信源分布的元素个数 m:"); scanf("%d",&m); printf("\n 输入信源分布:"); for(i=0;i