哈夫曼编码信息论大作业模板

哈夫曼编码信息论大作业模板
哈夫曼编码信息论大作业模板

哈夫曼编码

1.前言:

H affman算法是个简单而高效的贪心算法,主要用来创建最优二叉树.可以在通讯时,对于出现频率较高的字符,用较少的比特数便可以进行通讯.从而节省通讯线路的资源消耗。

该算法在各类数据结构, 算法,组合数学,离散数学,图论等主题的书籍中都有所涉及。故本文不再赘述,本文致力于用Haffman算法实现压缩与解压缩,采用的语言为C语言,编译环境VC++6.0.

下面给出[1]中实现的Haffman树的结构及创建算法,有两点说明:

a) 这里的Haffman树采用的是基于数组的带左右儿子结点及父结点下标作为存储结点

的二叉树形式,这种空间上的消耗带来了算法实现上的便捷。

b) 由于对于最后生成的Haffman树,其所有叶子结点均为从一个内部树扩充出去的,所以,当外部叶子结点数为m个时,内部结点数为m-1.整个Haffman树的需要的结点数为2m-1. 2压缩过程的实现:

压缩过程的流程是清晰而简单的:

1创建Haffman树à2打开需压缩文件à3将需压缩文件中的每个ascii码对应的haffman编码按bit单位输出à4文件压缩结束。

其中,步骤1和步骤3是压缩过程的关键。

a) 步骤1:这里所要做工作是得到Haffman数中各叶子结点字符出现的频率并进行创建. 统计字符出现的频率可以有很多方法:如每次创建前扫描被创建的文件,“实时”的生成

各字符的出现频率;或者是创建前即做好统计.本文采用后一种的方案,统计了十篇不同的文章中字符出现的频率。当前,也可以根据被压缩文件的特性有针对性的进行统计,如要压缩C语言的源文件,则可事先对多篇C语言源文件中出现的字符进行统计,这样,会创建出高度相对较“矮”的Haffman树,从而提高压缩效果。

创建Haffman树的算法前文已有陈述,这里就不再重复了。

b) 步骤3: 将需压缩文件中的每个ascii码对应的haffman编码按bit单位输出.

这是本压缩程序中最关键的部分:这里涉及“转换”和“输出”两个关键步骤:

“转换”部分大可不必去通过遍历Haffman树来找到每个字符对应的哈夫曼编码,可以将每个Haffman码值及其对应的ascii码存放于如下所示的结构体中:

2.算术编码

(1)算术编码是把一个信源表示为实轴上0和1之间的一个区间,信源集合中的每一个元素都用来缩短这个区间。

(2)设计思想:其算法的主要算法基本思想:首先就是构造一个结构体用于存储信源的相关信息(包括信源符号,信源概率,编码的上下限);接着就是初始化信源的相关信息,如初始化编码间隔;利用算术编码的原理构造编码方法,最后实现编码。

(3)调试分析:此算法主要就是算术编码方法的构造,利用算法中Initial_message()函数初始化以后,根据初始化间隔完成编码序列的编码。在调试的过程中经常遇到一些小问题,通过一步步的调试以及修改,问题一个的解决了。同时也遇到比较大的问题,就是编码方法过程的实现,最大的体会就是必须深入理解次编码方法的原理。

(4)流程图

开始

输入信源符号及其概率

初始化信源符号的初始间隔

输入要编码的序列

进行算术编码

输出编码结果

结束

(5)测试结果:

(6)源程序清单:

#include

#include

#include

#define N 4 //信源符号的个数

#define n 7 //要编码的序列长度

struct ARC

{

char m[N];

float P[N];

float Low[N];

float High[N];

float low;

float high;

}code;

Initial_message() //初始化编码间隔

