信道容量编码.doc

上传人:工**** 文档编号:560745753 上传时间:2023-09-02 格式:DOC 页数:7 大小:57.51KB
返回 下载 相关 举报
信道容量编码.doc_第1页
第1页 / 共7页
信道容量编码.doc_第2页
第2页 / 共7页
信道容量编码.doc_第3页
第3页 / 共7页
信道容量编码.doc_第4页
第4页 / 共7页
信道容量编码.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《信道容量编码.doc》由会员分享,可在线阅读,更多相关《信道容量编码.doc(7页珍藏版)》请在金锄头文库上搜索。

1、信计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

2、: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;

3、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+

4、) /*取初始概率为均匀分布*/ 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

5、; 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; f

6、or(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);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号