資源簡介
[例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程序
評論
共有 條評論