信息论与编码实验报告(DOC)

合集下载

信息论与编码实验2-实验报告

信息论与编码实验2-实验报告

信息论与编码实验2-实验报告信息论与编码实验 2 实验报告一、实验目的本次信息论与编码实验 2 的主要目的是深入理解和应用信息论与编码的相关知识,通过实际操作和数据分析,进一步掌握信源编码和信道编码的原理及方法,提高对信息传输效率和可靠性的认识。

二、实验原理(一)信源编码信源编码的目的是减少信源输出符号序列中的冗余度,提高符号的平均信息量。

常见的信源编码方法有香农编码、哈夫曼编码等。

香农编码的基本思想是根据符号出现的概率来分配码字长度,概率越大,码字越短。

哈夫曼编码则通过构建一棵最优二叉树,为出现概率较高的符号分配较短的编码,从而实现平均码长的最小化。

(二)信道编码信道编码用于增加信息传输的可靠性,通过在发送的信息中添加冗余信息,使得在接收端能够检测和纠正传输过程中产生的错误。

常见的信道编码有线性分组码,如汉明码等。

三、实验内容与步骤(一)信源编码实验1、选取一组具有不同概率分布的信源符号,例如:A(02)、B (03)、C(01)、D(04)。

2、分别使用香农编码和哈夫曼编码对信源符号进行编码。

3、计算两种编码方法的平均码长,并与信源熵进行比较。

(二)信道编码实验1、选择一种线性分组码,如(7,4)汉明码。

2、生成一组随机的信息位。

3、对信息位进行编码,得到编码后的码字。

4、在码字中引入随机错误。

5、进行错误检测和纠正,并计算错误纠正的成功率。

四、实验结果与分析(一)信源编码结果1、香农编码的码字为:A(010)、B(001)、C(100)、D (000)。

平均码长为 22 比特,信源熵约为 184 比特,平均码长略大于信源熵。

2、哈夫曼编码的码字为:A(10)、B(01)、C(111)、D (00)。

平均码长为 19 比特,更接近信源熵,编码效率更高。

(二)信道编码结果在引入一定数量的错误后,(7,4)汉明码能够成功检测并纠正大部分错误,错误纠正成功率较高,表明其在提高信息传输可靠性方面具有较好的性能。

信息论与编码技术实验报告

信息论与编码技术实验报告

《信息论与编码技术》实验报告实验一:请根据公式-plogp ,说明小概率事件和大概率事件对熵的贡献。

解:先做图,然后分析。

