信息论与编码课程设计报告

信息论与编码课程设计报告
信息论与编码课程设计报告

信息论与编码课程设计报告

设计题目:统计信源熵与哈夫曼编码

专业班级

学号

学生姓名

指导教师

教师评分

2015年 3 月 25 日

目录

一、设计任务与要求 (3)

二、设计思路 (3)

三、设计流程图 (5)

四、程序运行及结果 (6)

五、心得体会 (8)

参考文献 (9)

附录:源程序 (10)

一、设计任务与要求

1.1设计目的

信息论与编码是信息、通信、电子工程专业的基础,对理论研究和工程应用均有重要的作用。通过对本次课程设计,我们将学到的理论知识用于实践,用软件编写程序实现具体的计算和逻辑问题,使我们对所学知识有更深层次的认知,加深对课本知识的理解。

1.2设计要求

(1)统计信源熵

要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。

(2)哈夫曼编码

要求:任意输入消息概率,利用哈夫曼编码方法进行编码,并计算信源熵和编码效率。

二、设计思路

2.1编码效率计算公式:

K X)

H

=

η

其中H(X)为信源熵,K表示平均码长。

2.3变长码的编码方法

能获得最佳码的编码方法主要有:

&香农(Shannon)

&费诺(Fano)

&霍夫曼(Huffman)

本设计以霍夫曼编码为例;

(1)将信源消息符号按其出现的概率大小依次排列

p(x1)≥p(x2)≥…≥ p(xn)

(2)取两个概率最小的符号分别配以0和1,并将这两个概率相加作为一个新符号的概率,与未分配码元的符号重新排队。

(3)对重排后的两个概率最小符号重复步骤2的过程。

(4)继续上述过程,直到最后两个符号配以0和1为止。

(5)从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字。

2.3 具体设计思路

(1)统计信源熵

在VC++环境中进行编程

(1)运行程序,在对话框里输入一段英文,将26个英文字母及空格作为信源。(2)计算每个字母出现的次数(不区分大小写),再通过计算信源总大小来计算在本篇文章中每个字母出现的概率。

(3)通过信源熵计算公式来计算信源熵。

(2)哈夫曼编码

在VC++环境中进行编程

(1)输入概率矩阵,并检验是否正确,即各概率不能小于零,总概率之和等于一。

(2)建立各概率符号的位置索引矩阵Index,利于编码后从树根进行回溯,从而得出对应的编码

(3)输出所需的哈弗曼编码。

(4)计算信源熵,并计算平均码长,算出编码效率。

(5)输出结果。

三、设计流程图

3.1统计信源熵的设计思路

3.2哈夫曼编码设计思路

四、程序运行及结果

4.1统计信源熵程序运行结果

运行程序并输入:

The most distant way in the world

is not the way from birth to the end.

it is when i sit near you

that you don't understand i love u.

The most distant way in the world

is not that you're not sure i love u.

It is when my love is bewildering the soul

but i can't speak it out.

T测试目的:检验程序是否正确。

检验方法:用验证法来检验;看中概率是否为一,并检测信源熵是否正确。检验结果:程序运行结果正确。

如下为运行结果截屏

4.2哈夫曼编码程序运行结果

测试输入:0.20 0.19 0.18 0.17 0.15 0.10 0.01

测试目的:测试经常出现的信源符号是否对应较短的码长,检测程序运行结果是否正确。

正确输出:10 11 000 001 010 0110 0111

信源熵为-2.60868 bit/符号

平均码长为2.72 码元/符号

传送速率为0.959075 bit/码元

实际输出:与争取而输出一样

检测结果:程序无错误

以下为运行结果截屏

五、心得体会

刚开始课程设计的时候,自己是毫无头绪的,不知道从哪里下手,最重要的原因是对 C 语言没有达到熟练的程度,自己不是很自信。但是万事开头难,什么困难只要踏出第一步,接下来就会一步步化解。

为了更加熟练地用C语言程序进行编写,我与同组成员仔细地复习以前学过的书籍,经过一段时间后对语法的掌握更加地熟练。但是实际上在编写的时候,手打难免会碰到各类的问题,例如忘记在语句后面打“;”

等一系列的小问题,所以自能耐心。对求概率,信源熵,哈夫曼编码的等公式有深入了解后,再构造一个程序的大体框架,再对各个语句的功能进行编写,一步步地完成。运行错误的话要慢慢检查,特别是一些小细节,直到程序完美运行。

