--(完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载!
《信息论基础实验》
指导老师:贺正芸
班级:信息工程081
姓名:卢慈荣
学号:08401400103
湖南工业大学
电气与信息工程学院
实验一 信道容量的迭代算法程序设计
一、实验目的
(1)进一步熟悉信道容量的迭代算法;
(2)学习如何将复杂的公式转化为程序;
(3)掌握C语言数值计算程序的设计和调试技术。
二、实验要求
(1)已知:信源符号个数r、信宿符号个数s、信道转移概率矩阵P。
(2)输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。
(3)输出:最佳信源分布P*,信道容量C。
三、信道容量迭代算法
1:procedure CHANNEL CAPACITY(r,s,())
2:initialize:信源分布=1/r,相对误差门限,C=—
3:repeat
4:
5:
6:
C (
7:until
8:output P*= ,C
9:end procedure
-------------------------------------------------------------------------------------------------------
四、实验代码
/*
问题:
1 初始最大容量的设定
2 exp的精确求解
*/
#include
#include
#include
#include
#include
#define R 1000
#define S 1000
#define delta 1e-2
#define inf 1e6
using namespace std;
double P_i[R],P_ji[S][R],Thi_ij[R][S];
double Pre_C,Now_C;
int r,s,Num;
double __log2(double a)
{
return log(a)/log(2);
}
double __exp(double a)
{
return pow(2.718281828459045 ,a);
}
int eps( double a)
{
if(a>delta||a
}
void scan()
{
int i,j,k;
int flag=0;
double t;
freopen("信道信息.txt","r",stdin);
printf("本次信道信息如下:(若要更改信道信息,请终止程序运行后,改变文件信道信息.txt中的信息)\n");
printf("信源处信息的个数:");
scanf("%d",&r);
printf("%d\n\n",r);
printf("信道接收处信息的种类:");
scanf("%d",&s);
printf("%d\n\n",s);
printf( "信道的分配(每一行表示信源处的一个信息对接收端一处信息的概率分布):\n");
for(i=0;i
{
t=0.0;
for(j=0;j
{ scanf("%lf",&P_ji[j][i]);
if(P_ji[j][i]<0) flag=1;
t+=P_ji[j][i];
}
if(eps(t-1.0)) flag=1;
}
for(i=0;i
{
for(j=0;j
printf("%lf ",P_ji[j][i]);
printf("\n");
}
if(flag)
printf("信道数据有误!\n");
}
void print()
{
int i,j,k;
printf("\n\n\t\t运行结果\n\n最大的信息容量是:%lf.\n",Now_C);
printf("\n迭代次数是%d.\n",Num);
printf("\n信源信息概率分布为:\n");
for(i=0;i