离散信道容量迭代算法
哥花了一点小小时间写的,望各位不吝赐教!
//===============================================
//made by : 何盛昌
//number : 496592219
//===============================================
#include <stdlib.h>
#include <iostream.h>
#include <math.h>
void main()
{
//===============================================
//确定输入及输出符号的个数
//因为一般先验概率是取等概率,所以为1/num_in
//===============================================
int num_in,num_out;
int i,j;
cout<<"输入符号的个数为:"<<endl;
cin>>num_in;
cout<<"输出符号的个数为:"<<endl;
cin>>num_out;
cout<<"输入概率为:"<<endl;
float *P_in;
P_in=new float[num_in]; //输入的符号的概率
float *P_out;
P_out=new float[num_out]; //输出的符号的概率
for (i=0;i<num_in;i++)
{
P_in[i]=1.0/(float)num_in;
cout<<P_in[i]<<" ";
}
cout<<endl;
//================================================
//再输入信道转移概率矩阵
//注意进行判断,某行如果总概率大于1,则出现错误应从新输入
//================================================
cout<<"输入转移概率:"<<endl;
float **p_ji; //转移条件概率
p_ji=new float *[num_in];
for (i=0;i<num_in;i++)
{
p_ji[i]=new float[num_out];
}
for (i=0;i<num_in;i++)
{
for (j=0;j<num_out;j++)
{
cin>>p_ji[i][j];
}
}
for (i=0;i<num_in;i++)
{
float validate=0.0;
for (j=0;j<num_out;j++)
{
validate+=p_ji[i][j];
}
if (validate>1.000001||validate<0.999999)
{
cout<<"输入数据有误,请检查后再次输入。"<<endl;
exit(-1);
}
}
float **p_ij; //反条件概率
p_ij=new float *[num_in];
for (i=0;i<num_in;i++)
{
p_ij[i]=new float[num_out];
}
float C_Pre,C; //当前信道容量和前一次循环信道容量
C=10.0;
double Pe=0.000001; //两次信道容量相差的阈值
int r=0; //迭代次数
float *p_up; //计算第r+1次循环输入分布p_in分子
p_up=new float[num_in];
float p_down; //计算第r+1次循环输入分布p_in分母
do
{
r++;
//================================================
//求第r次循环反条件概率p_ij
//================================================
for (j=0;j<num_out;j++)
{
P_out[j]=0.0;
for (i=0;i<num_in;i++)
{
P_out[j]+=p_ji[i][j]*P_in[i]; //
}
if (P_out[j]>=0.000001)
{
for (i=0;i<num_in;i++)
{
p_ij[i][j]=P_in[i]*p_ji[i][j]/P_out[j];
}
}
else
{
for (i=0;i<num_in;i++)
{
p_ij[i][j]=0.0;
}
}
}
//================================================
//求第r+1次循环输入分布p_in
//================================================
p_down=0.0;
for (i=0;i<num_in;i++)
{
p_up[i]=0.0;
for (j=0;j<num_out;j++)
{
if (p_ij[i][j]>=0.000001)
{
p_up[i]+=p_ji[i][j]*log(p_ij[i][j])/log(2.0);
}
}
p_up[i]=pow(2.0,p_up[i]);
p_down+=p_up[i];
}
for (i=0;i<num_in;i++)
{
P_in[i]=p_up[i]/p_down;
}
//================================================
//求C(r+1)
//================================================
C_Pre=C;
C=log(p_down)/log(2.0);
cout<<"第"<<r<<"次的容量为:"<<C<<endl;
}
while (fabs(C-C_Pre)/C>Pe);
cout<<"迭代的次数为:"<<r<<endl;
}
离散信道容量迭代算法相关推荐
- dmc matlab程序,DMC信道容量迭代算法(Matalab实现)
一些公式没法粘贴,以后再补上 一.用了matlab实现DMC容量迭代的算法如下: 设信道输入和输出符号集大小分别为r,s. 1.初始化信源分布:这里选deta=0.000001. 2.. 3. . 4 ...
- [信息论]信道容量迭代算法程序设计(基于C++Matlab实现)
算法分析 迭代法计算信道容量 CCC 的步骤如下: 首先,记 p(yj∣xi)=pijp(y_j|x_i) = p_{ij}p(yj∣xi)=pij , p(xi)=pip(x_i)=p_ip( ...
- 一般信道容量迭代算法c语言,离散信道容量的迭代算法
摘要: Introducing an notion of information-capacity-distance, this paper gives a increment for- mula o ...
- 离散蚁群算法实例(求解旅行商问题)
蚁群算法 蚁群算法原理 万字长文带你了解蚁群算法及求解复杂约束问题[源码实现] 上面这篇博文的蚁群算法是实数编码.今天讲解下离散编码的蚁群算法. 算法原理不再解释,直接上算例. 旅行商问题 ...
- 自动化仓库订单调度的改进型离散帝国主义竞争算法
原文 Improved discrete imperialist competition algorithm for order scheduling of automated warehouses发 ...
- 差分进化算法 (differential evolution,DE)与离散差分进化算法(discrete DE, DDE)
目录 概述 初始化 变异操作 交叉操作 选择操作 参数分析 优点 缺点 离散差分进化算法 概述 差分进化算法是一种用于解决全局优化问题的随机搜索算法.与遗传算法. 粒子群优化算法.蚁群算法.人工蜂群算 ...
- 统计学习方法第二十一章作业:PageRank迭代算法、幂法、代数算法 代码实现
PageRank迭代算法.幂法.代数算法 import numpy as npclass PageRank:def __init__(self,M,D=0.85):self.M = np.array( ...
- 递归算法和迭代算法_Java中没有递归的二进制搜索–迭代算法
递归算法和迭代算法 这周的任务是用Java实现二进制搜索 ,您需要编写迭代和递归二进制搜索算法 . 在计算机科学中,二进制搜索或半间隔搜索是一种分而治之的算法,用于在排序数组中定位项目的位置. 二进制 ...
- BCH码和m序列参数估计(梅西迭代算法求多项式的MATLAB实现)
关注公众号[逆向通信猿]试读更多内容!!! 伯利坎普迭代算法解决了BCH码译码中求错位多项式 σ ( x ) \sigma (x) σ(x)的问题,即用迭代算法求解方程组,极大地加快了译码速度.求最短 ...
最新文章
- Java小程序—录屏小程序(上半场)
- 十月cms_微软十月更新失败使整个PC行业陷入困境
- leetcode404. 左叶子之和
- AtCoder Beginner Contest 176总结
- 探索比特币源码8-哈希2
- (pytorch-深度学习系列)pytorch构造深度学习模型-学习笔记
- nanshan 钥匙在您那儿的
- java 静态方法_自学JAVA每日记录(11)-欢迎指点欢迎共勉
- Codeforces Education Round 11
- 使用A4纸张黑白打印双面打印多少钱一张
- easychm生成帮助文件时出现的目录导航乱码问题
- 68个Python内置函数详解,进阶必备!
- 单片机PWM舵机控制原理
- Android应用 开机自启动
- 配置Jinjia2模板引擎
- 七年级上计算机课教学记录,【备课参考】(川教版)七年级信息技术上册第9课《计算机操作系统》教学设计...
- React Firebase 计账软件 Serverless 项目实战视频教程
- ElementUI表格吸顶(sticky)
- Unity Input 通过蓝牙手柄控制游戏
- window8 添加美式键盘
热门文章
- 美国华盛顿州立大学计算机排名,华盛顿州立大学计算机科学computer science专业排名第251~300名(2020THE泰晤士高等教育世界大学排名)...
- 通过2-3-4树理解红黑树
- cst matlab,CST与Matlab连接设置
- KDD 2022时空数据挖掘领域论文汇总
- RESTFUL概念,什么是RESTFUL
- 【音视频处理】为什么MP3不是无损音乐?音频参数详解,码率、采样率、音频帧、位深度、声道、编码格式的关系
- M-LAG—跨设备链路聚合组
- PathInfo模式的支持
- ElasticSearch实现搜索和关键字高亮显示
- lumaQQ移植到Android之消息篇