将公式写为)(log )(2p p p f -=对它编写计算和画图程序如下:p=0:0.01:1;x=-p.*log2(p);plot(p,x);从图中曲线看出,小概率事件和大概率事件的情况下,熵值都很低,贡献很小,在概率为0.5附近时熵值最大,故此时对熵的贡献最大。

实验二:请对a 、b 、c 霍夫曼编码,它们的概率是0.6、0.3、0.1。

并以此对符号串ababaacbaa 编码和译码。

解:编码步骤分为:事件排序,符号编码,信源编码,信道编码。

MATLAB 程序:clc;a=0.3;b=0.3;c=0.4; %%%霍夫曼编码A=[a,b,c];A=fliplr(sort(A)); %%%降序排序if (a==b)&(a>c), %%实现了当a,b,c 其中两概率相同时的编码,及3值均不同时的编码 u='a';x=a;v='b';y=b;w='c';z=c;elseif (a==b)&(a<c),u='c';x=c;v='a';y=a;w='b';z=b;elseif (c==b)&(c>a),u='b';x=b;v='c';y=c;w='a';z=a;elseif (c==b)&(c<a),u='a';x=a;v='b';y=b;w='c';z=c;elseif(a==c)&(a>b),u='a',x=a;v='c',y=c;w='b',z=b;elseif(a==c)&(a<b),u='b';x=b;v='a';y=a;w='c';z=c;elseif A(1,1)==a,u='a';x=a;elseif A(1,1)==b,u='b';x=b;elseif A(1,1)==c,u='c';x=c;endif A(1,2)==a,v='a';y=a;elseif A(1,2)==b,v='b';y=b;elseif A(1,2)==c,v='c';y=c;endif A(1,3)==a,w='a';z=a;elseif A(1,3)==b,w='b';z=b;elseif A(1,3)==c,w='c';z=c;endend %%%x,y,z按从大到小顺序存放a,b,c的值,u,v,w存对应字母if x>=(y+z),U='0';V(1)='0';V(2)='1';W(1)='1';W(2)='1';else U='1';V(1)='0';V(2)='0';W(1)='1';W(2)='0';enddisp('霍夫曼编码结果:')if u=='a',a=fliplr(U),elseif u=='b',b=fliplr(U),else c=fliplr(U),end if v=='a',a=fliplr(V),elseif v=='b',b=fliplr(V),else c=fliplr(V),end if w=='a',a=fliplr(W),elseif w=='b',b=fliplr(W),else c=fliplr(W),end %%%编码步骤为:信源编码,信道编码disp('信源符号序列:')s='ababaacbaa' %%%信源编码q=[];for i=s;if i=='a',d=a;elseif i=='b';d=b;else d=c;end;q=[q,d];endm=[]; %%%符号变数字for i=q;m=[m,str2num(i)];endP=[1,1,1,0;0,1,1,1;1,1,0,1];G=[eye(3),P];%%%信道编码%%%接下来的for循环在程序中多次使用,此处作用是将已编码组m每3个1组放入mk中进行运算之后存入Ck数组中,每次mk中运算结束之后清空,再进行下一组运算,而信道编码结果数组C则由C=[C,Ck]存入每组7个码。

信息论与编码实验报告

信息论与编码实验报告

NANCHANG UNIVERSITY信息论与编码实验报告(2018年11月27日)学院:信息工程学院系电子信息工程系专业班级:学生姓名:学号:指导教师:目录实验一自信息量和熵源.............................................................................................. 实验二准对称信道容量.............................................................................................. 实验三费诺不等式...................................................................................................... 实验四香农编码.......................................................................................................... 实验五费诺编码.......................................................................................................... 实验六霍夫曼编码......................................................................................................实验一自信息量和熵源一、实验要求1、画出I=-的函数图;2、画出H(p)=-p-(1-p)函数图。

二、实验原理及理论分析自信息量:一个事件的自信息量就是对其不确定性的度量。

信息论与编码实习报告

信息论与编码实习报告

信息论与编码实习报告一、引言信息论与编码是通信工程、计算机科学和电子工程等领域的重要基础课程。

本次实习旨在通过实际操作,深入理解和掌握信息论与编码的基本原理和技术,提高我们的实际操作能力和问题解决能力。

二、实习内容1、信息论基础:实习的第一部分,我们通过自学和讨论的方式,深入学习了信息论的基本概念和原理,包括信息的度量、熵、信道容量等。

2、编码理论:在这一阶段,我们重点学习了线性编码、循环编码、哈夫曼编码等编码方法,并了解了编码的效率及其可靠性。

3、模拟与数字通信系统:我们通过模拟软件,设计和实现了简单的模拟通信系统,同时,也通过实验箱,了解了数字通信系统的基本原理和技术。

4、无线通信和网络:在这一部分,我们重点学习了无线通信和网络的基础知识,包括无线信道模型、无线调制解调技术、无线网络协议等。

5、实习项目:最后,我们根据所学的知识,完成了一个实习项目——设计并实现一个具有高可靠性和高效率的通信系统。

三、实习收获通过这次实习,我们收获颇丰。

首先,我们对信息论与编码的基本概念和原理有了更深入的理解和掌握,能够更好地将理论知识应用到实际中。

其次,我们提高了自己的实际操作能力和问题解决能力,能够在实践中发现和解决问题。

最后,我们了解了通信系统的基本原理和技术,对未来的学习和工作有了更好的准备。

四、结论本次实习是我们学习信息论与编码的重要环节,我们通过实际操作,深入理解和掌握了信息论与编码的基本原理和技术,提高了自己的实际操作能力和问题解决能力。

我们也发现了自己的不足之处,将在未来的学习和工作中更加努力,不断提高自己的能力和水平。

信息论与编码曹雪虹课后习题答案随着科技的发展,信息已经成为现代社会中不可或缺的一部分。

在大学中,信息论与编码作为一门重要的学科,已经成为了计算机科学、通信工程、电子工程等专业的必修课程。

而在这门课程中,曹雪虹教授的教材《信息论与编码》被广泛使用。

本文将介绍一些该教材的课后习题答案,以帮助读者更好地掌握信息论与编码的相关知识。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的本实验主要目的是通过实验验证信息论与编码理论的基本原理,了解信息的产生、传输和编码的基本过程,深入理解信源、信道和编码的关系,以及各种编码技术的应用。

二、实验设备及原理实验设备:计算机、编码器、解码器、信道模拟器、信噪比计算器等。

实验原理:信息论是由香农提出的一种研究信息传输与数据压缩问题的数学理论。

信源产生的消息通常是具有统计规律的,信道是传送消息的媒体,编码是将消息转换成信号的过程。

根据信息论的基本原理,信息的度量单位是比特(bit),一个比特可以表示两个平等可能的事件。

信源的熵(Entropy)是用来衡量信源产生的信息量大小的物理量,熵越大,信息量就越多。

信道容量是用来衡量信道传输信息的极限容量,即信道的最高传输速率,单位是比特/秒。

编码是为了提高信道的利用率,减少传输时间,提高传输质量等目的而进行的一种信号转换过程。

常见的编码技术有霍夫曼编码、香农-费诺编码、区块编码等。

三、实验步骤1.运行编码器和解码器软件,设置信源信息,编码器将信源信息进行编码,生成信道输入信号。

2.设置信道模拟器的信道参数,模拟信道传输过程。

3.将信道输出信号输入到解码器,解码器将信道输出信号进行解码,恢复信源信息。

4.计算信道容量和实际传输速率,比较两者的差异。

5.改变信道参数和编码方式,观察对实际传输速率的影响。

四、实验结果与分析通过实验,我们可以得到不同信道及编码方式下的信息传输速率,根据信道参数和编码方式的不同,传输速率有时会接近信道容量,有时会低于信道容量。

这是因为在真实的传输过程中,存在信噪比、传输距离等因素导致的误码率,从而降低了实际传输速率。

在实验中,我们还可以观察到不同编码方式对传输速率的影响。

例如,霍夫曼编码适用于信源概率分布不均匀的情况,可以实现数据压缩,提高传输效率。

而区块编码适用于数据容量较大的情况,可以分块传输,降低传输错误率。

此外,通过实验我们还可以了解到信息论中的一些重要概念,如信源熵、信道容量等。

信息论与编码理论课程实验报告

信息论与编码理论课程实验报告
2、建立待压缩的数据(如文本、图像等)的信源模型。进行相关统计,确定该数据的信源符号集,以及相应的概率集合,从而确定该信源的概率空间。该部分实验涉及数据读入(文档读写、图像读写)、信源符号出现概率统计等等
二、实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)
设备:PC机
软件:matlab 2007
0.0055 0.0115 0.0061 0.0176 0
构建信源模型如下:
h i j k l m n
0.0267 0.0672 0.0042 0.0030 0.0521 0.0212 0.0733
o p q r s t u
0.0842 0.0254 0.0048 0.0648 0.0933 0.0739 0.0327
9.实验报告独立完成,无抄袭现象,并按时提交,格式规范。
综合评定:
附录(程序源代码)
1.编写MATLAB程序
clc
clear all
%随机输入一组数据
string='abdddssdsssdabaabaddkkidkidkdiakdjjaidjaid';
%将上述中所有英文字母化为小写
string=lower(string);
自评/互评成绩:100(评阅者签名:熊萌萌)
2、教师评价
评价标准
评语等级



