信息论与编码实验一

信息论与编码实验一
信息论与编码实验一

信息论与纠错编码实验报告

实验一

一、实验目的

利用程序实现哈夫曼编码,以加深对哈夫曼编码的理解,并锻炼编程能力。

二、实验内容

哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般叫作Huffman编码。

程序源码:

/*-------------------------------------------------------------------------

* Name: 哈夫曼编码源代码。

* Date: 2011.04.16

* Author: Jeffrey Hill

* 在 Win-TC 下测试通过

* 实现过程:着先通过 HuffmanTree() 函数构造哈夫曼树,然后在主函数main()中

* 自底向上开始(也就是从数组序号为零的结点开始)向上层层判断,若在

* 父结点左侧,则置码为 0,若在右侧,则置码为 1。最后输出生成的编码。

*------------------------------------------------------------------------*/

#include

#define MAXBIT 100

#define MAXVALUE 10000

#define MAXLEAF 30

#define MAXNODE MAXLEAF*2 -1

typedef struct

{

int bit[MAXBIT];

int start;

} HCodeType; /* 编码结构体 */

typedef struct

{

int weight;

int parent;

int lchild;

int rchild;

} HNodeType; /* 结点结构体 */

/* 构造一颗哈夫曼树 */

void HuffmanTree (HNodeType HuffNode[MAXNODE], int n)

