CDMA编码

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 

using namespace std;
int* change(int n)  //十进制转二进制,用于初始化码片
{
    int *ch=new int[8];
    for(int i=0;i<8;i++)
        ch[i]=0;
    int i=0;
    while(n)
    {
        ch[i]=n%2;
        n/=2;
        i++;
    }
    return ch;
}
bool judge(int *a,int *b) //判断正交,如果各位相乘和为0则返回1
{
    int sum=0;
    for(int i=0;i<8;i++)
        sum+=a[i]*b[i];
    if(sum==0)
        return 1;
    else
        return 0;

}
int main()
{
    int *num[256];
    for(int i=0;i<256;i++)
    {
        num[i]=change(i);  //初始化码片
    }
    for(int i=0;i<256;i++)
    {
        for(int j=0;j<8;j++)
        {
            if(num[i][j]==0)
                num[i][j]=-1;  //将0都转化为-1
        }
    }
    int m[5]; //接受用户随机输入的5个整数
    int *M[5]; //将用户输入的5个整数转化为相应的码片
    int flag;
    do{
        flag=0;
        cout<<"请随机输入5个0到255的整数"<>m[i];
            int temp=m[i];
            M[i]=num[temp];
        }
        for(int i=0;i<5;i++)
        {
            for(int j=i+1;j<5;j++)
            {
                    if(judge(M[i],M[j]))
                    {
                        flag=1;
                        cout<<"输入的"<
Aden :理论上每个码片正交的有70个,所以要输入5个互不正交的组合十分有限,我输入的是 1,2,125,254,255 当然其它组合还是有的例如1 2 3 4 5 。还有一点就是我没有做去重,其实那个也比较简单,把每组放入vector容器,再遍历一下有重复就删除咯...

你可能感兴趣的:(CDMA编码)