{

float F=0;

int i=0,j;

printf("请输入%d个信源符号及其概率!\n",N);

for(i=0;i

{

scanf("%c %f",&code.m[i],&code.P[i]);

getchar();

}

for(j=0;j

{

code.Low[j]=F;

F=F+code.P[j];

code.High[j]=F;

}

printf("信源符号概率初始编码间隔\n");

for(j=0;j

{

printf("%c %f [%f,%f)\n",code.m[j],code.P[j],code.Low[j],code.High[j]);

}

}

main()

{

int i=0;

int Bcode[10];

char c[n];

char *p=NULL;

char *q=NULL;

float s,mid;

Initial_message();

printf("请输入长度为%d要编码的序列:",n);

scanf("%s",c);

p=c;

q=code.m;

while(q!=NULL)//判定第一个需要编码序列的第一符号所在的间隔

{

if(*p==*q)

{

code.low =code.Low [i];

code.high =code.High [i];

printf("%c\n[%f,%f)\n",code.m[i],code.low ,code.high );

goto ss;

}

else

{

q++;

i++;

}

}

ss:

p++;

while(*p!='\0')//利用算术编码的方法,求出编码的十进制结果

{

int k=0;

float t;

float pt=0;

int k1;

q=code.m;

while(*q!='\0')

{

if(*p==*q)

{

if(k==0)

{

t=code.high -code.low ;

code.low =code.low +t*pt;

code.high =code.low +t*code.P [k];

printf("%c\n[%f,%f)\n",code.m [k],code.low ,code.high );

goto xx;

}

else

{

k1=k;

while(k1)

{

t=code.high -code.low ;

pt=pt+code.P[k1-1];

k1--;

}

code.low =code.low +t*pt;

code.high =code.low +t*code.P [k];

printf("%c\n[%f,%f)\n",code.m [k],code.low ,code.high );

goto xx;

}

}

else

q++;

k++;

}

xx:

p++;

}

mid=(code.high-code.low )/2+code.low ;

s=2*mid;

for(i=0;i<10;i++) //编码结果

{

if(s>1)

{ Bcode[i]=1;

s=s-1;

}

else

{

Bcode[i]=0;

}

s=2*s;

printf("%d",Bcode[i]);

}

printf("\n");

}

3. Huffman编码对英文文本的压缩和解压缩

(1) 根据信源压缩编码——Huffman编码的原理,制作对英文文本进行压缩和解压缩的软件。要求软件有简单的用户界面,软件能够对运行的状态生成报告,分别是:字符频率统计报告、编码报告、压缩程度信息报告、码表存储空间报告。

(2) 设计思想:首先构造一个结构体用于统计字符频率,然后把统计后的结果当作信源;接着用Haffman编码的方法对其编码,编码后对输入的英语文本进行编码的转换,即用Haffman编码的每一个字符的编码代替输入的英语文本每一字符,输入的英语文本就变成了01代码流,最后利用这01代码流每八位压缩成相对应的字符。

压缩流程:

读取扫描文本文件——〉统计字符频率——〉生成码字——〉保存压缩文件

解压缩流程:

读取扫描压缩文件——〉提取字符频率——〉生成码树——〉保存文本文件(3)调试分析:本算法可以分成四个部分即统计字符概率,Huffman编码,压缩文件和解压文件四部分,也就是次算法中函数stati() ,函数HCode() 和函数compress()的构建,用于压缩后的字符出现了乱码,所以对解压文件这部分难以实现,这也是此算法失败的地方。经过不断的调试和修改还是只完成统计字符概率,Huffman编码和压缩文件这三部分。

(4)流程图

开始

输入文件名

输入要压缩的英语文本

统计字符频率

Huffman编码

压缩文件

结束

(5)测试结果:

(6)源程序清单:

#include

#include

#define MaxValue 1000 //设定权值最大值

#define MaxBit 10 //设定的最大编码位数#define MaxN 1000 //设定的最大结点个数#include"Huffman.h"

float ComNum=0;//用于计算压缩后的字符个数struct statistics //统计字符频率

{

char a[100]; //出现的字符

double p[100]; //字符出现的概率

int tag[100];//每一个字符出现次数

int num; //总计出现的字符种类个数

float n; //总计字符出现的次数

}TJ;

char cc[100];

void raplace(myHaffCode);

stati()//统计字符

{

FILE *fp;

FILE *fp1;

char ch,filename[10];

int i=0,k;

printf("请输入用于保存字符文本的文件名,如file.txt\n");

scanf("%s",filename);

getchar();

printf("请输入英语文本:");

gets(cc);

fp=fopen(filename,"w+");

fprintf(fp,"%s",cc);

fclose(fp);

TJ.num=1;

TJ.n=0;

if((fp1=fopen(filename,"r"))==NULL)

{

printf("文件无法打开!");

exit(0);

}

ch=fgetc(fp1);

TJ.a[i]=ch;

while(ch!=EOF)//统计字符出现的次数,并计算起概率。

{

int j;

for(j=i;j>=0;j--)

{

if(TJ.a[j]==ch)

{

TJ.tag [j]+=1;

goto xx;

}

}

i++;

TJ.a[i]=ch;

TJ.tag[i]+=1;

TJ.num++;

xx:

ch=fgetc(fp1);

TJ.n++;

}

fclose(fp1);

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

{

TJ.p[k]=TJ.tag[k]/TJ.n;

}

printf("\t字符统计\n");

printf("字符出现的次数概率\n");

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

{

printf(" %c %d %1.10f\n",TJ.a[k],TJ.tag[k],TJ.p[k]);

}

}

HCode()//haffman编码

{

int i,j,n=TJ.num;

HaffNode *myHaffTree=(HaffNode *)malloc(sizeof(HaffNode)*(2*n+1));

Code *myHaffCode=(Code *)malloc(sizeof(Code)*TJ.num);

for(i=0;i

{

int t=TJ.tag[i];

char t1=TJ.a[i];

for(j=i+1;j

{

if(t>TJ.tag[j])

{

t=TJ.tag[j];

TJ.tag[j]=TJ.tag[i];

TJ.tag[i]=t;

t1=TJ.a[j];

TJ.a[j]=TJ.a[i];

TJ.a[i]=t1;

}

}

}

Haffman(TJ.tag,n,myHaffTree);//建立叶结点个数为n权值数组为J.tag的哈夫曼树

HaffmanCode(myHaffTree,n,myHaffCode);//由n个结点的夫曼树myHaffTree构造哈夫曼编码myHaffCode

printf("\t Haffman编码\n");

printf("信源符号权值编码结果\n");

for(i=0;i

{

printf(" %c Weight=%d Code=",TJ.a[i],myHaffCode[i].weight);

for(j=myHaffCode[i].start;j

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

printf("\n");

}

raplace(myHaffCode);

}

void raplace(Code myHaffCode[])//把英语文本的字母包(括标点符号)用已经用Haffman编码完成的编码结果代替成01代码并存于文件code.txt中

{

char ch;

int i,n,j;

FILE *fp1;

if((fp1=fopen("code.txt","w+"))==NULL)

{

printf("文件无法打开!");

exit(0);

}

n=0;

ch=cc[n];

while(ch!='\0')

{

for(j=0;j

{

if(ch==TJ.a[j])

{

for(i=myHaffCode[j].start;i

fprintf(fp1,"%d",myHaffCode[j].bit[i]);

j=TJ.num;

}

}

n++;

ch=cc[n];

}

fclose(fp1);

}

void compress()//根据保存于code.txt的01代码每八位压缩一次

{

FILE *fp1,*fp2;

int ch;

char c;

int i=0;

int value;

int a[8]={0};

fp1=fopen("code.txt","r");

fp2=fopen("yasuo.txt","w+");//yasu.txt用于存储压缩后的结果

while(!feof(fp1))

{

fscanf(fp1,"%1d",&ch);

a[i]=ch;

i++;

if(i==8)

{

value=a[0]*128+a[1]*64+a[2]*32+a[3]*16+a[4]*8+a[5]*4+a[6]*2+a[7];

c=value;

fprintf(fp2,"%c",c);

ComNum++;

i=0;

}

}

if(i!=0)

{

while(i==8)

{

a[i]=0;

i++;

}

value=a[0]*128+a[1]*64+a[2]*32+a[3]*16+a[4]*8+a[5]*4+a[6]*2+a[7];

c=value;

fprintf(fp2,"%c",c);

ComNum++;

}

fclose(fp2);

fclose(fp1);

}

main()

{

float p;//用于计算压缩率

printf("\tHuffman编码的对英文文本压缩和解压缩\n");

stati();//统计

HCode();//编码

compress();//压缩

p=((TJ.n-ComNum)/TJ.n);

printf("压缩后的结果保存于文件yasuo.txt\n其压缩率为%f\n",p);

}

总结:

本次课程设计能够完满的结束,关键在于组员之间有效的分工合作。我们在一起纠错排错的过程中才真正理解面向对象和模块化设计的思想,每一个模块火气之间的衔接出现问题都有可能导致整个程序的运行失败。

程序中有些代码重复出现,从而减少了空间的利用率和增加了程序代码的杂乱性,特别是文件操作方面,如果可能的话,可以把文件读入、读出分别写成一个函数(就是把文件名作为参数),然后就可以直接调用了。需要注意数字0,1和字符0,1的区别。

由于自己对操作的不熟练使得本次试验又增加了一些难度,所幸的是最终发现并解决了这样的问题。由于二维指针和循环程序的推敲不足,使程序调试时费时不少,同时由于自己对操作的不熟练使得本次试验又增加了一些难度,所幸的是最终发现并解决了这样的问题。经过这次试验,我们收获良多。

作业参考答案信息论

2.3 一副充分洗乱的牌(含52张),试问: (1)任一特定排列所给出的不确定性是多少? (2)随机抽取13张牌,13张牌的点数互不相同时的不确定性是多少? 解:(1)52张扑克牌可以按不同的顺序排列,所有可能的不同排列数就是全排列种数,为 526752528.06610P =!≈? 因为扑克牌充分洗乱,任一特定排列出现的概率相等,设事件A 为任一特定排列,则其发 生概率为 ()681 1.241052P A -=≈?! 可得,该排列发生所给出的信息量为 ()()22log log 52225.58I A P A =-=!≈ bit 67.91≈ dit (2)设事件B 为从中抽取13张牌,所给出的点数互不相同。 扑克牌52张中抽取13张,不考虑排列顺序,共有13 52C 种可能的组合。13张牌点数 互不相同意味着点数包括A ,2,…,K ,而每一种点数有4种不同的花色意味着每个点数可以取4中花色。所以13张牌中所有的点数都不相同的组合数为13 4。因为每种组合都是等概率发生的,所以 ()131341352441339 1.05681052P B C -?!! ==≈?! 则发生事件B 所得到的信息量为 ()()13 21352 4log log 13.208I B P B C =-=-≈ bit 3.976≈ dit 2.5 设在一只布袋中装有100只对人手的感觉完全相同的木球,每只上涂有1种颜色。100只球的颜色有下列三种情况: (1) 红色球和白色球各50只; (2) 红色球99只,白色球1只; (3) 红,黄,蓝,白色各25只。 求从布袋中随意取出一只球时,猜测其颜色所需要的信息量。 解:猜测木球颜色所需要的信息量等于木球颜色的不确定性。令 R ——“取到的是红球”,W ——“取到的是白球”, Y ——“取到的是黄球”,B ——“取到的是蓝球”。 (1)若布袋中有红色球和白色球各50只,即 ()()501 1002P R P W == = 则 ()()221 log log 212 I R I W ==-== bit (2)若布袋中红色球99只,白色球1只,即

2020北邮移动通信作业01

一、判断题(共10道小题,共100.0分) 1. (错误) 2. 信道编码(差错控制)的目的是增加信息在信道传输中的冗余度,使其具有检错或纠错能力,提高信道传输质量;信道解码是检错、纠错的过程。 3. 1.正确 2.错误 4. 扰码SC本身的功能是完成“多址”的功能,在上行方向(反向)区分不同用户,在下行方向(前向)区分不同小区。 5. 1.正确 2.错误 6. (错误) 7. 扩频码是信道化码和扰码的结合,扩频调制可能是由信道化码、扰码单独或联合完成的。

8. 1.正确 2.错误 9. 在无线接入网(RAN)结构层面,为了降低用户面延迟,LTE取消了重要的网元—无线网络控制器(RNC)。 10. 1.正确 2.错误 11. 为了实现LTE所需的大系统带宽,从采用的无线接入技术来看,3GPP不得不选择放弃长期采用的CDMA技术作为核心技术,选用了新的核心传输技术,即OFDM/MIMO技术。 12. 1.正确 2.错误 13. 电磁波的频率、波长与速度的关系如下: f= λ/ c

1.正确 2.错误 15. 电磁波是人类用于远距离实时接收和发送信息的主要载体之一。 16. 1.正确 2.错误 17. 扩频码序列起扩展信号频谱的作用,它与所传的原始信息数据是有关的,会影响信息传输的透明性。 18. 1.正确 2.错误 19. 小区地址用来区分不同基站或扇区;数量上有一定要求,但没有用户地址数量要求大,在质量上要求各小区之间正交(准正交),以减少小区间的干扰。

1.正确 2.错误 21. 5G技术创新主要来源于无线技术和网络技术两方面。 22. 1.正确 2.错误

香农编码--信息论大作业

香农编码--信息论大作业-标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

信息论与编码课程大作业 题目:香农编码 学生姓名: ****** 学号: &********** 专业班级: ******************* 2013 年 5 月 10 日

香农编码 1.香农编码的原理/步骤 香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编码使平均码长达到极限值,这是一个很重要的极限定理。如何构造这种码?香农第一定理指 出,选择每个码字的长度K i将满足式I(x i)≤K i<I p(x i)+1就可以得到这种码。这种编码方法就是香农编码。 香农编码步骤如下: (1)将信源消息符按从大到小的顺序排列。 (2)计算p[i]累加概率; (3)确定满足自身要求的整数码长; (4)将累加概率变为二进制数; (5)取P[i]二进制数的小数点后Ki位即为该消息符号的二进制码字。 2. 用C语言实现 #include #include #include #define max_CL 10 /*maxsize of length of code*/ #define max_PN 6 /*输入序列的个数*/ typedef float datatype; typedef struct SHNODE { datatype pb; /*第i个消息符号出现的概率*/ datatype p_sum; /*第i个消息符号累加概率*/ int kl; /*第i个消息符号对应的码长*/ int code[max_CL]; /*第i个消息符号的码字*/ struct SHNODE *next; }shnolist; datatype sym_arry[max_PN]; /*序列的概率*/ void pb_scan(); /*得到序列概率*/ void pb_sort(); /*序列概率排序*/ void valuelist(shnolist *L); /*计算累加概率,码长,码字*/ void codedisp(shnolist *L); void pb_scan() {

霍夫曼树实验报告

实验二二叉树的遍历及霍夫曼编码 班级:计科1101班 学号:0909101605 姓名:杜茂鹏 2013年5月22日

一、实验目的 掌握二叉树的建立及遍历操作,霍夫曼编码基本操作及存储结构表示 二、实验内容 1. 系统要求包含以下功能 1)初始化:从终端读入字符集大小n,以及n个字符和n个权值(或者读入字符集和频度数据文件),建立哈夫曼树,并将哈夫曼树存入到文件HfmTree 中。 2)编码:利用已建好的哈夫曼树(如果不在内存中,则从文件中读入),从文件ToBeTran中读入原文,对原文进行编码,将编码后的结果存入文件CodeFile 中。 3)译码:利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 4)打印:打印输出哈夫曼树,显示ToBeTran, TextFile和CodeFile文件的内容。 三、实验要求 1.在上机前写出全部源程序; 2.能在机器上正确运行程序; 3.用户界面友好。 四、概要设计 1)首先动态分配数组存储霍夫曼树及存储霍夫曼编码表,然后从终端或文件读入霍夫曼树的字符变量及其频度,初始化建立霍夫曼树并将其写入文件HfmTree.txt中。 2)从指定的文件succe.txt中读入原文,利用已经编好的霍夫曼树对其编码,将编码结果写入文件Coding.txt保存。 3)利用已建好的哈夫曼树将文件Coding.txt中的代码进行译码,结果存入文件decoding.txt中。

五、测试数据: 2.原文内容“THIS IS MY PROGRAM” 六、详细设计 实验内容(原理、操作步骤、程序代码) //建立霍夫曼树,对原文进行编码、译码 #include #include #include #include typedef struct tree { char ch; int weight;//权值 int parent,lchild,rchild; }HTNode,*HuffmanTree;//动态分配数组存储霍夫曼树typedef char **HuffmanCode;//动态分配数组存储霍夫曼编码表void Select(HuffmanTree &HT,int* s1,int* s2,int n) { int j; int min1=10000; for(j=1;j<=n;j++) { if(HT[j].parent==0&&min1>HT[j].weight)

信息论与编码实验报告.

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

信息论基础课程作业汇总

信息论基础课程作业汇总 2015/03/23 作业1 1. 查资料了解香农的研究生涯及其信息论的主要内容和应用。 作业2 1. 用微分或者积分中值定理证明基本对数不等式。 2. 用Jessen 不等式证明对数和不等式。 作业3 1. 在伪币称量问题中,若用天平比较两枚金币的重量,则三种结果的信息量分别是多少? 2. 在掷色子游戏中,当得知两个色子的点数之和为3时获得多少比特的信息? 3. 已知平均100人中有2人患有某种疾病,为了查明病情,必须进行某项指标的化验。这 种化验的结果对于有病的人总是阳性的,对于健康的人来说有一半可能为阳性、一半可能为阴性。若x 表示有这种病,y 表示化验结果为阳性,试计算I (x |y )与I (x ;y )并说明其含义。 4. 试证明()()() ;|I x y I x I x y =- 作业4 1. 中科大杨孝先版教材第52页,习题 2.3。 2. 设一条电线上串联了8个灯泡,如图所示。假设其中有且只有一个灯泡坏了,并且各灯 泡的损坏概率相同,用万用电表通过测量断路找出坏灯泡。 (1)平均需要获得多少信息,才能找出其中的坏灯泡。 (2)一次测量所获得的信息的最大期望值是多少? (3)试设计一个最佳测量方案,即测量次数的期望值最小的测量方案。 3. 伪币称量问题:今有12枚金币,其中1枚是伪币,其重量不同于真币。 (1) 要找出这枚伪币需获得多少信息? (2) 确定伪币比真币重还是轻需多少信息? (3) 用一台无砝码的天平称量一次,平均最多可获得多少信息?

(4) 试设计一个称量方案,用3次称量找出伪币。 4. 程序设计1:输入有限概率分布,输出该分布的熵。 作业5 1. 设一个信源有6种信号,先后输出的信号是独立同分布的,其概率分布为 (1/2, 1/4, 1/8, 1/16, 1/32, 1/32) (1)该信源输出1个符号所提供的平均信息量。 (2)该信源输出100个符号所提供的平均信息量。 2. 在一段时间内,某城市交通的忙闲天数按天气阴晴和气温冷暖进行分类统计如下: (1) 计算交通忙闲状态的无条件熵。 (2) 计算天气和气温状态下的条件熵。 (3) 计算从天气和气温状态所获得的关于交通状态的信息。 3. 世界职业棒球锦标赛为7场赛制,只要其中一队赢得4场,比赛就结束。设随机变量X 代表在比赛中A 队和B 队较量的可能结果(X 的可能取值如AAAA ,BABABAB 和BBBAAAA ,其中A,B 分别表示A 队和B 对获胜)。设Y 代表比赛的场数,取值范围为4到7。假设A 队和B 队是同等水平的,且每场比赛相互独立。试计算H(X),H(Y), H(Y|X)和H(X|Y)。 作业6 1. 设二元对称信道的误码率为1%,当输入符号的概率分布为均匀分布时,计算该信道的 损失熵和信息传输率,并说明其意义。 作业7 1. 证明平均符号熵序列是单调递减的,即对于任何n , 1212+1()() +1n n H X X X H X X X n n 晴 阴 暖 8天 忙 冷 27天 暖 16天 晴 阴 暖 15天 闲 冷 4天 暖 12天 冷 12天 冷 8天

哈夫曼树的实验报告1

一、需求分析 1、本演示程序实现Haffman编/译码器的作用,目的是为信息收发站提供一个编/译系统, 从而使信息收发站利用Haffman编码进行通讯,力求达到提高信道利用率,缩短时间,降低成本等目标。系统要实现的两个基本功能就是:①对需要传送的数据预先编码; ②对从接收端接收的数据进行译码; 2、本演示程序需要在终端上读入n个字符(字符型)及其权值(整形),用于建立Huffman 树,存储在文件hfmanTree.txt中;如果用户觉得不够清晰还可以打印以凹入表形式显示的Huffman树; 3、本演示程序根据建好的Huffman树,对文件的文本进行编码,结果存入文件CodeFile 中;然后利用建好的Huffman树将文件CodeFile中的代码进行译码,结果存入文件TextFile中;最后在屏幕上显示代码(每行50个),同时显示对CodeFile中代码翻译后的结果; 4、本演示程序将综合使用C++和C语言; 5、测试数据: (1)教材例6-2中数据:8个字符,概率分别是0.05,0.29,0.07,0.08,0.14,0.23,0.03, 0.11,可将其的权值看为5,29,7,8,14,23,3,11 (2)用下表给出的字符集和频度的实际统计数据建立Haffman树,并实现以下报文的编码和 一、概要设计 1、设定哈夫曼树的抽象数据类型定义 ADT Huffmantree{ 数据对象:D={a i| a i∈Charset,i=1,2,3,……n,n≥0} 数据关系:R1={< a i-1, a i >| a i-1, a i∈D, i=2,3,……n} 基本操作: Initialization(&HT,&HC,w,n,ch) 操作结果:根据n个字符及其它们的权值w[i],建立Huffman树HT,用字符数组ch[i]作为中间存储变量,最后字符编码存到HC中; Encodeing(n) 操作结果:根据建好的Huffman树,对文件进行编码,编码结果存入到文件CodeFile 中 Decodeing(HT,n) 操作结果:根据已经编译好的包含n个字符的Huffman树HT,将文件的代码进行翻译,结果存入文件TextFile中 } ADT Huffmantree

信息论与编码大作业

广西科技大学 大作业 课程名称:信息论与编码 题目:信道编码对通信系统性能的影响学院:电气与信息工程学院 专业:电子信息工程 班级: 学号: 成绩: 姓名: 电话号码:

信道编码对通信系统性能的影响 [摘要] 简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB仿真有无信道编码条件下对通信系统性能的影响及信道编码在不同信道下对通信系统性能的影响,如AWGN信道和深衰落信道。 [关键词] 信道编码、分组码、MATLAB仿真、性能 一、引言 提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。1948年,信息论的奠基人C.E.Shannon在他的开创性论文“通信的数学理论”中,提出了著名的有噪信道编码定理.他指出:对任何信道,只要信息传输速率R不大于信道容量C, 就一定存在这样的编码方法:在采用最大似然译码时,其误码率可以任意小.该定理在理论上给出了对给定信道通过编码所能达到的编码增益的上限,并指出了为达到理论极限应采用的译码方法.在信道编码定理中,香农提出了实现最佳编码的三个基本条件:(1 )采用随机编译码方式;(2 )编码长度L→∞ , 即分组的码组长度无限;(3)译码采用最佳的最大似然译码算法。 二、信道编码理论 1、信道编码的概念与目的 进行信道编码是为了提高信号传输的可靠性,改善通信系统的传输质量,研究信道编码的目标是寻找具体构造编码的理论与方法。从原理上,构造信道码的基本思路是根据一定的规律在待发送的信息码元中人为的加入一定的多余码元,以引入最小的多余度为代价来换取最好的抗干扰性能。信道编码是通过信道编码器和译码器实现的用于提高信道可靠性的理论和方法,是信息论的内容之一。信道编码大致分为两类:①信道编码定理,从理论上解决理想编码器、译码器的存在性问题,也就是解决信道能传送的最大信息率的可能性和超过这个最大值时的传输问题。②构造性的编码方法以及这些方法能达到的性能界限。编码定理的证明,从离散信道发展到连续信道,从无记忆信道到有记忆信道,从单用户信道到多用户信道,从证明差错概率可接近于零到以指数规律逼近于零,正在不断完善。编码方法,在离散信道中一般用代数码形式,其类型有较大发展,各种界限也不断有人提出,但尚未达到编码定理所启示的限度。在连续信道中常采用正交函数系来代表消息,这在极限情况下可达到编码定理的限度,不是所有信道的编码定理都已被证明。 2、信道编码的分类

第五章 信道编码 习题解答

第五章 信道编码 习题解答 1.写出与10011的汉明距离为3的所有码字。 解:共有10个:01111,00101,00000,01010,01001,00110,11101,10100,11000,11110。 2. 已知码字集合的最小码距为d ,问利用该组码字可以纠正几个错误可以发现几个错误请写出一般关系式。 解:根据公式: (1)1d e ≥+ 可发现e 个错。 (2)21d t ≥+ 可纠正t 个错。 得出规律: (1)1d = ,则不能发现错及纠错。 (2)d 为奇数:可纠 1 2 d -个码元错或发现1d -个码元错。 (3)d 为偶数:可纠 12 d -个码元错,或最多发现1d -个码元错。 (4)码距越大,纠、检错能力越强。 3.试计算(8,7)奇偶校验码漏检概率和编码效率。已知码元错误概率为4 10e p -=。 解:由于4 10e p -=较小,可只计算错两个码元(忽略错4或6个码元)的情况: 228788! 10 2.8106!2! e p C p --== ?=?? 7 87.5%8 η= = 4.已知信道的误码率4 10e p -=,若采用“五三”定比码,问这时系统的等效(实际)误码率为多少 解:由于4 10e p -=较小,可只计算错两个码元的情况 11252112 83232(1)610e e e p C C p p C C p --=-≈=?

5.求000000,110110,011101,101011四个汉明码字的汉明距离,并据此求出校正错误用的校验表。 解:先求出码字间距离: 000000 110110 011101 101011 000000 4 4 4 110110 4 4 4 011101 4 4 4 101011 4 4 4 汉明距离为4,可纠一位错。 由于一个码字共有6个码元,根据公式:21617r n ≥+=+= 得 3r = 即每个码字应有3位监督码元,6-3=3位信息码元。 直观地写出各码字:123456 000000110110011101101011 x x x x x x 令456x x x 为监督码元,观察规律则可写出监督方程:4135236 12x x x x x x x x x =⊕?? =⊕??=⊕? 从而写出校验子方程:113422353126s x x x s x x x s x x x *** *** ***?=⊕⊕?=⊕⊕??=⊕⊕? 列出校验表: 6.写出信息位6k =,且能纠正1个错的汉明码。 解:汉明码的信息码元为六个,即:6k =。监督码元数r 应符合下式:217r k r r ≥++=+

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

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

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

信息论与编码课程大作业信道容量的迭代算法

信息论与编码课程大作业 题目:信道容量的迭代算法 学生姓名: 学号:2010020200 专业班级:10电子信息工程 2013 年5 月18 日

信道容量的迭代算法 1信道容量的迭代算法的步骤 一、用了matlab 实现DMC 容量迭代的算法如下: 第一步:首先要初始化信源分布:.0deta 10,1,0,1 ) (>>=?==,选置,,k r i r P k i 即选取一个精度,本次中我选deta=0.000001。 第二步:}{,) ()()() (k ij i ji k i ji k i k ij t p p p p t 得到反向转移概率矩阵根据式子∑= 。 第三步: ()()()()(){} 111] log exp[] log exp[+++== ∑∑∑k i k i j ij k ji j ij k ji k i p P t p t p p 计算由式。 第四步: () ()() ()()()。 C t p t P I C k r i s j k ij ji k k k 10011log exp log ,+==++????? ???????????==∑∑计算由式 第五步: 若 a C C C k k k det ) 1() ()1(>-++,则执行k=k+1,然后转第二步。直至转移条件不成立,接着 执行下面的程序。 第六步:输出迭代次数k 和()1+k C 和1+k P ,程序终止。 2. Matlab 实现 clear; r=input('输入信源个数:'); s=input('输入信宿个数:'); deta=input('输入信道容量的精度: '); Q=rand(r,s); %形成r 行s 列随机矩阵Q

《通信系统原理》作业题

《通信系统原理》作业题 第1章绪论 1.画出数字通信系统模型。 噪声源 数 字 解 调 信 道 译 码 解 密 信 源 译 码 信 宿 数 字 调 制 信 道 编 码 加 密 信 源 编 码 信 源 信道 2.衡量数字通信系统的有效性和可靠性的性能指标有哪些? 答:码元传输速率信息传输速率频带利用率误码率误信率 3.说明通信系统的分类。 4.一个由字母A,B,C,D组成的字,对于传输的每一个字母用二进制脉冲编码,00代替A,01代替B,10代替C,11代替D,每个脉冲宽度为5ms. (1)不同的字母是等概率出现时,试计算每个字母的传输速率和信息速率; (2)若每个字母出现的概率分别为 10 3 , 4 1 , 4 1 , 5 1 = = = = D C B A P P P P 试计算每个字母的传输速率和信息速率。

第2章确知信号 1. 画出单位冲击函数的时域波形及频谱密度,并说明各波形表示的含义。 2.求一个矩形脉冲的频谱密度及能量谱密度。 G a( f 1/τ 2/ -2/τ -1/

第5章 模拟调制系统 1. 比较AM 与DSB 两种调制方式的优缺点。 AM :优点是接收设备简单;缺点是功率利用率低,抗干扰能力差。主要用在中波和短波调幅广播。 DSB :优点是功率利用率高,带宽与AM 相同。主要用于调频立体声中的差信号调制,彩色TV 中的色差信号调制 2. 已知线性调制信号为 t t c ωcos )sin 0.51(Ω+,式中Ω=6c ω,画出波形与频谱。

3. 已知调制信号)4000cos()2000cos()( t t t m ππ+=载波为t π4 10cos ,进行单边带调制,试确定该单边带信号的表达式,并画出频谱图。

信息论大作业

信息论大作业 电子工程学院 班 号 1.Huffman编码 1. Huffman 编码原理: ①将信源符号按概率从大到小的顺序排列,令p(x1)≥ p(x2)≥…≥ p(xn) ②给两个概率最小的信源符号p(xn-1)和p(xn)各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。

③将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n -2)个符号的缩减信源S2。 ④重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 2. 霍夫曼编码优缺点: 1)编出来的码都是异字头码,保证了码的唯一可译性。 2) 由于编码长度可变。因此译码时间较长,使得霍夫曼编码的压缩与还原相当费时。 3) 编码长度不统一,硬件实现有难度。 4) 对不同信号源的编码效率不同,当信号源的符号概率为2的负幂次方时,达到100%的编码效率;若信号源符号的概率相等,则编码效率最低。 5) 由于0与1的指定是任意的,故由上述过程编出的最佳码不是唯一的,但其平均码长是一样的,故不影响编码效率与数据压缩性能。 3.编码流程: 读入一幅图像的灰度值; 1.将矩阵的不同数统计在数组c的第一列中; 2.将相同的数占站整个数组总数的比例统计在数组p中; 3.找到最小的概率,相加直到等于1,把最小概率的序号存在tree第一列中,次 小放在第二列,和放在p像素比例之后; 4.C数组第一维表示值,第二维表示代码数值大小,第三维表示代码的位数; 5.把概率小的值为1标识,概率大的值为0标识; 6.计算信源的熵; 7.计算平均码长; 8.计算编码效率'; 9.计算冗余度。 源程序: p=input('请输入数据:'); n=length(p); for i=1:n if p(i)<0 fprintf('\n 提示:概率值不能小于0!\n');