{

/* i、j:循环变量,m1、m2:构造哈夫曼树不同过程中两个最小权值结点的权值,

x1、x2:构造哈夫曼树不同过程中两个最小权值结点在数组中的序号。*/

int i, j, m1, m2, x1, x2;

/* 初始化存放哈夫曼树数组 HuffNode[] 中的结点 */

for (i=0; i<2*n-1; i++)

{

HuffNode[i].weight = 0;

HuffNode[i].parent =-1;

HuffNode[i].lchild =-1;

HuffNode[i].lchild =-1;

} /* end for */

/* 输入 n 个叶子结点的权值 */

for (i=0; i

{

printf ("Please input weight of leaf node %d: \n", i);

scanf ("%d", &HuffNode[i].weight);

} /* end for */

/* 循环构造 Huffman 树 */

for (i=0; i

{

m1=m2=MAXVALUE; /* m1、m2中存放两个无父结点且结点权值最小的两个结点 */

x1=x2=0;

/* 找出所有结点中权值最小、无父结点的两个结点,并合并之为一颗二叉树 */

for (j=0; j

{

if (HuffNode[j].weight < m1 && HuffNode[j].parent==-1) {

m2=m1;

x2=x1;

m1=HuffNode[j].weight;

x1=j;

}

else if (HuffNode[j].weight < m2 && HuffNode[j].parent==-1) {

m2=HuffNode[j].weight;

x2=j;

}

} /* end for */

/* 设置找到的两个子结点 x1、x2 的父结点信息 */

HuffNode[x1].parent = n+i;

HuffNode[x2].parent = n+i;

HuffNode[n+i].weight = HuffNode[x1].weight + HuffNode[x2].weight;

HuffNode[n+i].lchild = x1;

HuffNode[n+i].rchild = x2;

printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, HuffNode[x1].weight, HuffNode[x2].weight); /* 用于测试 */

printf ("\n");

} /* end for */

} /* end HuffmanTree */

int main(void)

{

HNodeType HuffNode[MAXNODE]; /* 定义一个结点结构体数组*/

HCodeType HuffCode[MAXLEAF], cd; /* 定义一个编码结构体数组,同时定义一个临时变量来存放求解编码时的信息 */

int i, j, c, p, n;

printf ("Please input n:\n");

scanf ("%d", &n);

HuffmanTree (HuffNode, n);

for (i=0; i < n; i++)

{

cd.start = n-1;

c = i;

p = HuffNode[c].parent;

while (p != -1) /* 父结点存在 */

{

if (HuffNode[p].lchild == c)

cd.bit[cd.start] = 0;

else

cd.bit[cd.start] = 1;

cd.start--; /* 求编码的低一位 */

c=p;

p=HuffNode[c].parent; /* 设置下一循环条件 */

} /* end while */

/* 保存求出的每个叶结点的哈夫曼编码和编码的起始位 */

for (j=cd.start+1; j

{ HuffCode[i].bit[j] = cd.bit[j];}

HuffCode[i].start = cd.start;

} /* end for */

/* 输出已保存好的所有存在编码的哈夫曼编码 */

for (i=0; i

{

printf ("%d 's Huffman code is: ", i);

for (j=HuffCode[i].start+1; j < n; j++)

{

printf ("%d", HuffCode[i].bit[j]);

}

printf ("\n");

}

return 0;

}

源码分析:

我们编写的代码的中心思想是利用用户输入的信息,首先建立哈夫曼树,再对树进行遍历从而得出哈夫曼编码。

在代码编写上我们结合了c和c++两种语言的优点,即利用了c的结构体,因为这是个小程序如果用c++的类会使程序变得复杂得不偿失;利用了c++的iostream库,因为c++的输入输出函数很简单,易于控制。

在具体实现上,我们首先定义了两个结构体:HTNode和HCode。

HTNode用以记录结点的信息,其成员有data结点值、weight权重、parent 双亲结点、lchild左孩子结点、rchild右孩子结点。

HCode用以记录结点的哈夫曼编码,其成员有cd[N]、codeend,codeend记录边界信息,其中cd[0]至cd[codeend-1]记录该结点的哈夫曼编码。

CreateHT()函数为哈夫曼树的构造函数,其函数参数为HTNode ht[](结点数组), n(结点个数)。首先我们执行

for(i=0; i<2*n-1; i++)

ht[i].parent=ht[i].lchild=ht[i].rchild=-1

利用for循环将所有结点的相关域置为-1。

再利用for循环for(i=n; i<2*n-1; i++)对每个结点遍历设置其相关信息。需要注意的是对于具有n个叶子结点的哈夫曼树,总共有2n-1个结点,所以循环变量为0到2*n-1。

在for循环内,执行

min1=min2=32767 ; lnode=rnode=-1;

即将min1和min2初始化为最大值,将lnode和rnode初始化为无效值。

继而执行

for(k=0; k<=i-1; k++)

if(ht[k].parent==-1)

{ if(ht[k].weight

{ min2=min1;

rnode=lnode;

min1=ht[k].weight;

lnode=k;

}

else if(ht[k].weight

{

min2=ht[k].weight;

rnode=k;}}

从ht[]的0至i-1中寻找最小的尚未构造二叉树(即其双亲结点为-1)的两个结点组成树,要注意的是i的值会变化,因为在建树的过程中结点数目会增加。最后将结点的信息设置好即完成了哈夫曼树的构造。

CreatHcode()为哈夫曼编码的生成函数,其参数为HTNode ht[](结点数组),HCode hcd[](记录结点编码的数组), n(结点个数)。CreatHcode()的核心函数是下面的while循环。

while(f!=-1)

{ if(ht[f].lchild==c)

hc.cd[hc.codeend++]='0';

else

hc.cd[hc.codeend++]='1';

c=f;

f=ht[f].parent;}

此处采用自底向上的查找方式,利用while(f!=-1)控制查到到根结点即停止,if(ht[f].lchild==c)

hc.cd[hc.codeend++]='0'

else

hc.cd[hc.codeend++]='1'

判断是否为左孩子结点,若是则其编码为0,若不是则为1.

c=f

f=ht[f].parent

将自己的双亲结点赋给自己,并继续查找,直到查找到根节点。

运行结果:

输入的结点数为8,其结点为a、b、c、d、e,其出现的频率(权重)分别为:5、4、3、2、1。人工构造的哈夫曼树如下图所示:

由人工构造的哈夫曼树可得各字母的哈夫曼编码为:a:11 b:10 c:00 d:011

e:010

运行程序得到的结果如下:

其编码值与人工得出的编码值一致,证明了程序的正确性。

信息论与编码实验

实验五霍夫曼编码 一、实验目的 1、熟悉Matlab 工作环境及工具箱; 2、掌握霍夫曼编码的基本步骤; 3、利用MATLAB实现霍夫曼编码。 二、实验内容 (1)熟悉理解Huffman编码的过程 (2)将给定的数据进行Huffman编码 知识要点: 1、霍夫曼编码的基本原理。参照教材及参考书。 2、二进制霍夫曼编码方法。 1. 基本原理: 变长编码 不要求所有码字长度相同,对不同概率的信源符号或序列,可赋予不同长度的码字。变长编码力求平均码长最小,此时编码效率最高,信源的冗余得到最大程度的压缩。 1)几种常用变长编码方法: 霍夫曼编码 费若编码 香农编码。 2)霍夫曼编码: 二进制霍夫曼编码 r进制霍夫曼编码 符号序列的霍夫曼编码。 3)二进制霍夫曼编码的编码过程: 将信源中n个符号按概率分布的大小,以递减次序排列起来; 用0和1码分别分配给概率最小的两个信源符号,并将这两个概率最小的信源符号合并成一个新符号,并用这两个最小概率之和作为新符号的概率,从而得到只包含n-1个符号的新信源,称为其缩减信源; 把缩减信源的符号仍按概率大小以递减次序排列,再将最后两个概率最小的符号合并

成一个新符号,并分别用0和1码表示,这样又形成一个新缩减信源; 依次继续下去,直到缩减信源最后只剩两个符号为止。再将最后两个新符号分别用0和1 码符号表示。最后这两个符号的概率之和为1,然后从最后一级缩减信源开始,依编码路径右后向前返回,就得到各信源符号所对应得码符号序列,即对应得码字。 r进制霍夫曼编码 由二进制霍夫曼编码可推广到r进制霍夫曼编码,只是每次求缩减信源时,改求r个最小概率之和,即将r个概率最小符号缩减为一个新符号,直到概率之和为1。但要注意,即缩减过程中可能到最后没有r个符号。为达次目的,可给信源添加几个概率为零的符号。 符号序列的霍夫曼编码 对信源编码除了对信源符号编码以外,也可对信源符号序列编码,一般来说,对序列编码比对单个符号更为有效。 2 数据结构与算法描述 1)变量及函数的定义 3 实验数据与实验结果(可用文字描述或贴图的方式进行说明) 1)测试数据 0.2 0.1 0.3 0.1 0.1 0.2 2)实验结果

