准对称DMC信道容量的C++实现,程序说明书.docVIP

准对称DMC信道容量的C++实现,程序说明书.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
准对称DMC信道容量的C++实现 程序说明书 山东**大学 ***科学与技术学院 **工程0704 程序功能概述 本程序使用C++程序语言编写,实现已知准对称DMC信道的转移矩阵求信道容量。 已知: 求: 准对称DMC的信道容量 bit/符号 程序结构概述 本程序共分三部分:主函数、类外函数、类。 各部分功能: 主函数:负责程序的启动,接收用户数据,创建对象,函数调用。 类外函数:负责程序的初始化,接收用户输入的数据。 类:完成数据计算,输出计算结果。 程序功能分析 主函数 创建一个二维数组y[][],用来存放转移矩阵。 采用数组的传址方式调用函数:input(),以实现对数组的初始化。 创建dmc类对象,并以转移矩阵的元素个数和数组地址作为实参。 依次调用dmc类的各成员函数,完成数值计算。均不返回计算结果,由成员函数直接输出到屏幕。 类外函数 用于接收用户输入的input函数:用for循环完成对主函数y[][]数组的赋值,因为采用传址方式,可以直接完成对主函数数组的修改,无须返回值。 用于初始化屏幕的Start函数。 类: dmc类内的成员函数有:构造函数dmc(),析构函数~dmc(),对矩阵进行列排序的函数paixu();条件熵计算函数H();子阵列计算分块、计算函数HDMC()。 dmc():用主函数传递的参数对类的数据成员进行初始化,用数组atob[ ][ ]代表集合P(Y|X)。提取矩阵的第一行用Y[]存放。 for (int r1 = 0; r1 r; r1++) { for (int n1 = 0; n1 n; n1++) atob[r1][n1] = y[r1][n1]; } for (int n11 = 0; n11 n; n11++) { Y[n11] = atob[0][n11]; } paixu():对二维矩阵进行列降序排序。排序后的矩阵存放在新的数组a_b[][]中。 for (int n5 = 0; n5 n; n5++) { for (int r5 = 0; r5 r - 1; r5++) { for (int r6 = r5 + 1; r6 r; r6++) { if (a_b[r6][n5] = a_b[r5][n5]) { xx = a_b[r5][n5]; a_b[r5][n5] = a_b[r6][n5]; a_b[r6][n5] = xx; } } } } H():实现公式的计算。 void dmc::H() { for (int n2 = 0; n2 n; n2++) if(Y[n2]!=0) { h = h + Y[n2] * log(Y[n2]) / log(2); } cout 条件熵 H= -h endl; } HDMC():实现公式的计算。 算法:为二维矩阵每一列设置标号和计数器one[y2] = 0;M[y2] = 0。用某一列元素对比矩阵其他列元素,对比前将这一列标号设为1,计数器设为1,当其他列与该列完全相同时计数器增一,并将相同的该列标号置1。进行下一列元素的对比,对比前先检测该列标号是否为0,若不为0,则认为该列与之前扫描过的列相同,已经计入列计数器,不再进行对比。计数器存放的数值即为公式中的Sk。 for (int y1 = 0; y1 n; y1++) { if (one[y1] == 0) { one[y1] = 1; M[y1] = 1; for (int n3 = y1 + 1; n3 n; n3++) { for (int r3 = 0; r3 r; r3++) { if (a_b[r3][y1] != a_b[r3][n3]) { break; } else if (r3 == r - 1) { one[n3] = 1; M[y1]++; } } } } } 计算Mk: for (int n5 = 0; n5 n; n

文档评论(0)

lyxbb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档