信息论与编码技术之实验 本文关键词:信息论,编码,实验,技术
信息论与编码技术之实验 本文简介:前两个是别人的,后两个是自己的,学术交流,抛砖引玉。信息论与编码实验报告样板实验室名称:S1-306实验一二维随机变量信息熵的计算教学实验报告[实验目的]掌握二变量多种信息量的计算方法。[实验要求]1.熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;2.编写计算二维随机变量信息量的书面程序
信息论与编码技术之实验 本文内容:
前两个是别人的,后两个是自己的,学术交流,抛砖引玉。
信息论与编码
实验报告样板
实验室名称:S1-306
实验一
二维随机变量信息熵的计算
教学实验报告
[实验目的]
掌握二变量多种信息量的计算方法。
[实验要求]
1.熟悉二变量多种信息量的计算方法,设计实验的数据结构和算法;
2.编写计算二维随机变量信息量的书面程序代码。
[实验内容]
离散二维随机变换熵的计算
说明:
(1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y);
(2)分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y);
(3)对测试通过的程序进行规范和优化;
(4)编写本次实验的实验报告。
[实验步骤]
实验过程中涉及的各种熵的主要公式(或定义式):
1、离散信源熵(平均不确定度/平均信息量/平均自信息量)
2、在给定某个yj条件下,xi的条件自信息量为I(xi/yj),X
集合的条件熵H(X/yj)为
相应地,在给定X(即各个xi)的条件下,Y集合的条件熵H(Y/X)定义为:
3、联合熵是联合符号集合
XY上的每个元素对xiyj的自信息量的概率加权统计平均值,表示X和Y同时发生的不确定度。
[实验体会]
通过本次实验,掌握了离散信源熵、条件熵、联合熵的概念和它们与信源统计分布或条件分布、联合分布之间的关系,并能进行计算。进一步加深了对各种信息熵的物理意义的理解。
附:计算信源熵、联合熵和条件熵的程序代码清单:(可写入实验报告也可不写入)
#include
#include
#include
#include
#include
using
namespace
std;
void
main()
{
int
k,n,t=0;
double
a[4][4],b=0,c=0;
srand((unsigned)time(NULL));
for(k=0;kn;
c=new
string[n];
aa(n);
huffman(a,c,n);
cout(p+right)
);
{
tmp
=(p+right);(p+right)
=(p+left);(p+left)
=
tmp;
}
while(
m_flag
<
p[left])
{
left++;
}
if(m_flag
<
p[left])
{
tmp
=(p+right);(p+right)
=(p+left);(p+left)
=
tmp;
}
}(p+left)
=
m_flag;
return
left;
}
void
myQuickSort(doublep,int
left,int
right)
{
int
mid;
if(left { mid = mySortBase(p,left,right); myQuickSort(p,left,mid-1); myQuickSort(p,mid+1,right); } } (4) main #include #include “myQuickSort.h“#include “myRand.h“#include “myLength.h“#define N 7 int main() { double p[N] = {0.20,0.19,0.18,0.17,0.15,0.10,0.01}; double q[N]; int i,j; int k; //编码 长度 double b_c; // 二 进制 数 // 生成 随机数 puts(“Rand:/n“); myRand(p,N); for(i=0; i i++) { printf(“%4.2lf/t“,p[i]); } puts(“/n“); // 排序 puts(“Sort:/n“); myQuickSort(p,0,N-1); for(i=0; i i++) { printf(“%4.2lf/t“,p[i]); } puts(“/n“); //累加 概率 puts(“Q:“); q[0] = 0; for(i=1; i i++) { q[i] = q[i-1] + p[i-1]; } for(i=0; i i++) { printf(“%4.2lf/t“,q[i]); } puts(“/n“); //输出 编码 for(i=0; i i++) { printf(“P[%d]: %4.2lf/t“,i+1,p[i]); printf(“Q[%d]: %4.2lf/t“,i+1,q[i]); k = myLength(p[i]); b_c = 2*q[i]; for(j=0; j= 1) { putchar( 1 ); b_c -= 1; } else { putchar( 0 ); } b_c= 2; } puts(“/n“); } return 0; }