资源预览内容
第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
亲,该文档总共7页全部预览完了,如果喜欢就下载吧!
资源描述
信计082 0810820221 马敏玉 信道容量编码源程序#include #include #include void main() register int i,j; register int k; int r,s; /*信道矩阵的行数和列数*/ float *p=NULL; float *q=NULL; float *d=NULL; float *a=NULL; float *p_ji=NULL; /*二维数组p_yx存放信道矩阵*/ float C,u,max,t,IU; /*C为信道容量*/ printf(the number of input information source:nr=); /*输入行数和列数*/ scanf(%d,&r); printf(the number of output information source:ns=); scanf(%d,&s);p=(float *)calloc(r,sizeof(float); /*初始化需要用到的数组*/ q=(float *)calloc(r,sizeof(float); d=(float *)calloc(r,sizeof(float); a=(float *)calloc(r,sizeof(float); p_ji=(float *)calloc(r,sizeof(float); for(i=0;ir;i+) p_jii=(float *)calloc(r,sizeof(float);printf(Please matrix of channel:n); /*输入信道矩阵*/ for(i=0;ir;i+) for(j=0;js;j+) printf(p_ji%d%d=,i,j); scanf(%f,&p_jiij); printf(n); for(i=0;ir;i+) /*判断输入的信道矩阵是否符合概率分布*/ t=0.0; for(j=0;js;j+) t=t+p_jiij; if(t=1.000001) printf(Error!); exit(-1); for(i=0;ir;i+) /*取初始概率为均匀分布*/ pi=1.0/r; for(j=0;js;j+) /*计算输出信源概率分布qj*/ qj=0; for (i=0;ir;i+) qj=qj+pi*p_jiij; for(i=0;ir;i+) /*计算ai*/ di=0; for(j=0;js;j+) if(p_jiij=0) di=di+0; else di=di+p_jiij*log(p_jiij/qj); ai=exp(di); u=0.0; for(i=0;ir;i+) /*计算u*/ u=u+pi*ai; C=log(u)/log(2.0); max=a0; for(i=0;i=max) max=ai; IU=log(max)/log(2.0); /*计算IU*/k=1; while(IU-C)=10e-6) /*迭代计算*/ /*计算最佳输入分布pi*/ for(i=0;ir;i+) pi=pi*ai/u; for(j=0;js;j+) /*计算输出信源的概率分布qj*/ qj=0; for (i=0;ir;i+) qj=qj+pi*p_jiij; for(i=0;ir;i+) /*计算ai*/ di=0; for(j=0;js;j+) if(p_jiij=0) di=di+0; else di=di+p_jiij*log(p_jiij/qj); ai=exp(di); u=0.0; for(i=0;ir;i+) /*计算u*/ u=u+pi*ai; C=log(u)/log(2.0); /*计算IL*/ max=a0; for(i=0;i=max) max=ai; IU=log(max)/log(2.0); /*计算IU*/ k=k+1; printf(The matrix of channel is:n); /*输出信道矩阵*/ for(i=0;ir;i+) for(j=0;js;j+) printf(%.3f ,p_jiij); printf(n); printf(The iteration number is:nk=%dn,k); /*输出迭代次数*/ printf(The best input probability distribution is:n); /*计算输出信源的概率分布qj*/ for(i=0;is;i+) printf(%.3f ,qi); printf(nThe capacity of the channel is:nC=%fbit/symboln,C); /*输出信道容量*/ printf(The best input probability distribution is:n); /*输出最佳输入分布*/ for(i=0;ir;i+) printf(%.3f ,pi);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号