哈夫曼树实验报告

哈夫曼树实验报告 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】

计算机科学与技术学院数据结构实验报告 班级 2014级计算机1班学号姓名张建华成绩 实验项目简单哈夫曼编/译码的设计与实现实验日期一、实验目的 本实验的目的是进一步理解哈夫曼树的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。 二、实验问题描述 利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此实验即设计这样的一个简单编/码系统。系统应该具有如下的几个功能: 1、接收原始数据。 从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件中。 2、编码。 利用已建好的哈夫曼树(如不在内存,则从文件中读入),对文件中的正文进行编码,然后将结果存入文件中。 3、译码。 利用已建好的哈夫曼树将文件中的代码进行译码,结果存入文件中。 4、打印编码规则。 即字符与编码的一一对应关系。 5、打印哈夫曼树, 将已在内存中的哈夫曼树以直观的方式显示在终端上。 三、实验步骤 1、实验问题分析 1、构造哈夫曼树时使用静态链表作为哈夫曼树的存储。 在构造哈夫曼树时,设计一个结构体数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,描述结点的数据类型为: Typedef strcut { Int weight;/*结点权值*/ Int parent; Int lchild; Int rchild; }HNodeType; 2、求哈夫曼编码时使用一维结构数组HuffCode作为哈夫曼编码信息的存储。 求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶子结点开始,沿结点的双亲链域回退到根结点,没回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶子结点所经过的路