及格
不合格
1.实验态度认真,实验目的明确
2.实验方案或流程图思路清晰、合理
3.实验程序设计合理,能运行
4.实验步骤记录详细,具备可读性
5.实验数据合理
6.实验结论正确
7.实验总结分析合理、透彻
8.实验报告完整、文字叙述流畅,逻辑性强

信息论与编码实验报告

信息论与编码实验报告

《信息论与编码》实验报告《信息论与编码》实验报告实验序号:02 实验项目名称:离散信道及其信道容量结论:1、当输入和输出符号个数相同,且都等于r 时,则此信道称为强对称信道或均匀信道;2、这类信道中总的错误概率为 p ,对称地平均分配给r-1个输出符号。

实验内容二:平均互信息I (X ;Y )是凸函数的论文一、 问题:由信源的概率分布P (Y )=对x 求和P (X )*P(Y|X)和平均互信息I(X;Y)=对x,y 求和p(x)*P(y|x)*logP(y|x)/P(y)可知,平均互信息只与信源的概率分布和信道的传递概率有关,但是它们之间有种什么关系?二、 证明定理一:平均互信息I(X;Y)是输入信源的概率分布P(x)的形函数(上凸函数)解: 根据上凸函数的定义来证明,先固定信道,即信道的传递概率P(y|x)是固定的。

那么平均互信息I(X;Y)将只是P(x)的函数,简写成I[P(x)]。

现选择输入信源X 的两种已知的概率分布P1(x)和P2(x)。

其对应的联合分布概率为P1(xy)=P1(x)P(y|x)和P2(xy)=P2(x)P(y|x),因而信道输出端的平均互信息分别为I[P1(x)]和I[P2(x)]。

再选择输入变量X 的另一种概率分布P(x),令01θ<<,和1θθ+=,而P(x)= 12()()P x P x θθ+,因而得其相应的平均互信息为I[P(x)]。

根据平均互信息的定义得1212,,,12[()][()][()](|)(|)(|)()log()log ()log ()()()x yx y x y I P x I P x I P x P y x P y x P y x P xy P xy P xy P y P y P y θθθθ+-=+-∑∑∑结论:平均互信息与信源的概率分布有关,有上可知,平均互信息是输入信源的概率分布P(x)的形凸函数。

定理二:平均互信息I(X;Y)是信道传递概率P(Y|X)的形凸函数(又称下凸函数)猜想:由平均互信息是输入信源的概率分布的形凸函数知,当固定某信道时,选择不同的信源(其概率分布不同)与信道连接,在信道输出端接收到每个符号后获得的信息量是不同的。

信息论与编码实验报告

信息论与编码实验报告

