博客搬家,博文原址:https://blog.csdn.net/yuse1194/article/details/78340467
版权声明:本文为博主原创文章,未经博主允许不得转载。
1、实验题目:CDMA 编码
2、实验内容:
(1) 随机生成 5 个互不正交的 8 位码片 M1、M2、M3、M4、M5。
(2) 分别求出与 M1、M2、M3、M4、M5所有正交的 8 位码片。
3、实验报告内容:
(1) CDMA 信道复用原理。
(2) 随机生成的的 5 个互不正交的码片 M1、M2、M3、M4、M5。
(3) 获取与某个码片正交的全部码片的算法。
(4) 记录与M1正交的码片数量及10个与M1正交的码片,不足10个的记录全部码片, 互为反码的记为一个。
(5) 记录与M2正交的码片数量及10个与M2正交的码片,不足10个的记录全部码片, 互为反码的记为一个。
(6) 记录与M3正交的码片数量及10个与M3正交的码片,不足10个的记录全部码片, 互为反码的记为一个。
(7) 记录与M4正交的码片数量及10个与M4正交的码片,不足10个的记录全部码片, 互为反码的记为一个。
(8) 记录与M5正交的码片数量及10个与M5正交的码片,不足10个的记录全部码片, 互为反码的记为一个。
比较与 M1、M2、M3、M4、M5正交的码片总数并简单分析原因。
实验代码:
#include <iostream>
using namespace std;
void getchip(int * chip) //取随机8 位码片
{
for (int loop = 0; loop < 8; loop++)
{
if (rand() % 2) chip[loop] = 1;
else chip[loop] = -1;
}
}
int * ten2twe(int N, int * chip) //将10进制转码片
{
int loop = 0;
do {
if (N % 2) chip[7 - loop] = 1;
else chip[7 - loop] = -1;
N = (N - N % 2) / 2;
loop++;
} while (loop < 8);
return chip;
}
bool orthogonal(int * chip1, int * chip2) //是否正交
{
int sum = 0;
for (int i = 0; i < 8; i++)
{
if(chip1[i] == chip2[i]) return false;
}
return true;
}
bool complement(int * chip1, int * chip2) //是否互为反码
{
int sum = 0;
for (int i = 0; i < 8; i++)
{
sum = sum + chip1[i] + chip2[i];
}
return (!sum);
}
bool equal(int * chip1, int * chip2) //是否相等
{
for (int i = 0; i < 8; i++)
{
if (chip1[i] != chip2[i]) {
return false;
}
}
return true;
}
void calculate(int * chip1) //计算所有与之正交的v码片
{
cout << "随机码片:";
for (int i = 0; i < 8; i++)
{
cout << chip1[i];
}
cout << endl;
int * chip2 = new int[8];
int chips[40][8];
for (int i = 0; i < 40; i++)
{
for (int j = 0; j < 8; j++) {
chips[i][j] = 0;
}
}
int count = 0;
for (int loop = 0; loop <= 255; loop++) //0-255
{
chip2 = ten2twe(loop, chip2);
if (orthogonal(chip1, chip2)) //若码片正交
{
bool add = true;
for (int i = 0; chips[i][0] != 0; i++)
{
if (complement(chips[i], chip2)) {
add = false; //互为反码的记为一个 不再添加
break;
}
}
if (add) //码片正交 加入链表
{
for (int i = 0; i < 8; i++)
{
chips[count][i] = chip2[i];
}
count++;
}
}
}
cout << "与其正交的码片有:" << count << "个" << endl;
for (int i = 0; i < count; i++)
{
for (int j = 0; j < 8; j++) {
cout << chips[i][j];
}
cout << endl;
}
cout << endl;
}
void main()
{
int M[5][8]; //随机生成的的 5 个互不正交的码片 M1、M2、M3、M4、M5
int num = -1;
int * chip1;
do {
bool add = true;
int * chip1 = new int[8];
getchip(chip1);
for (int i = 0; i <= num; i++)
{
if (orthogonal(M[num], chip1) && (!equal(M[num], chip1))) { //判断随机产生的码片是否正交或为同一码片
add = false;
break;
}
}
if (add) {
num++;
for (int j = 0; j < 8; j++)
{
M[num][j] = chip1[j];
//cout << M[num][j];
}
//cout << endl;
add = false;
}
} while (num < 4);
for (int loop = 0; loop < 5; loop++)
{
calculate(M[loop]);
}
system("pause");
return;
}
实验结果:
随机码片:11-1-11-1-1-1
与其正交的码片有:35个
-1-1-1-1-1-1-11
-1-1-1-1-1-11-1
-1-1-1-1-11-1-1
-1-1-1-11-111
-1-1-1-111-11
-1-1-1-1111-1
-1-1-11-1-1-1-1
-1-1-111-1-11
-1-1-111-11-1
-1-1-1111-1-1
-1-11-1-1-1-1-1
-1-11-11-1-11
-1-11-11-11-1
-1-11-111-1-1
-1-1111-1-1-1
-11-1-1-1-111
-11-1-1-11-11
-11-1-1-111-1
-11-1-11111
-11-11-1-1-11
-11-11-1-11-1
-11-11-11-1-1
-11-111-111
-11-1111-11
-11-11111-1
-111-1-1-1-11
-111-1-1-11-1
-111-1-11-1-1
-111-11-111
-111-111-11
-111-1111-1
-1111-1-1-1-1
-11111-1-11
-11111-11-1
-111111-1-1
随机码片:-1-1111111
与其正交的码片有:35个
-1-1-1-1-1-111
-1-1-1-1-11-11
-1-1-1-1-111-1
-1-1-1-11-1-11
-1-1-1-11-11-1
-1-1-1-111-1-1
-1-1-11-1-1-11
-1-1-11-1-11-1
-1-1-11-11-1-1
-1-1-111-1-1-1
-1-11-1-1-1-11
-1-11-1-1-11-1
-1-11-1-11-1-1
-1-11-11-1-1-1
-1-111-1-1-1-1
-11-1-1-1111
-11-1-11-111
-11-1-111-11
-11-1-1111-1
-11-11-1-111
-11-11-11-11
-11-11-111-1
-11-111-1-11
-11-111-11-1
-11-1111-1-1
-111-1-1-111
-111-1-11-11
-111-1-111-1
-111-11-1-11
-111-11-11-1
-111-111-1-1
-1111-1-1-11
-1111-1-11-1
-1111-11-1-1
-11111-1-1-1
随机码片:-1-11-1-111-1
与其正交的码片有:35个
-1-1-1-1-1-1-11
-1-1-1-11-1-1-1
-1-1-1-11-111
-1-1-1-111-11
-1-1-11-1-1-1-1
-1-1-11-1-111
-1-1-11-11-11
-1-1-111-11-1
-1-1-1111-1-1
-1-1-111111
-1-11-11-1-11
-1-111-1-1-11
-1-1111-1-1-1
-1-1111-111
-1-11111-11
-11-1-1-1-1-1-1
-11-1-1-1-111
-11-1-1-11-11
-11-1-11-11-1
-11-1-111-1-1
-11-1-11111
-11-11-1-11-1
-11-11-11-1-1
-11-11-1111
-11-11111-1
-111-1-1-1-11
-111-11-1-1-1
-111-11-111
-111-111-11
-1111-1-1-1-1
-1111-1-111
-1111-11-11
-11111-11-1
-111111-1-1
-11111111
随机码片:1-11-1111-1
与其正交的码片有:35个
-1-1-1-1-1-11-1
-1-1-1-1-11-1-1
-1-1-1-1-1111
-1-1-1-11-1-1-1
-1-1-1-11-111
-1-1-1-111-11
-1-1-11-111-1
-1-1-111-11-1
-1-1-1111-1-1
-1-1-111111
-1-11-1-1-1-1-1
-1-11-1-1-111
-1-11-1-11-11
-1-11-11-1-11
-1-111-1-11-1
-1-111-11-1-1
-1-111-1111
-1-1111-1-1-1
-1-1111-111
-1-11111-11
-11-1-1-111-1
-11-1-11-11-1
-11-1-111-1-1
-11-1-11111
-11-11111-1
-111-1-1-11-1
-111-1-11-1-1
-111-1-1111
-111-11-1-1-1
-111-11-111
-111-111-11
-1111-111-1
-11111-11-1
-111111-1-1
-11111111
随机码片:11-111-111
与其正交的码片有:35个
-1-1-1-1-1-111
-1-1-1-11-1-11
-1-1-1-11-11-1
-1-1-1-11111
-1-1-11-1-1-11
-1-1-11-1-11-1
-1-1-11-1111
-1-1-111-1-1-1
-1-1-1111-11
-1-1-11111-1
-1-11-11-111
-1-111-1-111
-1-1111-1-11
-1-1111-11-1
-1-1111111
-11-1-1-1-1-11
-11-1-1-1-11-1
-11-1-1-1111
-11-1-11-1-1-1
-11-1-111-11
-11-1-1111-1
-11-11-1-1-1-1
-11-11-11-11
-11-11-111-1
-11-1111-1-1
-111-1-1-111
-111-11-1-11
-111-11-11-1
-111-11111
-1111-1-1-11
-1111-1-11-1
-1111-1111
-11111-1-1-1
-111111-11
-1111111-1