• 大小: 19KB
    文件类型: .jpg
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: 其他
  • 标签: 离散信道  

资源简介

[例3.6]某对称离散信道的信道转移概率矩阵P为: 1/3 1/3 1/6 1/6 1/6 1/6 1/3 1/3 计算其最佳信源概率和信道容量C。 附:程序代码如下: #include #include #define MAX 50 double Calculate_a(int k,double pa[]); double Calculate_C1(double pa[],double a[]); double Calculate_C2(double a[]); int r,s; double pba[MAX][MAX]; void main() { int i,j; double C1,C2,E; double a[MAX],pa[MAX]; E=0.000001; printf("请输入信源符号个数r:\n"); scanf("%d",&r); printf("请输入信宿符号个数s:\n"); scanf("%d",&s); printf("请输入精确度E:\n"); scanf("%lf",&E); printf("请输入信源P[ai]:\n"); for(i=0;i<r;i++) scanf("%lf",&pa[i]); printf("请输入信道转移概率矩阵P[bj][ai]:\n"); for(i=0;i<r;i++) for(j=0;j<s;j++) scanf("%lf",&pba[i][j]); do { for(i=0;i=E) { double sum=0; for(i=0;i<r;i++) sum+=pa[i]*a[i]; for(i=0;i<r;i++) pa[i]=pa[i]*a[i]/sum; } else { printf("最佳信源概率:\n"); for(i=0;i=E); printf("信道容量为:%lf\n",C1/log(2)); } double Calculate_a(int k,double pa[]) { int i,j; double temp,sum2=0; for(j=0;j<s;j++) { double sum1=0; for(i=0;i<r;i++) { sum1+=pa[i]*pba[i][j]; } temp=pba[k][j]/sum1; temp=log(temp); sum2+=pba[k][j]*temp; } return exp(sum2); } double Calculate_C1(double pa[],double a[]) { int i; double sum=0; for(i=0;i<r;i++) sum+=pa[i]*a[i]; return log(sum); } double Calculate_C2(double a[]) { int i; double max=a[0]; for(i=0;i<r;i++) if(max<a[i]) max=a[i]; return log(max); }

资源截图

代码片段和文件信息

评论

共有 条评论

相关资源