信息论与编码实验报告

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

信息论 研究生练习题

第2章作业 1. 同时扔一对均匀的骰子,当得知“两骰子面朝上点数之和为2”或“面朝上点数之和为 8”或“两骰子面朝上点数是3和4”时,试问这三种情况分别获得多少信息量? 2. 居住在某地区的女孩中有25%是大学生,在大学生中有75%是身高1.6以上的,而女孩中 身高1.6米以上的占总数一半。假如我们得知“身高1.6米以上的某女孩是大学生”的消息,问获得多少信息量? 3. 设离散无记忆信源123401233/81/41/41/8X a a a a P ====????=???????? ,其发出的消息为(202 120 130 213 001 203 210 110 321 010 021 032 011 223 210)。 (1) 求每个符号的自信息量; (2) 求消息序列的自信息量及平均每个符号携带的信息量。 4. 有一信源输出X ∈{0,1,2},其概率为p 0=1/4,p 1=1/4,p 2=1/2。设计两个独立实验去观察它,其结果为Y 1∈{0,1}和Y 2∈{0,1}。已知条件概率为 P(Y 1|X) 0 1 P(Y 2|X) 0 1 1 0 0 1 0 1 0 1 1 1 0 2 1/2 1/2 2 0 1 求: (1) I (X ;Y 1)和I (X ;Y 2),并判断哪一个实验好些。 (2) I (X ;Y 1,Y 2),并计算做Y 1和Y 2两个实验比做Y 1或Y 2中的一个实验各可多得多 少关于X 的信息。 (3) I (X ;Y 1/Y 2)和I (X ;Y 2/Y 1),并解释它们的含义。 5. 为了传输一个由字母A 、B 、C 、D 组成的符号集,把每个字母编码成两个二元码脉冲序 列,以00代表A,01代表B,10代表C,11代表D 。每个二元码脉冲宽度为5ms 。 (1) 不同字母等概率出现时,计算传输的平均信息速率? (2) 若每个字母出现的概率分别为p A =1/5,p B =1/4,p C =1/4,p D =3/10,试计算传输 的平均信息速率? 6. (1)为了使电视图像获得良好的清晰度和规定的适当的对比度,需要用5×105个像素和 10个不同亮度电平,设每秒要传送30帧图像,所有像素是独立变化的,且所有亮度电平等概率出现,求传送此图像所需的信息率(bit/s )。 (2)设某彩电系统,除了满足对于黑白电视系统的上述要求外,还必须有30个不同的色彩度,试证明传输这彩色系统的信息率要比黑白系统的信息率大约2.5倍。 7. 设有一个信源,它产生0、1序列的消息。它在任意时间而且不论以前发生过什么符号, 均按P(0)=0.4,P(1)=0.6概率发出符号。 (1)试问这个信源是否平稳的? (2)试计算H (2 X ),H (X 3/ X 1 X 2)及∞→N lim H N (X )。 (3)试计算H (4X )并写出4X 信源中可能有的所有符号。 8. 给定语声样值X 的概率密度为1(),2 x X p x e x λλ?=?∞<<∞ 求H C (X ),并证明它小于同样方差的正态变量的微分熵。