尽管在完成设计过程中遇到了很多困难,但是通过自己和同组同学的努力最后还是完成了,不仅对信息论这门课的内容有了更加深入的了解,更增长了自己动手编程的能力。其中我最大的感悟是,学习一门课,要把它学好不仅仅是学懂书上的知识点,书本之外的知识也要掌握,这不是在课堂上就能学会的,要靠自己在课后慢慢地积累。身为大学生的我们把太多时间花在宿舍看电影和玩游戏上面,以至于荒废了太多的时间。对于身处大三的我们来说,剩下的时间尤为重要,若不考研,明年就该找工作了,那时自己身上没一点技能怎能在社会立足。所以我认为现在能做的最近本的就是把本专业的主要内容精髓学好,然后在这个基础上学习一些其他必备的技能。

人的一生就是在不断学习中度过,停止学习就等于与社会隔离,作为大学生就是应该与时俱进奋发图强。以上就是我对这次课程设计真正的感悟。

参考文献

1曹雪虹、张宗橙编著《《信息论与编码》》.清华大学出版社,2009年第2版

2 贾宗璞、许合利编著《《C语言程序设计》》.人民邮电出版社,2010年第1版

3 严蔚敏、吴伟民编著《《数据结构(C语言版)》》.清华大学出版社,1997年第1版

附页,源程序;

一.统计信源熵

#include

#include

void main()

{ double result=0;

int k = 0,a=0,num[26] = {0};

double p[26] = {0};

int j;

char ch;

while((ch=getchar())!='\n')

{

if(ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')

{

if(ch < 97)

j = ch - 65;

else

j = ch - 97;

num[j]++;

k++;

}

}

printf("各字母出现的次数:\n");

for(int i = 0; i < 26; i++)

{

printf("%c:%d\t", 'A' + i, num[i]);

}

printf("\n字母个数:%d\n", k);

printf("各字母出现的概率:\n");

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

{

printf("%c:%f\t", 'A' + i, (double)num[i]/k);

p[a]=(double)num[i]/k;

a++;

}

printf("\n");

/*******求信源熵*******/

for(a = 0; a < 26; a++)

{if(p[a]!=0)

result=result+p[a]*log(p[a])/log(2);

}

result=-result;

printf("信源熵为:%f",result);

printf("\n");

}

}二、哈夫曼编码程序

/**

file: hoffman coder.c

date: 2015.03.24

describe: 霍夫曼编解码(仅有霍夫曼码元的生成部分)

*/

#include

#include

#include

#include

#define MAX_MESSAGE 1024

#define MAX_MESSAGE_BITS 64

#define DEFAULT_FILE "probability.txt"

struct message_info

{

int a_i; /* 消息符号, a1, a2, a3 .... , 值为唯一的*/

double probability; /* 消息符号对应的概率*/

int father; /* 父节点, 用a_i 表示*/

int left; /* 左子节点, 用a_i 表示*/

int right; /* 子右节点, 用a_i 表示*/

char code[MAX_MESSAGE_BITS]; /* 编码后的hoffman 码值存放在此处*/

};

/* 从文件中读取消息符号概率并存储于struct message_info *message_info 中*/

int hoffman_read_from_file(FILE *fp, struct message_info *message_info);

/* 简单的冒泡排序, 适用于消息种数较少的情况, (n < 10000) */

int bubble_sort(struct message_info **p_message_info, int num);

/* 合并最低的两个符号, 并使总符号数减少1, 以被合并的符号将不再参与合并*/

int hoffman_combine(struct message_info **p_message_info, int message_info_num, int *message_info_pos);

/* 生成hoffman 码*/

int hoffman_create_code(struct message_info *message_info, int message_info_num);

int main()