信息论与编码实验指导书

《信息论与编码》实验指导书 信息与通信工程学院信息工程系 2014年6月

目录 实验一绘制信源熵函数曲线 (3) 实验二哈夫曼编解码 (6) 实验三离散信道容量 (10)

1实验一绘制信源熵函数曲线 一、实验目的 1.掌握离散信源熵的原理和计算方法。 2.熟悉matlab软件的基本操作,练习应用matlab软件进行信源熵函数曲 线的绘制。 3.理解信源熵的物理意义,并能从信源熵函数曲线图上进行解释其物理意 义。 二、实验原理 1.离散信源相关的基本概念、原理和计算公式 产生离散信息的信源称为离散信源。离散信源只能产生有限种符号。 假定X是一个离散随机变量,即它的取值范围R={x1,x2,x3,…}是有限或可数的。设第i个变量x i发生的概率为p i=P{X=x i}。则: 定义一个随机事件的自信息量I(x i)为其对应的随机变量x i出现概率对数的负值。即: I(x i)= -log2p(x i) 定义随机事件X的平均不确定度H(X)为离散随机变量x i出现概率的数学期望,即: ∑∑ - = = i i i i i i x p x p x I x p X H) ( log ) ( ) ( ) ( ) ( 2 单位为比特/符号或比特/符号序列。 平均不确定度H(X)的定义公式与热力学中熵的表示形式相同,所以又把平均不确定度H(X)称为信源X的信源熵。 必须注意一下几点: a)某一信源,不管它是否输出符号,只有这些符号具有某些概率特性, 必有信源的熵值;这熵值是在总体平均上才有意义,因而是个确定 值,一般写成H(X),X是指随机变量的整体(包括概率分布)。 b)信息量则只有当信源输出符号而被接收者收到后,才有意义,这就 是给与信息者的信息度量,这值本身也可以是随机量,也可以与接

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点6C601 实验成绩 二〇一五年十一月二〇一五年十一月