信道编码误码影响

卷积码对误码率影响探究 一、实验要求及目的 在通信中,由于各种实际中存在的各种干扰,严重影响通信质量。在前面实现的QBSK信号的模拟信道的加噪传输的基础上加上信道编码技术,观察信道编码技术对误码率的改善。本实验中采取(2,1,7)卷积码对基带序列进行编码,观察软、硬判决方法对传输误码率的改善作用。 二、实验原理 在实验中加高斯白噪声来模拟实际通信中的复杂的外界干扰条件,根据不同的归一化信噪比值计算加到每个信号上的能量,得到模拟的经过信道的加噪信号。 卷积码译码方法有两大类:大数逻辑译码,又称门限译码(硬判决);另一种是概率译码(软判决),概率译码又分为维特比译码和序列译码。硬判决是以分组码理论为基础的,其译码设备简单,速度快,但其误码性能要比概率译码差。 在硬判决译码中,我们将从模拟信道上得到的信号进行解调,得到信息比特流,在进行硬判决。取一个判决长度,在实际应用中,一般取其基本信码单元的六到八倍,因而,本实验中取6,则在译码前的比特流中以12位为一组,进行加比选运算,得到最佳路径,确定码序列。软判决主要是利用高斯白噪声的概率密度函数,对信道上下来的信号直接进行处理,进行判决。计算每个原信息比特对应现在新的信道比特对应的错误