{

int i, j;

FILE *fp;

struct message_info message_info[MAX_MESSAGE];

struct message_info *p_message_info[MAX_MESSAGE];

struct message_info *find;

int message_info_num, message_info_pos;

double entropy, encoded_efficiency, average_code_length; /* 信源熵, 编码效率和平均编码长度*/

if((fp = fopen(DEFAULT_FILE, "r")) == NULL)

return -1;

else{

message_info_num = hoffman_read_from_file(fp, message_info);

}

average_code_length = encoded_efficiency = entropy = 0.0;

for(j = 0; j < message_info_num; j ++){

entropy += message_info[j].probability * log10(message_info[j].probability) / log10(2);

}

for(j = 0; j < MAX_MESSAGE; j ++){

p_message_info[j] = &message_info[j];

}

message_info_pos = message_info_num;

for(j = 0; j < message_info_num - 1; j ++){

hoffman_combine(p_message_info, message_info_num, &message_info_pos);

bubble_sort(p_message_info, message_info_num + j + 1);

for(i= 0; i < message_info_num - 1 - j; i ++)

printf("a_i = %2d, p = %g\n", i, p_message_info[i] -> probability);

printf("----------------------------------\n");

}

hoffman_create_code(message_info, message_info_num);

printf("\n\ninformation :\n");

for(j = 0; j < 2 * message_info_num - 1; j ++)

printf("a_i = %2d, p = %4.3g, left = %2d, right = %2d, father = %2d, hoffman_code: %s\n", message_info[j].a_i, message_info[j].probability, message_info[j].left, message_info[j].right, message_info[j].father, message_info[j].code);

for(j = 0; j < message_info_num; j ++)

average_code_length += message_info[j].probability * strlen(message_info[j].code);

printf("\n\n## 信源熵为%g\n## 平均编码长度为%g\n## 编码效率为%g\n\n", -entropy, average_code_length, -entropy / average_code_length);

system("pause");

}

/* 从文件中读取消息符号概率并存储于struct message_info *message_info 中*/

int hoffman_read_from_file(FILE *fp, struct message_info *message_info)

{

int count, message_info_pos;

message_info_pos = 0;

while((count = fscanf(fp, "%lf", &(message_info[message_info_pos].probability))) > 0){

message_info[message_info_pos].a_i = message_info_pos; /* a_i 从0 开始*/

message_info_pos ++;

}

return message_info_pos;

}

/* 简单的冒泡排序, 适用于消息种数较少的情况, (n < 10000) */

int bubble_sort(struct message_info **p_message_info, int num)

{

int i, j;

struct message_info *temp;

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

for(j = i + 1; j < num; j ++){

if(p_message_info[i] -> probability < p_message_info[j] -> probability){

temp = p_message_info[i];

p_message_info[i] = p_message_info[j];

p_message_info[j] = temp;

}

}

return 0;

}

/* 合并最低的两个符号, 并使总符号数减少1 */

int hoffman_combine(struct message_info **p_message_info, int message_info_num, int *message_info_pos)

{

/* 从大到小排序*/

bubble_sort(p_message_info, message_info_num * 2 - *message_info_pos);

p_message_info[message_info_num * 2 - *message_info_pos] -> a_i = - (message_info_num - *message_info_pos + 1);

p_message_info[message_info_num * 2 - *message_info_pos] -> code[0] = '\0';

p_message_info[message_info_num * 2 - *message_info_pos] -> probability =

p_message_info[*message_info_pos - 1] -> probability + p_message_info[*message_info_pos - 2] -> probability;

p_message_info[message_info_num * 2 - *message_info_pos] -> left =

p_message_info[*message_info_pos - 1] -> a_i;

p_message_info[message_info_num * 2 - *message_info_pos] -> right = p_message_info[*message_info_pos - 2] -> a_i;

p_message_info[*message_info_pos - 1] -> father = p_message_info[message_info_num * 2 - *message_info_pos] -> a_i;

p_message_info[*message_info_pos - 2] -> father = p_message_info[message_info_num * 2 - *message_info_pos] -> a_i;

(*message_info_pos) --;

return 0;

}

/* 生成hoffman 码*/

int hoffman_create_code(struct message_info *message_info, int message_info_num) {

int i, j, code_num;

char code[MAX_MESSAGE_BITS];

struct message_info *find, *find_father, *find_now;

for(i = 0; i < message_info_num; i ++){

code_num = 0;

find_now = &message_info[i];

while(1){

/* 数字 1.0 代表了所有消息符号概率和, 如果和不为1, 这里需要更改*/

if(fabs(find_now -> probability - 1.0) <= DBL_MIN)

break;

find_father = &message_info[find_now -> father < 0 ? - find_now ->

father + message_info_num - 1 : find_now -> father];

if(find_father -> left == find_now -> a_i)

code[code_num ++] = '1';

else

code[code_num ++] = '0';

find_now = find_father;

}

code[code_num] = '\0';

strrev(code); /* 反转code */

message_info[i].code[0] = '\0';

strcat(message_info[i].code, code);

}

return 0;

}