实验一:香农(Shannon )编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1、将信源消息符号按其出现的概率大小排列 )()()(21n x p x p x p ≥≥≥ 2、确定满足下列不等式的整数码长K i ; 1)(l o g )(l o g 22+-<≤-i i i x p K x p 3、为了编成唯一可译码,计算第i 个消息的累加概率 ∑ -== 1 1 )(i k k i x p p 4、将累加概率P i 变换成二进制数。 5、取P i 二进制数的小数点后K i 位即为该消息符号的二进制码。 四、源程序: #include #include #include #include #include using namespace std; int main() { int N; cout<<"请输入信源符号个数:";cin>>N; cout<<"请输入各符号的概率:"<

int i,j; for(i=0;i

信息论与编码习题参考答案(全)

信息论与编码习题参考答案 第一章 单符号离散信源 同时掷一对均匀的子,试求: (1)“2和6同时出现”这一事件的自信息量; (2)“两个5同时出现”这一事件的自信息量; (3)两个点数的各种组合的熵; (4)两个点数之和的熵; (5)“两个点数中至少有一个是1”的自信息量。 解: bit P a I N n P bit P a I N n P c c N 17.536log log )(36 1 )2(17.418log log )(362)1(36 662221111 616==-=∴====-=∴== =?==样本空间: * (3)信源空间: bit x H 32.436log 36 16236log 36215)(=??+?? =∴

bit x H 71.3636 log 366536log 3610 436log 368336log 366236log 36436log 362)(=??+?+?+??= ∴++ (5) bit P a I N n P 17.111 36 log log )(3611333==-=∴== ? 如有6行、8列的棋型方格,若有两个质点A 和B ,分别以等概落入任一方格内,且它们的坐标分别为(Xa ,Ya ), (Xb ,Yb ),但A ,B 不能同时落入同一方格内。 (1) 若仅有质点A ,求A 落入任一方格的平均信息量; (2) 若已知A 已落入,求B 落入的平均信息量; (3) 若A ,B 是可辨认的,求A ,B 落入的平均信息量。 解: ! bit a P a P a a P a I a P A i 58.548log )(log )()(H 48log )(log )(481 )(:)1(48 1 i i i i i ==-=∴=-=∴= ∑=落入任一格的概率 bit b P b P b b P b I b P A i 55.547log )(log )()(H 47 log )(log )(47 1 )(:B ,)2(48 1i i i i i ==-=∴=-=∴=∑=落入任一格的概率是落入任一格的情况下在已知 bit AB P AB P AB H AB P AB I AB P AB i i i i i i i 14.11)4748log()(log )()() (log )(47 1 481)()3(47481 =?=-=-=∴?=∑?=是同时落入某两格的概率 从大量统计资料知道,男性中红绿色盲的发病率为7%,女性发病率为%.如果你问一位男士:“你是否是红绿色盲”他的回答可能是:“是”,也可能“不是”。问这两个回答中各含有多少信息量平均每个回答中各含有多少信息量如果你问一位女士,则她的答案中含有多少平均信息量 解:

信息论与编码实验报告材料

实验报告 课程名称:信息论与编码姓名: 系:专 业:年 级:学 号:指导教 师:职 称:

年月日 目录 实验一信源熵值的计算 (1) 实验二Huffman 信源编码. (5) 实验三Shannon 编码 (9) 实验四信道容量的迭代算法 (12) 实验五率失真函数 (15) 实验六差错控制方法 (20) 实验七汉明编码 (22)

实验一信源熵值的计算 、实验目的 1 进一步熟悉信源熵值的计算 2 熟悉Matlab 编程 、实验原理 熵(平均自信息)的计算公式 q q 1 H(x) p i log2 p i log2 p i i 1 p i i 1 MATLAB实现:HX sum( x.* log2( x));或者h h x(i)* log 2 (x(i )) 流程:第一步:打开一个名为“ nan311”的TXT文档,读入一篇英文文章存入一个数组temp,为了程序准确性将所读内容转存到另一个数组S,计算该数组中每个字母与空格的出现次数( 遇到小写字母都将其转化为大写字母进行计数) ,每出现一次该字符的计数器+1;第二步:计算信源总大小计算出每个字母和空格出现的概率;最后,通过统计数据和信息熵公式计算出所求信源熵值(本程序中单位为奈特nat )。 程序流程图: 三、实验内容 1、写出计算自信息量的Matlab 程序 2、已知:信源符号为英文字母(不区分大小写)和空格输入:一篇英文的信源文档。输出:给出该信源文档的中各个字母与空格的概率分布,以及该信源的熵。 四、实验环境 Microsoft Windows 7

五、编码程序 #include"stdio.h" #include #include #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='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]);

信息论与编码实验二

实验二 离散信道及其容量 一、实验目的 1、 理解离散信道容量的内涵; 2、 掌握求二元对称信道(BSC )互信息量和容量的设计方法; 3、 掌握二元扩展信道的设计方法并会求其平均互信息量。 二、实验原理 若某信道输入的是N 维序列x ,其概率分布为q(x),输出是N 维序列y,则平均互信息量记为I(X;Y),该信道的信道容量C 定义为() max (X;Y)q x C I =。 三、实验内容 1、给定BSC 信道,信源概率空间为 信道矩阵 0.990.010.010.99P ??=???? 求该信道的I(X;Y)和容量,画出I(X;Y)和ω、C 和p 的关系曲线。 2 、编写一M 脚本文件t03.m ,实现如下功能: 在任意输入一信道矩阵P 后,能够判断是否离散对称信道,若是,求出信道容量C 。 3、已知X=(0,1,2);Y=(0,1,2,3),信源概率空间和信道矩阵分别为 X P 0 1 0.6 0.4 = X Px 0 1 2 0.3 0.5 0.2 =

求: 平均互信息量; 4、 对题(1)求其二次扩展信道的平均互信息I(X;Y)。 四、程序设计与算法描述 1)设计思路 1、信道容量() max (X;Y)q x C I 因此要求给定信道的信道容量,只要知道该信道的最大互信息量,即求信道容量就是求信道互信息量的过程。 程序代码: clear all,clc; w=0.6; w1=1-w; p=0.01; X=[0 1]; P =[0.6 0.4]; p1=1-p; save data1 p p1; I_XY=(w*p1+w1*p)*log2(1/(w*p1+w1*p))+(w*p+w1*p1)*log2(1/(w*p+w1*p1))-(p*log2(1/p)+p 1*log2(1/p1)); C=1-(p*log2(1/p)+p1*log2(1/p1)); fprintf('互信息量:%6.3f\n 信道容量:%6.3f',I_XY,C); p=eps:0.001:1-eps; p1=1-p; C=1-(p.*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,1),plot(p,C),xlabel('p'),ylabel('C'); load data1; w=eps:0.001:1-eps; w1=1-w; I_XY=(w.*p1+w1.*p).*log2(1./(w.*p1+w1.*p))+(w.*p+w1.*p1).*log2(1./(w.*p+w1.*p1))-(p .*log2(1./p)+p1.*log2(1./p1)); subplot(1,2,2),plot(w,I_XY) xlabel('w'),ylabel('I_XY'); 0.1 0.3 0 0.6 0.3 0.5 0.2 0 0.1 0.7 0.1 0.1 P=

《信息论与信源编码》实验报告

《信息论与信源编码》实验报告 1、实验目的 (1) 理解信源编码的基本原理; (2) 熟练掌握Huffman编码的方法; (3) 理解无失真信源编码和限失真编码方法在实际图像信源编码应用中的差异。 2、实验设备与软件 (1) PC计算机系统 (2) VC++6.0语言编程环境 (3) 基于VC++6.0的图像处理实验基本程序框架imageprocessing_S (4) 常用图像浏览编辑软件Acdsee和数据压缩软件winrar。 (5) 实验所需要的bmp格式图像(灰度图象若干幅) 3、实验内容与步骤 (1) 针对“图像1.bmp”、“图像2.bmp”和“图像3.bmp”进行灰度频率统计(即计算图像灰度直方图),在此基础上添加函数代码构造Huffman码表,针对图像数据进行Huffman编码,观察和分析不同图像信源的编码效率和压缩比。 (2) 利用图像处理软件Acdsee将“图像1.bmp”、“图像2.bmp”和“图像 3.bmp”转换为质量因子为10、50、90的JPG格式图像(共生成9幅JPG图像),比较图像格式转换前后数据量的差异,比较不同品质因素对图像质量的影响; (3) 数据压缩软件winrar将“图像1.bmp”、“图像2.bmp”和“图像3.bmp”分别生成压缩包文件,观察和分析压缩前后数据量的差异; (4) 针对任意一幅图像,比较原始BMP图像数据量、Huffman编码后的数据量(不含码表)、品质因素分别为10、50、90时的JPG文件数据量和rar压缩包的数据量,分析不同编码方案下图像数据量变化的原因。 4、实验结果及分析 (1)在VC环境下,添加代码构造Huffman编码表,对比试验结果如下: a.图像1.bmp:

信息论与编码实验报告

实验一 绘制二进熵函数曲线(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 n X 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)的计算。 4、使用Excel的图表向导,图表类型选“XY散点图”,子图表类型选“无数据点平滑散点图”,数据区域用计算出的H(p)数据所在列范围,即$B$1:$B$101。在“系列”中输入X值(即p值)范围,即$A$1:$A$101。在X轴输入标题概率,在Y轴输入标题信源熵。 (二)用matlab软件绘制二源信源熵函数曲线 p = 0.0001:0.0001:0.9999; h = -p.*log2(p)-(1-p).*log2(1-p); plot(p,h) 五、实验结果

信息论与编码试题集与答案(新)

一填空题(本题20分,每小题2分) 1、平均自信息为 表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。 平均互信息 表示从Y获得的关于每个X的平均信息量,也表示发X前后Y的平均不确定性减少的量,还表示通信前后整个系统不确定性减少的量。 2、最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。 3、最大熵值为。 4、通信系统模型如下: 5、香农公式为为保证足够大的信道容量,可采用(1)用频带换信噪比;(2)用信噪比换频带。

6、只要,当N足够长时,一定存在一种无失真编码。 7、当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 8、在认识论层次上研究信息的时候,必须同时考虑到形式、含义和效用三个方面的因素。 9、1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。 按照信息的地位,可以把信息分成客观信息和主观信息。 人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。 信息的可度量性是建立信息论的基础。 统计度量是信息度量最常用的方法。 熵是香农信息论最基本最重要的概念。 事物的不确定度是用时间统计发生概率的对数来描述的。 10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用随机矢量描述。 11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为其发生概率对

数的负值 。 12、自信息量的单位一般有 比特、奈特和哈特 。 13、必然事件的自信息是 0 。 14、不可能事件的自信息量是 ∞ 。 15、两个相互独立的随机变量的联合自信息量等于 两个自信息量之和 。 16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量 趋于变小 。 17、离散平稳无记忆信源X 的N 次扩展信源的熵等于离散信源X 的熵的 N 倍 。 18、离散平稳有记忆信源的极限熵,=∞H )/(lim 121-∞→N N N X X X X H 。 19、对于n 元m 阶马尔可夫信源,其状态空间共有 nm 个不同的状态。 20、一维连续随即变量X 在[a ,b]区间内均匀分布时,其信源熵为 log2(b-a ) 。 21、平均功率为P 的高斯分布的连续信源,其信源熵,Hc (X )=eP π2log 21 2。 22、对于限峰值功率的N 维连续信源,当概率密度 均匀分布 时连续信源熵具有最大值。 23、对于限平均功率的一维连续信源,当概率密度 高斯分布 时,信源熵有最大值。 24、对于均值为0,平均功率受限的连续信源,信源的冗余度决定于平均功率的限定值P 和信源的熵功率P 之比 。

信息论与编码实验报告

信息论与编码实验报告-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实验一关于硬币称重问题的探讨 一、问题描述: 假设有N 个硬币,这N 个硬币中或许存在一个特殊的硬币,这个硬币或轻 或重,而且在外观上和其他的硬币没什么区别。现在有一个标准天平,但是无刻度。现在要找出这个硬币,并且知道它到底是比真的硬币重还是轻,或者所有硬币都是真的。请问: 1)至少要称多少次才能达到目的; 2)如果N=12,是否能在3 次之内将特殊的硬币找到;如果可以,要怎么称? 二、问题分析: 对于这个命题,有几处需要注意的地方: 1)特殊的硬币可能存在,但也可能不存在,即使存在,其或轻或重未知; 2)在目的上,不光要找到这只硬币,还要确定它是重还是轻; 3)天平没有刻度,不能记录每次的读数,只能判断是左边重还是右边重,亦或者是两边平衡; 4)最多只能称3 次。 三、解决方案: 1.关于可行性的分析 在这里,我们把称量的过程看成一种信息的获取过程。对于N 个硬币,他们 可能的情况为2N+1 种,即重(N 种),轻(N 种)或者无假币(1 种)。由于 这2N+1 种情况是等概率的,这个事件的不确定度为: Y=Log(2N+1) 对于称量的过程,其实也是信息的获取过程,一是不确定度逐步消除的过程。 每一次称量只有3 种情况:左边重,右边重,平衡。这3 种情况也是等概率 的,所以他所提供的信息量为: y=Log3 在K 次测量中,要将事件的不确定度完全消除,所以 K= Log(2N+1)/ Log3 根据上式,当N=12 时,K= 2.92< 3 所以13 只硬币是可以在3 次称量中达到

