教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

信息论与编码实验报告

来源:网络收集 时间:2026-08-14
导读: 信息论与编码实验报告 求信息量的流程图:开始 获取离散信息源参 数 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) 根据定

信息论与编码实验报告

求信息量的流程图:开始

获取离散信息源参 数 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;

//求信道容量

信息论与编码实验报告

香农编码流程图:

香农编码关键源代码:

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)<<code[i]<<endl; delete []X; delete []Pa; delete []K; delete []code; return 0; }

信息论与编码实验报告

香农编码测试结果截图:

求信息量实验结果截图:

信息论与编码实验报告

费诺编码流程图:

信息论与编码实验报告

费诺编码源程序代码:

//全局变量定义 int n; string *sign; double *p; string *code;

void fano(int a,int b) //费诺编码函数 { if((b-a)>=1) //判断该组中符号个数是否大于2 { double sum=0; for(int i=a;i<=b;i++) sum+=p[i]; //计算该组概率累加和 double s1=0,*s=new double[10]; for(i=a;i<=b;i++) { s1+=p[i];s[i]=fabs(2*s1-sum)/sum; } double min=s[a]; int c; for(i=a;i<=b;i++) if(s[i]<=min) { min=s[i]; c=i; //定位使两组概率和尽可能相近或相等的位置c } for(i=a;i<=b;i++) { if(i<=c) code[i]+="0"; //码字加"0" else code[i]+="1"; //码字加"1" } //判断分组点位置,进而分情况自身调用 if(c==a) fano(c+1,b); else if(c==b-1) fano(a,c); else { fano(a,c);fano(c+1,b); } } }

void main() { cout<<"请输入信源符号个数n:"; cin>>n; p=new double[n]; sign=new string[n];

信息论与编码实验报告

code=new string[n]; cout<<"请依次输入信源符号:"; for(int i=0;i<n;i++) cin>>sign[i]; cout<<"请依次输入信源符号的概率:"; for(i=0;i<n;i++) cin>>p[i]; for(i=0;i<n-1;i++) for(int j=i+1;j<n;j++) if(p[i]<p[j]) { double temp=p[i];p[i]=p[j];p[j]=temp; string m=sign[i];sign[i]=sign[j];sign[j]=m; } fano(0,n-1); //费诺编码 cout<<endl<<endl<<setw(8)<<"信源符号"<<setw(8)<<"概率"<<setw(8)<<"码字"<<setw(8)<<"码长"<<endl; for(i=0;i<n;i++) cout<<setw(8)<<sign[i]<<setw(8)<<p[i]<<setw(8)<<code[i]<<setw(8)<<code[i].length()<<endl; delete []p; delete []sign; delete []code; }

费诺编码测试结果截图:

信息论与编码实验报告

哈弗曼编码流程图:

信息论与编码实验报告

香农编码关键代码:

typedef struct {

int weight; int parent; int lchild; int rchild; }hnodetype; //哈夫曼树节点 typedef struct {

int bit[10]; int position; char sign; }hcodetype; //哈弗曼编码表

void Huffman(char sign[],int m[],int n); / …… 此处隐藏:3387字,全部文档内容请下载后查看。喜欢就下载吧 ……

信息论与编码实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/115941.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)