#include<iostream>#include<string>#include<instdio.h>using namespace std;typedef struct{int weight;int flag;int parent;int lchild;int rchild;}hnodetype;typedef struct{int bit[10];int start;char leaf;}hcodetype;void huf(char cha[],int m[],int n){int i,j,m1,m2,x1,x2,c,p;hnodetype *huffnode=new hnodetype[2*n-1];hcodetype *huffcode=new hcodetype[n],cd;for(i=0;i<2*n-1;i++){ //初始化哈夫曼树 huffnode[i].weight=0;huffnode[i].parent=0;huffnode[i].flag=0;huffnode[i].lchild=-1;huffnode[i].rchild=-1;}for(i=0;i<n;i++){ //哈夫曼结点赋初值 huffnode[i].weight=m[i];huffcode[i].leaf=cha[i];}for(i=0;i<n-1;i++){ //对结点进行编码m1=m2=10000000;x1=x2=0;for(j=0;j<n+i;j++){if(huffnode[j].weight<=m1&&huffnode[j].flag==0) {m2=m1;x2=x1;m1=huffnode[j].weight;x1=j;}else if(huffnode[j].weight<=m2&&huffnode[j].flag==0){m2=huffnode[j].weight;x2=j;}}huffnode[x1].parent=n+i;huffnode[x2].parent=n+i;huffnode[x1].flag=1;huffnode[x2].flag=1;huffnode[n+i].weight=huffnode[x1].weight+huffnode[x2].weight; huffnode[n+i].lchild=x1;huffnode[n+i].rchild=x2;}for(i=0;i<n;i++){ //生成哈夫曼树cd.start=n-1;c=i;p=huffnode[c].parent;while(p!=0){if(huffnode[p].lchild==c)cd.bit[cd.start]=0;elsecd.bit[cd.start]=1;cd.start--;c=p;p=huffnode[c].parent;}cout<<huffcode[i].leaf<<":";for(j=cd.start+1;j<n;j++){huffcode[i].bit[j]=cd.bit[j];cout<<cd.bit[j];}cout<<endl;huffcode[i].start=cd.start;}delete[] huffcode;delete[] huffnode;}void main(){int i=0;// int m[10]={30,23,10,10,9,8,7,3};char cha[10]="abcdefgh";float f;int m[10];printf("请输入概率的小数点后两位值");for(i=0,i<10,i++)scanf("%d",&a[i]);cout<<"该字符串为:\t";for (i=0;i<strlen(cha);i++){ cout<<cha[i]<<"\t"; }cout<<"字符加权为:\t";for (i=0;i<strlen(cha);i++){f=(float)m[i]/100;cout<<f<<"\t";}cout<<"各字符的哈夫曼码为:"<<endl;i=strlen(cha);huf(cha,m,i);}求信息量的流程图:开始获取离散信息源参数P(X)和P(Y/X)计算联合概率P(xiyj)=P(xi)*P(yj/xi)计算P(yj)及后验概率P(xi/yj)=P(xiyj)/P(yj)根据定义求信源熵H(X)和H(Y)根据定义求条件熵H(X/Y)和H(Y/X)根据定义求联合熵H(XY)求交互熵I(X;Y)=H(X)+H(Y)-H(XY)输出已知条件、信源熵、条件熵、联合熵和交互熵求信道容量C(不会)求信息量关键代码:float pX[2]={0.5,0.5},pY_X[2][2]={{0.98,0.02},{0.2,0.8}}; float pXY[2][2],pY[2],pX_Y[2][2];float hX,hY,hXY=0.0,hY_X=0.0,hX_Y=0.0;float iXY=0.0,iYX=0.0;int i,j;//计算联合概率for(i=0;i<2;i++)for(j=0;j<2;j++)pXY[i][j]=pX[i]*pY_X[i][j];//计算Y的概率for(i=0;i<2;i++)pY[i]=pXY[0][i]+pXY[1][i];//计算X的后验概率for(i=0;i<2;i++)for(j=0;j<2;j++)pX_Y[j][i]=pXY[i][j]/pY[j];//求信源熵hX=-(pX[0]*(log(pX[0])/log(2))+pX[1]*(log(pX[1])/log(2))); cout<<"信源熵H(X)="<<hX<<endl;hY=-(pY[0]*(log(pY[0])/log(2))+pY[1]*(log(pY[1])/log(2))); cout<<"信源熵H(Y)="<<hY<<endl;//求条件熵for(i=0;i<2;i++)for(j=0;j<2;j++)hY_X+=-(pXY[i][j]*log(pY_X[i][j])/log(2));cout<<"条件熵H(Y/X)="<<hY_X<<endl;for(i=0;i<2;i++)for(j=0;j<2;j++)hX_Y+=-(pXY[i][j]*log(pX_Y[j][i])/log(2));cout<<"条件熵H(X/Y)="<<hX_Y<<endl;//求联合熵for(i=0;i<2;i++)for(j=0;j<2;j++)hXY+=-(pXY[i][j]*log(pXY[i][j])/log(2));cout<<"联合熵H(XY)="<<hXY<<endl;//交互熵iXY=hX+hY-hXY;cout<<"交互熵I(X;Y)=I(Y;X)="<<iXY<<endl;float beta[2],C; //求信道容量香农编码流程图:开始输入符号个数N和相应概率X[i]按概率由大到小排序按公式求码长求出对应位的概率累加和按乘2取余法则,将累加概率转换为二进制结合求得的对应码长,将二进制的累加概率取对应长度的作为相应码字输出信源、概率、累加概率、码长和码字结束香农编码关键源代码:int main(){int N;cout<<"请输入信源符号个数:";cin>>N;cout<<"请输入各符号的概率:"<<endl;double *X=new double[N]; //离散无记忆信源int i,j;for(i=0;i<N;i++){cout<<"X["<<i+1<<"]="; cin>>X[i];}//由大到小排序for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(X[i]<X[j]){ double temp=X[i];X[i]=X[j];X[j]=temp; }int *K=new int[N]; //确定码长for(i=0;i<N;i++){K[i]=int(-(log(X[i])/log(2)))+1; //默认码长为1-log2(p(xi))if(K[i]==(-(log(X[i])/log(2))+1)) //当K[i]=-log2(p(xi))时,K[i]--K[i]--;}//累加概率double *Pa=new double[N]; Pa[0]=0.0;for(i=1;i<N;i++)Pa[i]=Pa[i-1]+X[i-1];//将累加概率转换为二进制string *code=new string[N];for(i=0;i<N;i++)for(j=0;j<N;j++) //这里默认最大码长不超过信源符号个数{double temp=Pa[i]*2;if(temp>=1) //累加概率乘2大于1时,对应码字加1,累加概率自身取余{code[i]+="1"; Pa[i]=Pa[i]*2-1;}else //累加概率乘2小于1时,对应码字加0,累加概率自身取余{code[i]+="0"; Pa[i]*=2;}}for(i=0;i<N;i++)code[i]=code[i].substr(0,K[i]); //求码字//输出码字cout<<setw(12)<<"信源"<<setw(12)<<"概率p(x)"<<setw(12)<<"累加概率Pa(x)"<<setw(8)<<"码长K"<<setw(8)<<"码字"<<endl;for(i=0;i<N;i++)cout<<setw(12)<<i+1<<setw(12)<<X[i]<<setw(12)<<Pa[i]<<setw(8)<<K[i]<<setw(8)<<co de[i]<<endl;delete []X; delete []Pa; delete []K; delete []code;return 0;}香农编码测试结果截图:求信息量实验结果截图:费诺编码流程图:输入信源符号个数n 、信源符号sign 及对应的概率p按概率从大到小排列,对应的符号也重新排列信源个数大于2?通过求累加和确定分组后每组概率累加和尽可能相近或相等。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的信息论与编码是一门涉及信息的度量、传输和处理的学科,通过实验,旨在深入理解信息论的基本概念和编码原理,掌握常见的编码方法及其性能评估,提高对信息处理和通信系统的分析与设计能力。

二、实验原理(一)信息论基础信息熵是信息论中用于度量信息量的重要概念。

对于一个离散随机变量 X,其概率分布为 P(X) ={p(x1), p(x2),, p(xn)},则信息熵H(X) 的定义为:H(X) =∑p(xi)log2(p(xi))。

(二)编码原理1、无失真信源编码:通过去除信源中的冗余信息,实现用尽可能少的比特数来表示信源符号,常见的方法有香农编码、哈夫曼编码等。