信息论霍夫曼编码

信息论与编码实验报告 课程名称:信息论与编码 实验名称:霍夫曼编码 班级: 学号: 姓名:

实验目的 1、熟练掌握Huffman编码的原理及过程,并熟练运用; 2、熟练运用MATLAB应用软件,并实现Huffman编码过程。 一、实验设备 装有MATLAB应用软件的PC计算机。 二、实验原理及过程 原理: 1、将信源符号按概率从大到小的排列,令P (X1)>=P(X2)>=P(X3)......P(Xn) 2、给两个概率最小的信源符号P(Xn-1)和P(Xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。 3、将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2. 4、重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 过程: 用MATLAB编写代码实现Huffman编码其程序为: %哈夫曼编码的MA TLAB实现(基于0、1编码):

clc; clear; A=[0.3,0.2,0.1,0.2,0.2];信源消息的概率序列 A=fliplr(sort(A));%按降序排列 T=A; [m,n]=size(A); B=zeros(n,n-1);%空的编码表(矩阵) for i=1:n B(i,1)=T(i);%生成编码表的第一列 end r=B(i,1)+B(i-1,1);%最后两个元素相加 T(n-1)=r; T(n)=0; T=fliplr(sort(T)); t=n-1; for j=2:n-1%生成编码表的其他各列 for i=1:t B(i,j)=T(i); end K=find(T==r); B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在

信息论与编码实验指导书

信息论与编码实验指导书 1 课程实验目的 本课程是一门实践性很强的专业课和核心课程,根据课程理论教学的需要安排了6学时的配套实验教学,主要内容涉及信息度量的计算方法、典型信源编码方法、典型信道容量计算方法和数据压缩方法四个实验,这四个实验的开设一方面有助于学生消化、巩固课程理论教学的知识,另一方面又可培养学生实践动手能力,同时为后续课程做好准备。 2 课程实验要求 课程实验准备要求 (1)课程实验主要为设计性实验,要求学生熟悉掌握在VC环境下编写和调试C++程序的方法。 (2)要求学生在实验前复习实验所用到的预备知识。可以查阅教材或者相关的参考资料,这需要学生有自主的学习意识和整理知识的能力。 (3)根据实验项目,设计相关的数据结构和算法,再转换为对应的书面程序,并进行静态检查,尽量减少语法错误和逻辑错误。上机前的充分准备能高效利用机时,在有限的时间内完成更多的实验内容。 课程实验过程要求 (1)生成源代码。将课前编写好的书面代码,利用VC自带的编辑器尽快输入为转换为源代码; (2)程序调试和软件测试。要求学生熟练掌握调试工具,调试正确后,认真整理源程序和注释,给出带有完整注释且格式良好的源程序清单和结果。 (3)完成实验报告。根据实验内容和完成情况,按照附件1给定的格式完成课程实验报告的编写。

课程实验报告要求 在每次课程实验后要及时进行总结和整理,并编写课程实验报告。报告格式按江西蓝天学院实验报告纸格式填写。 实验一二维随机变量信息熵的计算 [实验目的] 掌握二变量多种信息量的计算方法。 [实验学时] 2学时 [实验准备] 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-3

实验一 关于信源熵的实验 班级:电子131501 姓名:赵英凯 学号:201315020137 时间:2016.5.22

一、实验目的 1. 掌握离散信源熵的原理和计算方法。 2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。 3. 自学图像熵的相关概念,并应用所学知识,使用matlab 求解图像熵。 二、实验原理 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) = - plogp–qlogq = - plogp –(1 - p)log(1- p) 即:H (p) = - plogp –(1 - p)log(1- p) 其中 0 ≤ p ≤1 3. MATLAB二维绘图 用matlab 中的命令plot( x , y) 就可以自动绘制出二维图来。例1-2,在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) 输入一个离散信源,并检查该信源是否是完备集。 2) 去除信源中符号分布概率为零的元素。 3) 根据平均信息量公式,求出离散信源的熵。 5. 图像熵的相关知识 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。