该概率,然后计算器对数释然比,进行量化软判决。得到信息比特流,与原始信息比特进行比较并统计其错误码元数,从而得到误码率。 三、实验步骤及实验软件平台 本模拟实验程序在MATLAB2009A中运行良好,如果程序在传递过程中格式发生变化,改成M文件的格式即可运行。 下面对本程序设计思路流程进行介绍: (1)设计参数框,达到实验变量可调,试验参数包括基带码元个数、信噪比起始值、信噪比终止值、默认 的调制方式MPSK,M可以变化,但大于等于4且为 2的整数次幂。 (2)进行卷积码编码,主要运用库函数实现,卷积码为(2,1,7)卷积码,卷积码参数为[171,133]。 (3)调整基带码元序列,转化为PSKMOD函数所需的进制序列;由归一化信噪比的值计算加到每个调制后码 元上的噪声大小;进行QPSK调制,并在调制后的基 带序列上加噪。 (4)在这一步将分为两种方式进行解调,硬判决,按正常的解调方式解调QPSK信号,进行卷积码的硬判决, 得到传输得到的基带码元序列;软判决,计算QPSK 四个星座点对应的条件概率,计算Q值,利用库函 数进行卷积码的软判决,得到传输后的基带码元序

哈夫曼树及其操作-数据结构实验报告(2)

电子科技大学 实验报告 课程名称:数据结构与算法 学生姓名:陈*浩 学号:************* 点名序号: *** 指导教师:钱** 实验地点:基础实验大楼 实验时间: 2014-2015-2学期 信息与软件工程学院

实验报告(二) 学生姓名:陈**浩学号:*************指导教师:钱** 实验地点:科研教学楼A508实验时间:一、实验室名称:软件实验室 二、实验项目名称:数据结构与算法—树 三、实验学时:4 四、实验原理: 霍夫曼编码(Huffman Coding)是一种编码方式,是一种用于无损数据压缩的熵编码(权编码)算法。1952年,David A. Huffman在麻省理工攻读博士时所发明的。 在计算机数据处理中,霍夫曼编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现机率的方法得到的,出现机率高的字母使用较短的编码,反之出现机率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。 例如,在英文中,e的出现机率最高,而z的出现概率则最低。当利用霍夫曼编码对一篇英文进行压缩时,e极有可能用一个比特来表示,而z则可能花去25个比特(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个比特。二者相比,e使用了一般编码的1/8的长度,z则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例。 霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。 可以证明霍夫曼树的WPL是最小的。

相关文档
最新文档