2、有噪信道编码:为了提高信息在有噪声信道中传输的可靠性,通过添加冗余信息进行纠错编码,如线性分组码、卷积码等。

三、实验内容及步骤(一)信息熵的计算1、生成一个离散信源,例如信源符号集为{A, B, C, D},对应的概率分布为{02, 03, 01, 04}。

2、根据信息熵的定义,使用编程语言计算该信源的信息熵。

(二)香农编码1、按照香农编码的步骤,首先计算信源符号的概率,并根据概率计算每个符号的编码长度。

2、确定编码值,生成香农编码表。

(三)哈夫曼编码1、构建哈夫曼树,根据信源符号的概率确定树的结构。

2、为每个信源符号分配编码,生成哈夫曼编码表。

(四)线性分组码1、选择一种线性分组码,如(7, 4)汉明码。

2、生成编码矩阵,对输入信息进行编码。

3、在接收端进行纠错译码。

四、实验结果与分析(一)信息熵计算结果对于上述生成的离散信源,计算得到的信息熵约为 184 比特/符号。

这表明该信源存在一定的不确定性,需要一定的信息量来准确描述。

(二)香农编码结果香农编码表如下:|信源符号|概率|编码长度|编码值|||||||A|02|232|00||B|03|174|10||C|01|332|110||D|04|132|111|香农编码的平均码长较长,编码效率相对较低。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的1.了解信息论与编码的基本概念和原理。

2.学习如何通过信息论与编码方法实现对数据的压缩和传输。

3.掌握信息论与编码实验的实验方法和实验技能。

4.提高实验设计、数据分析和报告撰写的能力。

二、实验内容1.通过对输入信源进行编码,实现对数据的压缩。

2. 比较不同编码方法的压缩效果,包括Shannon-Fano编码和霍夫曼编码。

3.通过传输信道对编码后的数据进行解码,还原原始信源。

4.分析并比较不同编码方法的传输效果,包括码率和传输质量。

三、实验原理1.信息论:熵是信息论中衡量信源不确定性的指标,熵越小表示信源的可预测性越高,在编码过程中可以压缩数据。

2. 编码方法:Shannon-Fano编码通过分治的方法将输入信源划分为不同的子集,分别进行编码;霍夫曼编码则通过构建最佳二叉树的方式,将较常出现的信源符号编码为较短的二进制码,较少出现的信源符号编码为较长的二进制码。

3.传输信道:信道可能存在误码和噪声,通过差错控制编码可以在一定程度上保障传输数据的正确性和完整性。

四、实验步骤1. 对给定的输入信源进行Shannon-Fano编码和霍夫曼编码。

2.计算编码后的码率,分析不同编码方法的压缩效果。

3.将编码后的数据传输到信道,模拟信道中的误码和噪声。

4.对传输后的数据进行解码,还原原始信源。

5.比较不同编码方法的传输质量,计算误码率和信噪比。

五、实验结果与分析1. 编码结果:通过对输入信源进行编码,得到了Shannon-Fano编码和霍夫曼编码的码表。

2.压缩效果:计算了不同编码方法的码率,比较了压缩效果。

3.传输结果:模拟信道传输后的数据,对数据进行解码,还原原始信源。

4.传输质量:计算了误码率和信噪比,分析了不同编码方法的传输质量。

六、实验总结通过本次实验,我深刻理解了信息论与编码的基本概念和原理,并掌握了信息论与编码实验的实验方法和实验技能。

在实验过程中,我遇到了一些困难,比如对编码方法的理解和实验数据的处理。

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

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

本科生实验报告实验课程信息论与编码学院名称管理科学学院专业名称信息与计算科学学生姓名章乾学生学号201207020114指导教师范安东实验地点6C402实验成绩二〇一四年十月二〇一四年十一月实验一离散信源信息量的计算(一)1 实验内容(1)熟悉利用srand()函数产生随机离散信源概率空间的方法;(2)计算随机离散信源的各种信息量:H(X)、H(XY)、H(Y);2 数据结构与算法描述3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据随机生成数据2)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)实验二离散信源信息量的计算(二)1 实验内容(1)熟悉利用srand()函数产生随机离散信源概率空间的方法;(2)计算随机离散信源的各种信息量:H(X|Y)、H(Y|X)、I(X;Y);2 数据结构与算法描述1)变量及函数的定义3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据随机生成数据2)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)实验三典型信道容量的计算1 实验内容(1)熟悉利用srand()函数产生随机离散信道概率空间的方法;(2)计算随机离散信道的信道容量;2 数据结构与算法描述1)变量及函数的定义3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据0.6 0.2 0.20.5 0.3 0.22)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)实验四香农编码1 实验内容(1)熟悉理解香农编码的过程(2)将给定的数据进行香农编码2 数据结构与算法描述3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据0.25 0.25 0.2 0.15 0.1 0.052)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)实验五 Huffman编码1 实验内容(1)熟悉理解Huffman编码的过程(2)将给定的数据进行Huffman编码2 数据结构与算法描述1)变量及函数的定义3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据0.2 0.1 0.3 0.1 0.1 0.22)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)实验六 循环冗余校验码1 实验内容(1)理解循环冗余校验的基本程序; (2)对给出的数据进行循环冗余校验;2 数据结构与算法描述1)变量及函数的定义3 实验数据与实验结果(可用文字描述或贴图的方式进行说明)1)测试数据信息码:321x x x +++ 生成码:431x x x +++2)实验结果4 程序代码清单(可直接将可运行源代码粘贴在下面的方框中)语。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告一、实验目的本实验旨在通过实践,使学生们对信息论与编码理论有一个更深入的理解,掌握信息论与编码的基本原理和应用方法。