信息论与编码实验报告材料

本科生实验报告 实验课程信息理论与编码 学院名称信息科学与技术学院 专业名称 学生姓名 学生学号 指导教师 实验地点 实验成绩 二〇一六年九月----二〇一六年十一月

填写说明 1、适用于本科生所有的实验报告(印制实验报告册除外); 2、专业填写为专业全称,有专业方向的用小括号标明; 3、格式要求: ①用A4纸双面打印(封面双面打印)或在A4大小纸上用蓝黑色水笔书写。 ②打印排版:正文用宋体小四号,1.5倍行距,页边距采取默认形式(上下2.54cm, 左右2.54cm,页眉1.5cm,页脚1.75cm)。字符间距为默认值(缩放100%,间距:标准);页码用小五号字底端居中。 ③具体要求: 题目(二号黑体居中); 摘要(“摘要”二字用小二号黑体居中,隔行书写摘要的文字部分,小4号宋体); 关键词(隔行顶格书写“关键词”三字,提炼3-5个关键词,用分号隔开,小4号黑体); 正文部分采用三级标题; 第1章××(小二号黑体居中,段前0.5行) 1.1 ×××××小三号黑体×××××(段前、段后0.5行) 1.1.1小四号黑体(段前、段后0.5行) 参考文献(黑体小二号居中,段前0.5行),参考文献用五号宋体,参照《参考文献著录规则(GB/T 7714-2005)》。