信息论与编码课程报告

Turbo码编码与译码方法 一、前言: Turbo码自1993年被提出以来,就以其优异的纠错性能而备受关注,并被主要通信标准所采纳。Turbo码是用短码构造等效意义的长码,以达到长码 的纠错性能而减少解码复杂度。在强噪声低洗澡比的条件下,如E b/N0=0.7dB, 采用编码效率R=1/2的Turbo码,经过18次迭代解码后,仍然具有极低的误 码率。Turbo码得这一特性对于强噪声环境下数字通信与数字信号传输具有重 要的应用价值。Turbo码的发现,标志着信道编码理论与技术的研究进入了一 个崭新的阶段,对现代编码理论的发展起着重要的作用。 二、Turbo码的编码原理: Turbo码编码器由两个递归系统卷积吗编码器(RSC1和RSC2)通过一个交织器并行级联而成,编码后经过删除或复用,产生不同码率的码字,进入传输 信道。Turbo码编码器结构框图如图1所示,信息序列d={d1,d2,…d N}经过N 位交织器,形成一个新序列 d‘={d1’,d2’,…,d N’}(长度与内容没变,但比特位置经过重新排列)。d和d‘分 别传送到两个分量码编码器(RSC1和RSC2)。一般情况下,这两个分量码编 码器结构相同,生成序列X1p和X2p。为了提高误码率,序列X1p和X2p需要经过 删除器,采用删除技术从这两个校验序列中周期地删除一些校验位,形成校验 位序列X P与编码序列u(为方便表述,也用X S表示)经过复用,生成Turbo 码序列。例如,假如图中两个分量编码器的码率均是1/2,为了得到1/2码率 的Turbo码,可以采用这样的删除矩阵:P=[10,01],即删除来自RSC1的校验 序列X1p的偶数位置比特,与来自RSC2的校验序列X2p的奇数位置比特。 S X 图1 交织器在Turbo码中起关键作用。表面上看,它仅仅是将信息序列中的N个比特的位置进行随机置换,实际上,它很大程度上影响了Turbo码的性能。通过随机交织,使得编码序列在长为2N和3N(不使用删除)比特的范围内具有记忆性,从而有简单的短码得到近似长码。当交织器充分大时,Turbo码就具有近似于随机长码的特性。 三、Turbo码的译码原理:

信息论与编码课程设计报告

目录 一:实验原理----------------------------1 二:程序源代码--------------------------1 三:实验分析-----------------------------6 四:实验结论---------------------------7

