资源简介
[例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);
}
代码片段和文件信息
- 上一篇:电机振动故障检测tensorflow神经网络
- 下一篇:DSPF2812程序
评论
共有 条评论