实验一:香农(Shannon )编码 一、实验目的 掌握通过计算机实现香农编码的方法。 二、实验要求 对于给定的信源的概率分布,按照香农编码的方法进行计算机实现。 三、实验基本原理 给定某个信源符号的概率分布,通过以下的步骤进行香农编码 1.将信源消息符号按其出现的概率大小排列 )()()(21n x p x p x p ≥≥≥ 2.确定满足下列不等式的整数码长K i ; 1)(lo g )(lo g 22+-<≤-i i i x p K x p 3.为了编成唯一可译码,计算第i 个消息的累加概率 ∑-==1 1 )(i k k i x p p 4.将累加概率P i 变换成二进制数。 5.取P i 二进制数的小数点后K i 位即为该消息符号的二进制码。 四、实验内容 1.对给定信源? ?????=????? ?01.01.015.017.018.019.02.0)(7654321 x x x x x x x X q X 进行二进制香农编码。 2.对给定信源??????=????? ?05.010.015.020.025.025.0)(654321x x x x x x X q X 进行二进制香农编码。 3.自已选择一个例子进行香农编码。 五、实验设备 PC 计算机 ,C++

信息论与编码实验书

信 息 论 与 编 码 实 验 报 告 班级: 姓名: 学号:

实验一 绘制二进熵函数曲线(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 n X 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 λλλλ-+≥-+≤=--+-=-=≤≤???? ?? -===???? ??∑ 四、实验内容: 用Excel 或Matlab 软件制作二进熵函数曲线。 具体步骤如下: 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)的计算。 4、使用Excel 的图表向导,图表类型选“XY 散点图”,子图表类型选“无

信息论与编码实验报告

信息论与编码基础实验报告
学院: 队别: 专业: 姓名: 学号:
电子科学与工程学院 二队 06 级 通信工程专业 曹务绅 200604015014
国防科学技术大学电子科学与工程学院
1

汉明码编译码
一、 实验目的
通过本次实验的练习, 进一步巩固了信道编码的基本原理, 掌握了Hamming 码编译码方法,提高了软硬件操作能力,培养了实验人员理论结合实践的能力。
二、 实验原理
(一)汉明码: 汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属 于线性分组码, 由于汉明码的抗干扰能力较强, 至今仍是应用比较广泛的一类码。 它具有以下特征: 码 长: n = 2m ? 1
信息位数: k = 2 m ? m ? 1 监督码位: r = n ? k = m 最小码距: d = 3 纠错能力: t = 1 (二)汉明码的编码: 在(n,k)汉明码中, (n-k)个附加的监督码元是由信息码元的线性运算产生 的。码长为 n,信息码元长度为 k,2k 个码组构成 n 维线性空间中的一个 k 维子 空间,编码的实质就是要在 n 维空间中,找出一组长为 n 的 k 个线性无关的矢 量 g0 g1 g k ?1 ,使得每个码组 c 都可以表示为 k 个矢量的线性组合,即 c0 ] = mk ?1 g 0 + mk ? 2 g1 + m0 g k ?1 其中, m i∈{0,1}, i=0,
c = [cn ?1 cn ? 2
1,……,k-1。将上式写成矩阵形式得
2

信息论与编码实验指导书

信息论与编码实验指导书

1 课程实验目的 本课程是一门实践性很强的专业课和核心课程,根据课程理论教学的需要安排了6学时的配套实验教学,主要内容涉及信息度量的计算方法、典型信源编码方法、典型信道容量计算方法和数据压缩方法四个实验,这四个实验的开设一方面有助于学生消化、巩固课程理论教学的知识,另一方面又可培养学生实践动手能力,同时为后续课程做好准备。 2 课程实验要求 2.1 课程实验准备要求 (1)课程实验主要为设计性实验,要求学生熟悉掌握在VC环境下编写和调试C++程序的方法。 (2)要求学生在实验前复习实验所用到的预备知识。可以查阅教材或者相关的参考资料,这需要学生有自主的学习意识和整理知识的能力。 (3)根据实验项目,设计相关的数据结构和算法,再转换为对应的书面程序,并进行静态检查,尽量减少语法错误和逻辑错误。上机前的充分准备能高效利用机时,在有限的时间内完成更多的实验内容。 2.2 课程实验过程要求 (1)生成源代码。将课前编写好的书面代码,利用VC自带的编辑器尽快输入为转换为源代码; (2)程序调试和软件测试。要求学生熟练掌握调试工具,调试正确后,认真整理源程序和注释,给出带有完整注释且格式良好的源程序清单和结果。 (3)完成实验报告。根据实验内容和完成情况,按照附件1给定的格式完成课程实验报告的编写。

2.3 课程实验报告要求 在每次课程实验后要及时进行总结和整理,并编写课程实验报告。报告格式按江西蓝天学院实验报告纸格式填写。

实验一二维随机变量信息熵的计算 [实验目的] 掌握二变量多种信息量的计算方法。 [实验学时] 2学时 [实验准备] 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 实验内容 (1)利用random函数和归一化方法构造一个二维离散随机变量(X,Y); (2)分别计算X与Y的熵、联合熵、条件熵:H(X)、H(Y)、H(X,Y)H(X|Y)、I(X|Y); 2 数据结构与算法描述 (1)函数的定义:函数的数据成员 1.随机生成函数的代码: int k,n,t=0; double a[4][4],b=0,c=0; for(k=0;k<4;k++) { for(n=0;n<4;n++) { a[k][n]=rand()%100;

信息论编码实验报告-费诺编码附源代码

中南大学 信息论与编码实验报告 选题:费诺编码 学生姓名: 学号: 专业班级:通信工程 指导老师: 学院:信息科学与工程学院 时间: 2015 目录 一、实验目的 二、实验原理 费诺编码思想

费诺编码流程图 三、实验内容 四、实验要求 五、代码调试结果 六、心得体会 七、程序源代码 一实验目的 1. 掌握费诺编码的原理和过程。 2. 熟悉 C/C++语言,练习使用C/C++实现香农码和Huffman 编码。 二、实验原理 费诺编码思想 设有离散无记忆信源 ∑==??????n i i n n x p x p x p x p x x x 1 21211)(,)(.....)()(..... 1.按信源符号的概率从大到小的顺序排队

不妨设 ) (......)()(21n x p x p x p ≥≥≥ 2.将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近似相同,并对各组赋予一个二进制码元“0”和“1”。 3.将每一大组的信源符号再分为两组,使划分后的两个组的概率之和近似相同,并对各组赋予一个二进制符号“0”和“1”。 4.如此重复,直至每个组只剩下一个信源符号为止。 5.信源符号所对应的码字即为费诺码。 例:有一单符号离散无记忆信源 ??????=??????04.008.016.018.022.032.0)(654321 x x x x x x X P X 对该信源编二进制费诺码 )i /(35.2)(gn s bit X H = m L K R 2log = %92.97) (== R x H η ∑===61 ) /(4.2)(i i i k x p K 符号比特 费诺编码流程图

信息论与编码实验报告

信息论与编码实验报告 学院:计算机与通信工程学院 专业:计算机科学与技术 班级:计1203班 学号: 姓名: 2014年12月29日

实验一唯一可译码判别准则 实验目的: 1.进一步熟悉唯一可译码判别准则; 2.掌握C语言字符串处理程序的设计和调试技术。 实验内容: 1.已知:信源符号数和码字集合C; 2.输入:任意的一个码,码字的个数和每个具体的码字在运行时从键盘输入; 3.输出:判决(是唯一可译码/不是唯一可译码);循环(若继续判决则输入1循环判决,否则输入0结束运行)。 实验原理: 根据唯一可译码的判别方法,利用数据结构所学的知识,定义字符串数据类型并利用指针进行编程来实现算法。 算法:1、考察C 中所有的码字,若Wi是Wj的前缀,则将对应的后缀作为一个尾随后缀码放入集合Fi+1中; 2、考察C和Fi俩个集合,若Wi ∈C是Wj∈F的前缀或Wi ∈F是Wj∈C的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中; 3、F=∪Fi即为码C的尾随后缀集合; 4、若F中出现了C中的元素,算法终止,返回假(C不是唯一可译码);否则若F中没有出现新的元素,则返回真。 实验环境及实验文件存档名: 1.实验环境:visual C++ 6.0 2.文件名:weiyikeyi.cpp 实验结果及分析: 1.源代码: #include #include char c[100][50]; char f[300][50]; int N,sum=0; //N为输入码字的个数,sum为尾随后缀集合中码字的个数 int flag;//判断是否唯一可译标志位 void patterson(char c[],char d[]) //检测尾随后缀 { int i,j,k; for(i=0;;i++) { if(c[i]=='\0'&&d[i]=='\0')//2字符串一样,跳出

相关文档
最新文档