二、实验环境本次实验使用MATLAB软件来实现相关编码算法。

三、实验内容1.信息熵的计算信息熵是信息理论中的一个重要概念,用来度量一些信息源的不确定性。

在实验中,我们将计算给定的一组消息的信息熵。

首先,我们将给定的消息编码为二进制序列。

然后,我们根据信息熵的定义,使用公式计算信息熵:H(X) = -Σ(p(x) * log2(p(x)))其中,H(X)表示信息熵,p(x)表示消息x发生的概率。

2.香农编码的实现香农编码是一种无失真的编码方法,用于将离散的符号序列编码为二进制码字。

在实验中,我们将实现香农编码算法。

首先,我们需要计算给定符号序列中各个符号的概率。

然后,根据概率大小,将概率最高的符号分配最短的二进制码字,将概率较低的符号分配较长的二进制码字。

实现香农编码算法后,我们将计算编码后的码字的平均码长,并与信息熵进行比较,了解香农编码的效率。

3.赫夫曼编码的实现赫夫曼编码是一种常用的无失真编码方法,也被广泛应用于数据压缩中。

在实验中,我们将实现赫夫曼编码算法。

首先,我们需要计算给定符号序列中各个符号的概率。

然后,根据概率大小,使用最小堆数据结构构建赫夫曼树。

最后,根据赫夫曼树的性质,将每个符号的编码确定下来。

实现赫夫曼编码算法后,我们将计算编码后的码字的平均码长,并与信息熵进行比较,了解赫夫曼编码的效率。

四、实验结果与分析1.实验一结果我们选取了一个包含1000个等概率的二进制消息的序列进行实验。

通过计算,我们得到了该消息序列的信息熵为12.实验二结果我们选取了一个包含1000个符号的序列进行实验。

通过计算,我们得到了编码后的平均码长为2.8、与信息熵的比较发现,香农编码的效率很高。

3.实验三结果我们选取了一个包含1000个符号的序列进行实验。

通过计算,我们得到了编码后的平均码长为2.6、与信息熵的比较发现,赫夫曼编码的效率也很高。

信息论与编码实验报告

信息论与编码实验报告

本科生实验报告实验课程信息理论与编码学院名称信息科学与技术学院专业名称学生姓名学生学号指导教师实验地点实验成绩二〇一六年九月----二〇一六年十一月填写说明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)(log )(log 22+-<≤-i i i x p K x p3.为了编成唯一可译码,计算第i 个消息的累加概率∑-==11)(i k k i x p p4.将累加概率P i 变换成二进制数。

信息论与编码实验报告(DOC)

信息论与编码实验报告(DOC)

计算机与信息学院信息论与编码实验报告专业班级学生姓名及学号周伟康20112910 课程教学班号任课教师苏兆品实验指导教师实验地点2013 ~ 2014 学年第一学期信息论与编码课程设计目录一.课程设计目的 (2)二.课程设计要求 (2)三.课程设计描述 (2)四.程序结构 (2)五.算法及部分源码 (3)六.用例测试 (9)七.总结 (20)一.课程设计目的通过编程实现,在理解掌握的基础上进一步扩展课授的几种无失真信源编码算法。

以实践检验理论。

二.课程设计要求1.对一灰度图像进行游程编码的设计实现(将Huffman与游程结合)。

2.试对任意的数字序列(如学号、电话号码)进行自适应算术编码。

3.围绕设计题目查阅资料,掌握编码的基本原理。

4.按设计要求和编码原理进行算法的设计,算法的设计应满足正确性、可读性、健壮性、高效率等要求。

5.在此基础上,可以进行扩展三.课程设计描述本次设计实现内容:1.对任意的信源符号序列进行N元Huffman编码/译码。

2.对任意的信源符号序列进行N元Fano 编码/译码。

3.对任意的信源符号序列进行N元Elias 编码/译码。

4.对像素矩阵进行游程与上述编码方式结合的编码/译码。

5.数字串的自适应算数编码/译码。

6.对任意给定译码规则的译码和判断其是否为即时码。

输入数据从键盘或磁盘文件读入,运算结果显示到屏幕或保存到文件。

编写可视化图形交互界面。

本次设计程序用Java实现,由本人独立完成。

四.程序结构本次设计采用MVC设计模式:控制包下为文件读写线程执行包下是执行主类模式包分编码译码两部分Item:封装每个码元符号信息和操作AnlysisModel:信源序列统计分析模型其他如右图顾名思义视图包也分编码译码两部分MainFrame:主框架界面编码下:算数编码面板分组码编码面板译码下:算数译码面板分组码译码面板五. 算法及部分源码a) N 元Huffman 编码:算法:1) 将每个信源符号加入优先队列Heap 。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告信息论与编码实验报告一、引言信息论与编码是现代通信领域中的重要理论基础,通过对信息的量化和编码方式的设计,可以提高通信系统的传输效率和可靠性。

本实验旨在通过对信息论与编码的实际应用进行探索,加深对相关理论的理解和掌握。

二、实验目的1. 了解信息论与编码的基本概念和原理;2. 学习使用信息论与编码的工具和方法;3. 进行实际的编码实验,验证理论的有效性。

三、实验内容1. 信息熵的计算信息熵是信息论中的重要概念,用于衡量信息的不确定性。

我们选择一个简单的例子来计算信息熵,假设有一个硬币,正反面出现的概率分别为0.5。

根据信息熵的公式,我们可以计算出该硬币的信息熵为1比特。

2. 信道容量的计算信道容量是指在给定信道带宽和信噪比条件下,信道能够传输的最大数据率。

我们选择一个高斯信道作为实验对象,通过改变信噪比来计算信道容量。

实验结果显示,信噪比越高,信道容量越大。

