准对称DMC信道容量的C 实现,程序说明书重点

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)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];
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;
}
(4)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]) {
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;
}
}
}
}
(3)H():实现公式 的计算。
类外函数:负责程序的初始化,接收用户输入的数据。
类:完成数据计算,输出计算结果。
三、程序功能分析
1.主函数
创建一个二维数组y[][],用来存放转移矩阵。
采用数组的传址方式调用函数:input(),以实现对数组的初始化。
创建dmc类对象,并以转移矩阵的元素个数和数组地址作为实参。
依次调用dmc类的各成员函数,完成数值计算。均不返回计算结果,由成员函数直接输出到屏幕。
**于2010年5月1日起草
break;
} else if (r3 == r - 1) {
one[n3] = 1;
M[y1]++;
}
}
}
}
}
计算Mk:
for (int n5 = 0; n5 < n; n5++) {
sum[n5] = 0;
for (int r5 = 0; r5 < r; r5++) {
sum[n5] = atob[r5][n5] + sum[n5];
2.类外函数
用于接收用户输入的input函数:用for循环完成对主函数y[][]数组的赋值,因为采用传址方式,可以直接完成对主函数数组的修改,无须返回值。
用于初始化屏幕的Start函数。
3.类:
dmc类内的成员函数有:构造函数dmc(),析构函数~dmc(),对矩阵进行列排序的函数paixu();条件熵计算函数H();子阵列计算分块、计算函数HDMC()。
}
for (int n11 = 0; n11 < n; n11++) {
Y[n11] = atob[0][n11];
}
(2)paixu():对二维矩阵进行列降序排序。排序后的矩阵存放在新的数组a_b[][]中。
for (int n5 = 0; n5 < n; n5++) {
for (int r5 = 0; r5 < r - 1; r5++) {
准对称DMC信道容量的C++实现
程序说明书
山东**大学***科学与技术学院
**工程0704
一、Biblioteka Baidu序功能概述
本程序使用C++程序语言编写,实现已知准对称DMC信道的转移矩阵求信道容量。
已知:
求:
准对称DMC的信道容量
bit/符号
二、程序结构概述
本程序共分三部分:主函数、类外函数、类。
各部分功能:
主函数:负责程序的启动,接收用户数据,创建对象,函数调用。
}
}
计算:
for (int n4 = 0; n4 < n; n4++) {
if (M[n4] != 0) {
yy[n4] = M[n4] * sum[n4] / r * (log(sum[n4] / r) / log(2));
logs = logs + yy[n4];
}
}
四、结语
本程序用C++程序语言实现了准对称DMC的信道容量的计算。可以满足替代人工计算的要求,提高了工作效率和计算精度。采用类封装和模块化设计可以实现程序功能的扩展和代码的重用。
相关文档
最新文档