欢迎来到天天文库
浏览记录
ID:30888084
大小:153.06 KB
页数:6页
时间:2019-01-04
《实验二计算信道容量》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验二计算信道容量一、实验题目1、已知:信源符号个数r、信宿符号个数s、信道转移概率矩阵P。2、输入:任意的一个信道转移概率矩阵。信源符号个数、信宿符号个数和每个具体的转移概率在运行时从键盘输入。3、输出:信道容量C。二、实验目的1、理解和掌握信道容量的概念和物理意义;2、理解计算离散信道容量的迭代算法。三、算法设计重新计算输入符号槪率输入信源、信宿个数、信道转移矩阵迭代精度误差计鼻输入符号的概奏计算迭代参数、正向传输和反向传输的信道容量输岀迭代次数、最佳信源概率、信道容量四、程序分析1、信道容量:C=max7(X;y)P(»=maxp(勺
2、))P(X-
3、x.)logP(〉2)P(X)2、当正向传输的信道容量和反向传输的信道容量在谋差范围内时表示此时信道稳定,该信道容量即为所求。3、计算正、反向传输的信道容量的迭代算法公式如下:a/=exp[工P(x
4、xy)logP(X)cap_max=log(max(y))cap_result=log弓P(x:風)工POMi五、程序代码**********************************************************************************************【名称】:信道容量迭代
5、法【函数】:计算a[i]函数、计算cap_result函数、计算cap_max函数、主函数【思路】:利用迭代法,使cap_result初步逼近cap_max,当误差小于e时,cap_result即为信道容量**********************************************************************************************/#include#inelude#ineludeintX_nurn,Y_num;intn=l;d
6、oublee;doublePXi[50];doubleP[50][50];doublea[50];doublecap_result;//X_num为信源个数,Y_num为信宿个数//迭代法精度误差//输入符号的概率P(xi)数组//信道转移概率矩阵doublecap_max;//迭代法参数a[i]、C、CCdoubleresult;//信道容量/**************************************************************************函数名:doubleCalculate_a(int
7、k,doublePXi[])功能:计算并输出迭代法所需的参数a[k]参数:返回值:a[k],也就是P(yi
8、xj)*log(P(yi
9、xj)/P(yi))/log2对i从0到Y_num-1求和*************************************************************************doubleCalculate_a(intk,doublePXi[])inti,j;doublesuml=0;for(j=0;j10、++)〃必须在此处令sum置0//求和PXi[i]*P[i][j]得到P(yj)sum+=PXi[i]*P[i][j];//P[i][j]表示P(yj11、xi);}//输出a[k]suml+=P[k][j]*log(P[k][j]/sum);〃求和得到a[k]printf("a[%d]=%ft",k/suml);returnexp(suml);函数名:doubleCalculate_cap_result(doublePXi[],doublea[])功能:计算并输出迭代法所需的参数cap_result参数:返回值:cap_result,也即是12、用來逼近最值的参数*************************************************************************doubleCalculate_cap_result(doublePXi[],doublea[]){inti;doublesum=0;for(i=0;i13、cap_max(doublea[])功能:计算并输出迭代法所需的参数cap_max参数:返回值:cap_max,也即a[k]的最大值7doubleCalculate_cap_ma
10、++)〃必须在此处令sum置0//求和PXi[i]*P[i][j]得到P(yj)sum+=PXi[i]*P[i][j];//P[i][j]表示P(yj
11、xi);}//输出a[k]suml+=P[k][j]*log(P[k][j]/sum);〃求和得到a[k]printf("a[%d]=%ft",k/suml);returnexp(suml);函数名:doubleCalculate_cap_result(doublePXi[],doublea[])功能:计算并输出迭代法所需的参数cap_result参数:返回值:cap_result,也即是
12、用來逼近最值的参数*************************************************************************doubleCalculate_cap_result(doublePXi[],doublea[]){inti;doublesum=0;for(i=0;i13、cap_max(doublea[])功能:计算并输出迭代法所需的参数cap_max参数:返回值:cap_max,也即a[k]的最大值7doubleCalculate_cap_ma
13、cap_max(doublea[])功能:计算并输出迭代法所需的参数cap_max参数:返回值:cap_max,也即a[k]的最大值7doubleCalculate_cap_ma
此文档下载收益归作者所有