3. 奇偶校验码的设计与实现奇偶校验码是一种简单的错误检测码,可以用于检测数据传输过程中的错误。

我们设计了一个简单的奇偶校验码方案,并通过编程实现了该方案。

实验结果表明,奇偶校验码能够有效地检测出数据传输中的错误。

4. 哈夫曼编码的设计与实现哈夫曼编码是一种有效的数据压缩算法,通过对出现频率较高的字符进行短编码,可以实现数据的高效传输和存储。

我们选择一段文本作为实验对象,通过统计字符出现频率并设计相应的哈夫曼编码表,成功地对文本进行了压缩。

四、实验结果与分析通过实验,我们成功地计算了信息熵和信道容量,并验证了理论的准确性。

在奇偶校验码的实验中,我们发现该码能够有效地检测出单比特错误,但对于多比特错误的检测能力有限。

在哈夫曼编码的实验中,我们成功地对文本进行了压缩,并获得了较高的压缩比。

五、实验总结通过本次实验,我们深入了解了信息论与编码的基本概念和原理,并通过实际操作加深了对相关理论的理解。

实验结果表明,信息论与编码在通信系统中具有重要的应用价值,能够提高通信效率和可靠性。

信息论和编码实验报告

信息论和编码实验报告

信息论与编码实验报告实验课程名称:赫夫曼编码(二进制与三进制编码)专业信息与计算科学班级信息与计算科学1班学生姓名李林钟学号 20####指导老师王老师信息论和编码实验报告一、实验目的利用赫夫曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。

赫夫曼编码是信源编码中最基本的编码方法。

●理解赫夫曼编码,无论是二进制赫夫曼编码,还是m 进制赫夫曼编码,都要理解其编码原理和编码步骤。

● 回顾无失真信源编码定理,理解无失真编码的基本原理和常用编码方法。

●掌握二进制赫夫曼编码和m 进制赫夫曼编码的基本步骤,能计算其平均码长,编码效率等。

●应用二进制赫夫曼编码或m 进制赫夫曼编码处理简单的实际信源编码问题。

二、实验环境与设备1、操作系统与编程软件:windows 操作系统,cfree5.0, Visual C++ 6.0。

2、编程语言:C 语言以及C++语言 三、实验内容1. 二进制赫夫曼编码原理及步骤: (1)信源编码的计算设有N 个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n 、信源的概率分布P={p(s i )},i=1,…..,n 。