赫夫曼编码 一:实验原理 哈夫曼编码的具体步骤归纳如下: ① 概率统计(如对一幅图像,或m幅同种类型图像作灰度信号统计),得到n个不同概率的信息符号。 ② 将n个信源信息符号的n个概率,按概率大小排序。 ③ 将n个概率中,最后两个小概率相加,这时概率个数减为n-1个。 ④ 将n-1个概率,按大小重新排序。 ⑤ 重复③,将新排序后的最后两个小概率再相加,相加和与其余概率再排序。 ⑥ 如此反复重复n-2次,得到只剩两个概率序列。 ⑦ 以二进制码元赋值,构成哈夫曼码字。编码结束。 哈夫曼码字长度和信息符号出现概率大小次序正好相反,即大 概信息符号分配码字长度短,小概率信息符号分配码字长度长。 C、哈夫曼编码的特点 (1)哈夫曼编码的构造顺序明确,但码不是唯一的(因以大赋1还是小的赋1而异;

(2)哈夫曼编码的字长参差不齐,硬件实现不方便; (3)只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信源分布均匀时,一般不使用哈夫曼编码。 二:程序源代码: #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE 59 #define MAXBIT 10 #define LENTH 30 #include "" #include typedef struct{ float gailv; int flag; int parent; int lchild; int rchild; char ch; int t; }HNodeType; typedef struct{ int bit[MAXBIT]; int start; }HCodeType; typedef struct{ float gailv; char letter; }mytype; /*it's the type of data save in file*/ typedef struct filehuff{ int count; mytype mydata[MAXLEAF]; filehuff(){count=0; }; }; filehuff filedata; char code[MAXVALUE]; HNodeType HuffNode[MAXNODE]; void savetofile() { FILE *fp;

信息论与编码课后习题答案

1. 有一个马尔可夫信源,已知p(x 1|x 1)=2/3,p(x 2|x 1)=1/3,p(x 1|x 2)=1,p(x 2|x 2)=0,试画出该信源的香农线图,并求出信源熵。 解:该信源的香农线图为: 1/3 ○ ○ 2/3 (x 1) 1 (x 2) 在计算信源熵之前,先用转移概率求稳定状态下二个状态x 1和 x 2 的概率)(1x p 和)(2x p 立方程:)()()(1111x p x x p x p =+)()(221x p x x p =)()(2132x p x p + )()()(1122x p x x p x p =+)()(222x p x x p =)(0)(2131x p x p + )()(21x p x p +=1 得4 3 1)(=x p 4 12)(=x p 马尔可夫信源熵H = ∑∑- I J i j i j i x x p x x p x p )(log )()( 得 H=0.689bit/符号 2.设有一个无记忆信源发出符号A 和B ,已知4 341)(.)(= =B p A p 。求: ①计算该信源熵; ②设该信源改为发出二重符号序列消息的信源,采用费诺编码方法,求其平均信息传输速率; ③又设该信源改为发三重序列消息的信源,采用霍夫曼编码方法,求其平均信息传输速率。 解:①∑- =X i i x p x p X H )(log )()( =0.812 bit/符号 ②发出二重符号序列消息的信源,发出四种消息的概率分别为 用费诺编码方法 代码组 b i BB 0 1 BA 10 2 AB 110 3 AA 111 3 无记忆信源 624.1)(2)(2 ==X H X H bit/双符号 平均代码组长度 2B =1.687 bit/双符号 B X H R )(22==0.963 bit/码元时间 ③三重符号序列消息有8个,它们的概率分别为 用霍夫曼编码方法 代码组 b i BBB 64 27 0 0 1 BBA 64 9 0 )(6419 1 110 3

信息论与编码实验报告.

本科生实验报告 实验课程信息论与编码 学院名称信息科学与技术学院 专业名称通信工程 学生姓名 学生学号 指导教师谢振东 实验地点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

信息论与编码课程设计..

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程101 学生姓名: 学号: 指导教师:吕卅王超 设计时间:2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面, 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

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

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

年月日 目录 实验一信源熵值的计算 (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]);

信息论与编码课程设计报告书

