信道容量迭代算法.doc.doc

信道容量迭代算法.doc.doc

ID:51651131

大小:31.50 KB

页数:3页

时间:2020-03-14

信道容量迭代算法.doc.doc_第1页
信道容量迭代算法.doc.doc_第2页
信道容量迭代算法.doc.doc_第3页
资源描述:

《信道容量迭代算法.doc.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、信道容量迭代算法#include   using namespace std;     #define FLOAT_MINUS_PRECISION 0.00001  typedef vector VEC_PFLOAT;     //迭代计算信道容量,参数值为信源,信宿符号个数和信道转移概率矩阵,返回信道容量< /pre>   float GetCapacity(int nSourceSymbol,int nHostSymbol,const VEC_PFLOAT& vTransMatrix)  {  //信道容量初始化为最小值  float fC

2、apacity = FLT_MIN;  //信源概率分布  float *pfSoureProb = new float[nSourceSymbol];  //初始化信源分布为均匀分布  int i;  for (i = 0; i < nSourceSymbol; i++)  {  pfSoureProb[i] = 1.0 / nSourceSymbol;  }  //初始化φ函数  VEC_PFLOAT vPhi;  for (i = 0; i < nSourceSymbol; i++)  {  float *pfTemp = new float[nHostSymbol];  

3、 vPhi.push_back(pfTemp);  }  //设置精度;  const float cfDelta = 0.02f;  float fPrecision;  //迭代计算  int j,k;  float *pfSum = new float[nSourceSymbol];  do   {  for (i = 0; i < nSourceSymbol; i++)  {  for (j = 0; j < nHostSymbol; j++)  {   //计算ΣPi*Pji  float fSum = 0.0f;  for (k = 0; k < nSourceSym

4、bol; k++)  {  fSum += pfSoureProb[i] * vTransMatrix[k][i];  }  vPhi[i][j] = pfSoureProb[i] * vTransMatrix[j][i] / fSum;  }   }  float fSumDeno = 0.0f; //分母求和   for (i = 0; i < nSourceSymbol; i++)  {   float fSum = 0.0f;  for (j = 0; j < nHostSymbol; j++)  {  fSum += vTransMatrix[j][i] * logf(

5、vPhi[i][j]);  }  pfSum[i] = expf(fSum);  fSumDeno += pfSum[i];  }  for (i = 0; i < nSourceSymbol; i++)  {   pfSoureProb[i] = pfSum[i] / fSumDeno;  }  //计算新一轮的容量  float fNewC = logf(fSumDeno);  //计算精度  fPrecision = fabs(fNewC - fCapacity) / fCapacity;  fCapacity = fNewC;  } while(fPrecision - 

6、cfDelta > 0.0f);  //释放临时资源  delete []pfSum;  for (i = 0; i < vPhi.size(); i++)  {  float* pfTemp = vPhi.at(i);  delete pfTemp;  }  vPhi.clear();  return fCapacity;  }  int main()  {  //转移矩阵  VEC_PFLOAT vTransMatrix;  int nCol,nLine;  cout<<"请输入信源符号个数:";  cin>>nLine;  cout<<"请输入信宿符号个数:";  cin>

7、>nCol;  cout<<"请依次输入"<<<"行信道转移概率矩阵:(以空格隔开每个概率)";< /pre>   for (int i = 0; i < nLine; i++)  {  float *pfTemp = new float[nCol];  Label  float fSum = 0.0f;   cout<<"X"<<<":";  for (int j = 0; j < nCol - 1; j++)  {  cin>>pfTemp[j];  fSum += pf

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。