且各符号xi 的以li 个码元编码,在变长字编码时每个符号的平均码长为∑==ni li xi p L 1)( ;信源熵为:)(log )()(1xi p xi p X H ni ∑=-= ;唯一可译码的充要条件:11≤∑=-ni Ki m ;其中m 为码符号个数,n 为信源符号个数,Ki 为各码字长度。

(2)二元霍夫曼编码规则(1)将信源符号依出现概率递减顺序排序。

(2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源。

称为信源的第一次缩减信源,用s1 表示。

(3)将缩减信源 s1 的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。

信息论与编码实验报告

信息论与编码实验报告

信息论与编码实验报告,信息论与编码实验报告,姓名:xxxxx学号: xxxxxxxx专业:电子信息工程班级:电子信息xxxx班指导老师: xx实验一关于信源熵的实验一、实验目的1. 掌握离散信源熵的原理和计算方法。

2. 熟悉matlab 软件的基本操作,练习使用matlab 求解信源的信息熵。

3. 自学图像熵的相关概念,并应用所学知识,使用matlab 或其他开发工具求解图像熵。

4. 掌握Excel的绘图功能,使用Excel绘制散点图、直方图。

二、实验原理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 ?13. 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) 输入一个离散信源,并检查该信源是否是完备集。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 绘制二进熵函数曲线(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 nX 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)五、实验结果二元信源熵函数信源熵为信息的不确定度,概率的大小反映了信息量的大小,如果二元信源的输出符号是确定的,即p=1,则该信源不提供任何信息,当二元信源符号0和1以等概率发生时,信源熵达到极大值,等于1bit信息量。

实验二:验证二元离散对称信道的互信息的性质(4学时)(课后做)一、实验目的1掌握离散对称信道互信息的计算及性质特点。

2练习应用matlab软件进行互信息的函数曲线的绘制,并从曲线上理解其物理意义。

二、参看定理4.2.1及4.2.2三、实验内容1验证固定信道,I(X;Y)是信源分布的上凸函数;2验证固定信源,I(X;Y)是信道传递概率的下凸函数;3 I(X;Y)的三维分布绘制(自行学习三维图形的绘制函数)四、实验结果(1)I(X;Y)是信源分布的上凸函数(2)I(X;Y)是信道传递概率的下凸函数(3)I(X;Y)的三维分布绘制五、源代码(1)验证固定信道,I(X;Y)是信源分布的上凸函数syms w;x=[w,1-w];p=[0.90.1;0.10.9];pxy=[x(1,1)*p(1,:);x(1,2)*p(2,:)];py=[x*p(:,1),x*p(:,2)];px_y=[pxy(:,1)/py(1,1),pxy(:,2)/py(1,2)];Ix_y=sum(sum(pxy.*log2(p./[py;py])));ezplot(w,Ix_y,[0,1,0,1]);xlabel('变量w');ylabel('平均互信息量I');title('平均互信息量与w的关系');grid on(2)验证固定信源,I(X;Y)是信道传递概率的下凸函数m=[1 0.5 0];figurehold on %设置为叠加绘图模式for i=1:5w=m(i);p=0:0.01:1;I=(w.*(1-p)+(1-w).*p).*log2(1./(w.*(1-p)+(1-w).*p))+(w.*p+(1-w).*(1-p )).*log2(1./(w.*p+(1-w).*(1-p)))-(p.*log2(1./p)+(1-p).*(log2(1./(1-p))));plot(p,I,'b');title('曲线图');xlabel('信道转移概率p');ylabel('平均互信息量I'); end(3)I(X;Y)的三维分布绘制[p,q]=meshgrid(0.000001:0.01:1,0.000001:0.01:1);Hnoise=-p.*log2(p)-(1-p).*log2(1-p);%噪声熵x=(1-p).*q+p.*(1-q);I=-x.*log2(x)-(1-x).*log2(1-x)-Hnoise;mesh(p,q,I)实验三:离散信道容量(1学时)一、实验目的1. 掌握离散信道容量的计算。

2. 理解离散信道容量的物理意义。

3. 练习应用matlab 软件进行函数曲线的绘制,并从曲线上理解其物理意义。

二、实验原理二元对称信道BSC (Binary Symmetric Channel )二进制离散信道模型有一个允许输入值的集合X={0,1}和可能输出值的集合Y={0,1},以及一组表示输入和输出关系的条件概率(转移概率)组成。

如果信道噪声和其他干扰导致传输的二进序列发生统计独立的差错,且条件概率对称,即 (0/1)(1/0)(1/1)(0/0)1p Y X p Y X p p Y X p Y X p ======⎧⎨======-⎩这种对称的二进制输入、二进制输出信道称做二元对称信道(或二进制对称信道,简称BSC 信道),如下图所示:信道容量公式:{()}max p x C I(X,Y)三、实验内容BSC 信道是DMC 信道对称信道的特例,对于转移概率为P(0/1)=P(1/0)=p ,P(0/0)=P(1/01)=1-p ,求出其信道容量公式,并在matlab 上绘制信道容量C 与p 的曲线。

根据曲线说明其物理意义。

参考代码:>> p = linspace(0,1,50);c = 1+p.*log2(p)+(1-p).*log2(1-p);plot(p,c)xlabel('p')ylabel('c')四、实验结果C=1+plogp+(1-p )log (1-p )1、 无噪声干扰时(p=0),损失熵H(X/Y)=0,信道容量等于信源发出的码元速率。

2、P=1/2时,C=0,信道已无传输能力。

实验四:Huffman编码软件实现(4个学时)一、实验目的(1)进一步熟悉Huffman编码过程;(2)练习matlab中哈夫曼编码函数的调用;(3)掌握Matlab中Huffman编码的思想;(4)掌握平均码长,编码效率的计算。

二、实验原理二元哈夫曼编码的具体步骤归纳如下:1.统计n个信源消息符号,得到n个不同概率的信息符号。

2.将这n个信源信息符号按其概率大小依次排序:p(x) ≥p(x2)≥…≥p(x n)13.取两个概率最小的信息符号分别配以0和1两个码元,并将这两个概率相加作为一个新的信息符号的概率,和未分配的信息符号构成新的信息符号序列。

4.将剩余的信息符号,按概率大小重新进行排序。

5.重复步骤3,将排序后的最后两个小概论相加,相加和与其他概率再排序。

6.如此反复重复n-2次,最后只剩下两个概率。

7.从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即相应的码字,构成霍夫曼编码字。

编码结束。

编码之后,哈夫曼编码的平均码长为:1()n ii i K p x K ==∑哈夫曼编码的效率为:()=H x K η=信源熵平均码长三、实验内容(一)直接调用matlab 哈夫曼编码函数进行编码,与人工编码结果做比较。

huffmandict 函数: 为已知概率分布的信源模型生成哈夫曼编解码索引表。

调用方法如下:[dict ,L] = huffmandict (symbols , p)调用Huffmandict 函数,使用数组s (编码符号)及其概率数组P 进行Huffman 编码,编码后产生一个编码词典dict ,以及平均码长L 。

求出熵H ,并计算其效率H/L基本参考:symbols = [1: ]; p = [ ];[dict ,L] = huffmandict(symbols ,p)code1= dict{1,2}.. dict{ ,2}(二)根据编码思想编写要求(1)输入:信源的概率分布P ;(2)输出:每个信源符号对应的Huffman 编码的码字。

(3)计算平均码长 、信源熵 及编码效率并对:输入的概率数组中有小于0的值输入的概率数组总和大于1作出判断四、实验结果(一)(二)五、哈夫曼编码的MATLAB实现(基于0、1编码):clc;clear;A=[5,3,1,6,2];%原概率序列A=A/sum(A);A=fliplr(sort(A));%按降序排列T=A;[m,n]=size(A);B=zeros(n,n-1);%空的编码表(矩阵)for i=1:nB(i,1)=T(i);%生成编码表的第一列endr=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:tB(i,j)=T(i);endK=find(T==r);B(n,j)=K(end);%从第二列开始,每列的最后一个元素记录特征元素在该列的位置r=(B(t-1,j)+B(t,j));%最后两个元素相加T(t-1)=r;T(t)=0;T=fliplr(sort(T));t=t-1;endB;%输出编码表END1=sym('[0,1]');%给最后一列的元素编码END=END1;t=3;d=1;for j=n-2:-1:1%从倒数第二列开始依次对各列元素编码for i=1:t-2if i>1 & B(i,j)==B(i-1,j)d=d+1;elsed=1;endB(B(n,j+1),j+1)=-1;temp=B(:,j+1);x=find(temp==B(i,j));END(i)=END1(x(d));endy=B(n,j+1);END(t-1)=[char(END1(y)),'0']; END(t)=[char(END1(y)),'1']; t=t+1;END1=END;endA%排序后的原概率序列END%编码结果for i=1:n[a,b]=size(char(END(i)));L(i)=b;endavlen=sum(L.*A)%平均码长H1=log2(A);H=-A*(H1')%熵P=H/avlen%编码效率欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求。

相关文档
最新文档