信息论与编码课程设计报告设计题目:判断唯一可译码、香农编码 专业班级电信12-03 学号7 学生琳 指导教师成凌飞 教师评分 2015年3月21日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 通过本次课程设计的练习,使学生进一步巩固信源熵、信源编码的基本原理,掌握具体的编码方法,熟悉编程软件的使用,培养学生自主设计、编程调试的开发能力,同时提高学生的实践创新能力。 1、判断唯一可译码 利用尾随后缀法判断任意输入的码是否为唯一可译码,即设计一个程序实现判断输入码组是否为唯一可译码这一功能。 2、香农编码 熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、判断唯一可译码 在我们学习使用了克劳夫特不等式之后,知道唯一可译码必须满足克劳夫特不等式。但是克劳夫特不等式仅仅是存在性的判定定理,即该定理不能作为判断一种码是否为唯一可译码的依据。也就是说当码字长度和码符号数满足克劳夫特不等式时,则必可以构造出唯一可译码,否则不能构造出唯一可译码。因此我们必须找到一种能够判断一种码是否为唯一可译码的方法,尾随后缀法。 尾随后缀法算法描述: 设C为码字集合,按以下步骤构造此码的尾随后缀集合F: (1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中; (2) 考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi 是Wj

信息论与编码理论课后习题答案高等教育出版社

信息论与编码理论习题解 第二章-信息量和熵 解: 平均每个符号长为:154 4.0312.032= ?+?秒 每个符号的熵为9183.03log 3 1 23log 32=?+?比特/符号 所以信息速率为444.34 15 9183.0=?比特/秒 解: 同步信号均相同不含信息,其余认为等概, 每个码字的信息量为 3*2=6 比特; 所以信息速率为600010006=?比特/秒 解:(a)一对骰子总点数为7的概率是 36 6 所以得到的信息量为 585.2)366(log 2= 比特 (b) 一对骰子总点数为12的概率是36 1 所以得到的信息量为 17.536 1 log 2= 比特 解: (a)任一特定排列的概率为 ! 521 ,所以给出的信息量为 58.225! 521 log 2 =- 比特 (b) 从中任取13张牌,所给出的点数都不相同的概率为 1352 13 13 521344!13C A =? 所以得到的信息量为 21.134 log 1313 52 2=C 比特. 解:易证每次出现i 点的概率为 21 i ,所以

比特比特比特比特比特比特比特398.221 log 21)(807.1)6(070.2)5(392.2)4(807.2)3(392.3)2(392.4)1(6,5,4,3,2,1,21 log )(26 12=-==============-==∑ =i i X H x I x I x I x I x I x I i i i x I i 解: 可能有的排列总数为 27720! 5!4!3! 12= 没有两棵梧桐树相邻的排列数可如下图求得, Y X Y X Y X Y X Y X Y X Y X Y 图中X 表示白杨或白桦,它有???? ??37种排法,Y 表示梧桐树可以栽 种的位置,它有???? ??58种排法,所以共有???? ??58*???? ??37=1960种排法保证没有 两棵梧桐树相邻,因此若告诉你没有两棵梧桐树相邻时,得到关于树排列的信息为1960log 27720log 22-= 比特 解: X=0表示未录取,X=1表示录取; Y=0表示本市,Y=1表示外地; Z=0表示学过英语,Z=1表示未学过英语,由此得

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

《信息论与信源编码》实验报告 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:

信息论与编码课后答案

一个马尔可夫信源有3个符号{}1,23,u u u ,转移概率为:()11|1/2p u u =,()21|1/2p u u =, ()31|0p u u =,()12|1/3p u u =,()22|0p u u =,()32|2/3p u u =,()13|1/3p u u =,()23|2/3p u u =,()33|0p u u =,画出状态图并求出各符号稳态概率。 解:状态图如下 状态转移矩阵为: 1/21/2 01/302/31/32/30p ?? ?= ? ??? 设状态u 1,u 2,u 3稳定后的概率分别为W 1,W 2、W 3 由1231WP W W W W =??++=?得1231132231231 112331223 231W W W W W W W W W W W W ?++=???+=???=???++=? 计算可得1231025925625W W W ?=??? =?? ?=?? 由符号集{0,1}组成的二阶马尔可夫链,其转移概率为:(0|00)p =,(0|11)p =,(1|00)p =, (1|11)p =,(0|01)p =,(0|10)p =,(1|01)p =,(1|10)p =。画出状态图,并计算各状态 的稳态概率。 解:(0|00)(00|00)0.8p p == (0|01)(10|01)0.5p p == (0|11)(10|11)0.2p p == (0|10)(00|10)0.5p p == (1|00)(01|00)0.2p p == (1|01)(11|01)0.5p p == (1|11)(11|11)0.8p p == (1|10)(01|10)0.5p p ==

信息论与编码实验报告

实验一 绘制二进熵函数曲线(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) 五、实验结果

信息论与编码课程设计报告,统计信源熵与香农编码

信息论与编码课程设计报告设计题目:统计信源熵与香农编码 专业班级电信 12-06 学号 学生姓名 指导教师 教师评分 2015年 3 月 30日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 1.统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2.香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。 1、信源熵 定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。 计算公式: ) (log )(-)x (i i i x p x p H ∑= 2、香农编码过程: (1)将信源消息符号按其出现的概率大小依次排列为 n p p ≥???≥≥21p (2)确定满足下列不等式的整数码长i K 为 1)()(+-<≤-i i i p lb K p lb (3)为了编成唯一可译码,计算第i 个消息的累加概率 ∑-==11) (i k k i a p P (4)将累计概率 i P 变换成二进制数。 (5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图 1、统计信源熵 开始 读取给定文件 判断文件是否打开否 并且不为空 是 统计文本字符,直关闭文件 至文本字符读完。 统计同一字符(不分 大小写)出现的次数 计算字符概率 计算信源熵 输出 结束

信息论与编码实验报告

信息论与编码实验报告-标准化文件发布号:(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 次称量中达到

信息论与编码课程大作业二进制哈夫曼编码

信息论与编码课程大作业 题目:二进制哈夫曼编码 学生姓名: 学号:2010020200 专业班级: 2010级电子信息班 2013年5月18日

二进制哈夫曼编码 1、二进制哈夫曼编码的原理及步骤 1、1信源编码的计算 设有N 个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n 、信源的概率分布P={p(s i )},i=1,…..,n 。且各符号xi 的以li 个码元编码,在变长字编码时每个符号的平均码长为∑==n i li xi p L 1)( ; 信源熵为:)(log )()(1 xi p xi p X H n i ∑=-= ; 唯一可译码的充要条件:11 ≤∑=-n i Ki m ; 其中m 为码符号个数,n 为信源符号个数,Ki 为各码字长度。 构造哈夫曼数示例如下图所示。 1、2 二元霍夫曼编码规则 (1)将信源符号依出现概率递减顺序排序。 (2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结 0.60 0.15 0.09 0.30 1.00 0.60 0.03 0.30 0.15 0.40 0.05 0.04 0.03

果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用s1 表示。 (3)将缩减信源 s1 的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。 (4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号 的概率之和必为 1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 1、3 二元哈夫曼编码流程图如下图所示。 是 是 开始 等待数据输入 判断输入的概 率是否小于零 判断概率和是 否大于1 生成一个n - 1行n 列的数组 按照哈弗曼的编码规则进行编 码 计算码长 计算编码效率 计算信源熵 显示结果 结束

信息论与编码理论习题答案全解

信息论与编码理论习题答案全解

第二章 信息量和熵 2.2 八元编码系统,码长为3,第一个符号用于同步,每秒1000个码字,求它的 信息速率。 解:同步信息均相同,不含信息,因此 每个码字的信息量为 2?8log =2?3=6 bit 因此,信息速率为 6?1000=6000 bit/s 2.3 掷一对无偏骰子,告诉你得到的总的点数为:(a) 7; (b) 12。问各得到多少 信息量。 解:(1) 可能的组合为 {1,6},{2,5},{3,4},{4,3},{5,2},{6,1} )(a p =366=6 1 得到的信息量 =) (1 log a p =6log =2.585 bit (2) 可能的唯一,为 {6,6} )(b p =361 得到的信息量=) (1 log b p =36log =5.17 bit 2.4 经过充分洗牌后的一副扑克(52张),问: (a) 任何一种特定的排列所给出的信息量是多少? (b) 若从中抽取13张牌,所给出的点数都不相同时得到多少信息量? 解:(a) )(a p =! 521 信息量=) (1 log a p =!52log =225.58 bit (b) ???????花色任选 种点数任意排列 13413!13 )(b p =13 52134!13A ?=1352 13 4C 信息量=1313 52 4log log -C =13.208 bit

2.9 随机掷3颗骰子,X 表示第一颗骰子的结果,Y 表示第一和第二颗骰子的 点数之和,Z 表示3颗骰子的点数之和,试求)|(Y Z H 、)|(Y X H 、 ),|(Y X Z H 、)|,(Y Z X H 、)|(X Z H 。 解:令第一第二第三颗骰子的结果分别为321,,x x x ,1x ,2x ,3x 相互独立, 则1x X =,21x x Y +=,321x x x Z ++= )|(Y Z H =)(3x H =log 6=2.585 bit )|(X Z H =)(32x x H +=)(Y H =2?( 361log 36+362log 18+363log 12+364log 9+365log 536)+36 6 log 6 =3.2744 bit )|(Y X H =)(X H -);(Y X I =)(X H -[)(Y H -)|(X Y H ] 而)|(X Y H =)(X H ,所以)|(Y X H = 2)(X H -)(Y H =1.8955 bit 或)|(Y X H =)(XY H -)(Y H =)(X H +)|(X Y H -)(Y H 而)|(X Y H =)(X H ,所以)|(Y X H =2)(X H -)(Y H =1.8955 bit ),|(Y X Z H =)|(Y Z H =)(X H =2.585 bit )|,(Y Z X H =)|(Y X H +)|(XY Z H =1.8955+2.585=4.4805 bit 2.10 设一个系统传送10个数字,0,1,…,9。奇数在传送过程中以0.5的概 率错成另外一个奇数,其余正确接收,求收到一个数字平均得到的信息量。 解: 信道 X Y 9,7,5,3,1=i 8,6,4,2,0=i √Χ );(Y X I =)(Y H -)|(X Y H 因为输入等概,由信道条件可知,

信息论霍夫曼编码

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

实验目的 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);%从第二列开始,每列的最后一个元素记录特征元素在

信息论与编码课程设计(哈夫曼编码的分析与实现)

建筑大学 电气与电子信息工程学院 信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现 专业班级:电子信息工程 101 学生: 学号: 指导教师:吕卅王超 设计时间: 2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导12345678,,,,,()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

信息论与编码理论第二章习题答案

I (X ;Y=1)= P(x/Y 1)I(x;Y 1) x P(x/Y 1)log P(x/Y 1) P(x) = P(X 0/Y 1)log P(X 0/Y 1) P(X 0) P(X 1/Y 1)log P(X 1/Y 1) P(X 1) 部分答案,仅供参考。 信息速率是指平均每秒传输的信息量点和划出现的信息量分别为log3Jog3, 2’ 一秒钟点和划出现的次数平均为 1 15 2 1 ~4 0.20.4 - 3 3 一秒钟点和划分别出现的次数平均为巴5 4 4 那么根据两者出现的次数,可以计算一秒钟其信息量平均为10 log 3 5 竺 5 4 2 4 4 2 解: ⑻骰子A和B,掷出7点有以下6种可能: A=1,B=6; A=2,B=5; A=3,B=4; A=4,B=3; A=5,B=2; A=6,B=1 概率为6/36=1/6,所以信息量 -log(1/6)=1+log3 ~ bit (b)骰子A和B,掷出12点只有1种可能: A=6,B=6 概率为1/36,所以信息量 -log(1/36)=2+log9 ~ bit 解: 出现各点数的概率和信息量: 1 点:1/21 , log21 ?bit ; 2 点:2/21 , log21-1 ?bit ; 3 点:1/7 , log7 4 点:4/21 , log21-2 5 点:5/21 , log (21/5 )~; 6 点:2/ 7 , log(7/2)? 平均信息量: (1/21) X +(2/21) X +(1/7) X +(4/21) X +(5/21) X +(2/7) 解: X=1:考生被录取;X=0考生未被录取; Y=1:考生来自本市;Y=0考生来自外地; Z=1:考生学过英语;z=o:考生未学过英语 P(X=1)=1/4, P( X=q=3/4; P( Y=1/ X=1)=1/2 ;P( Y=1/ X=0)=1/10 ;P(Z=1/ Y=1 )=1, P( Z=1/ X=0, Y=0 )=, P( Z=1/ X=1, Y=0 )=, P(Z=1/Y=0)= (a)P(X=0,Y=1)=P(Y=1/X=0)P(X=0)=, P(X=1,Y=1)= P(Y=1/X=1)P(X=1)= P(Y=1)= P(X=0,Y=1)+ P(X=1,Y=1)= P(X=0/Y=1)=P(X=0,Y=1)/P(Y=1)=, P(X=1/Y=1)=P(X=1,Y=1)/P(Y=1)=

信息论与编码自学报告09266

《信息论与编码》课程自学报告 题目:《信息论与编码》自学报告 学号: 姓名: 任课教师:黄素娟 联系方式: 二零17年 1月 10日

第一部分 阐述“第四章 信息率失真函数”主要内容 1、基本概念 失真函数与平均失真度 平均失真度 在离散情况下,信源X ={a1,a2,…ar} ,其概率分布p(x)=[p(a1),p(a2),…,p(ar)] ,信宿Y = {b1,b2,…bs} 。若已知试验信道的传递概率为p(bj/ai)时,则平均失真度为: 1 1 ()(,)()(/)(,) r s i j i i j XY i j D p ab d a b p a p b a d a b === =∑∑∑ 凡满足保真度准则---平均失真度D D0的试验信通称D 失真许可的试验信道。 失真函数 假如某一信源X ,输出样值为xi ,xi {a1,…an},经过有失真的信源编码器,输出Y ,样值为yj ,yj {b1,…bm}。如果xi =yj ,则认为没有失真;如果xi yj ,那么就产生了失真。失真的大小,用一个量来表示,即失真函数d(xi ,yj),以衡量用yj 代替xi 所引

起的失真程度。一般失真函数定义为 最常用的失真函数 前三种失真函数适用于连续信源,后一种适用于离散信源。 信息率失真函数的定义 互信息取决于信源分布和信道转移概率分布。当p(xi)一定时,互信息I是关于p(yj/xi) 的U型凸函数,存在极小值。在上述允许信道PD中,可以寻找一种信道pij,使给定的信源p(xi)经过此信道传输后,互信息I(X;Y)达到最小。该最小的互信息就称为信息率失真函数R(D),即 单位:bit/信源符号 对于离散无记忆信源,R(D)函数可写成

相关文档
最新文档