CDMA编码

来源:互联网 发布:长江期货软件下载 编辑:程序博客网 时间:2024/05/19 13:06
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;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的整数"<<endl;        for(int i=0;i<5;i++)        {            cin>>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<<"输入的"<<i<<"和"<<j<<"随机码片有正交的,请重新输入"<<endl;                        break;                    }            }            if(flag==1)            {                cout<<"flag"<<endl;                break;            }        }    }while(flag);//    for(int i=0;i<5;i++)//    {//        for(int j=0;j<8;j++)//            cout<<M[i][j]<<" ";//        cout<<endl;//    }    int c[5]={0};    cout<<"实验结果如下:"<<endl;    for(int i=0;i<5;i++)    {        cout<<"第"<<i+1<<"个码片序列如下"<<endl;        for(int p=0;p<8;p++)            cout<<M[i][p]<<" "<<endl;        cout<<endl;        cout<<"与第"<<i+1<<"个码片正交码片如下 :"<<endl;        for(int j=0;j<256;j++)        {            if(judge(num[j],M[i]))            {                c[i]++;                if(c[i]<=10)                    {                        for(int k=0;k<8;k++)                            cout<<num[j][k]<<" ";                        cout<<endl;                    }            }        }        cout<<"与第"<<i+1<<"个码片正交的有 "<<c[i]<<" 个"<<endl;    }//   for(int i=0;i<256;i++){//        for(int j=0;j<8;j++)//            cout<<num[i][j]<<" ";//        cout<<endl;//   }    return 0;}
Aden :理论上每个码片正交的有70个,所以要输入5个互不正交的组合十分有限,我输入的是 1,2,125,254,255 当然其它组合还是有的例如1 2 3 4 5 。还有一点就是我没有做去重,其实那个也比较简单,把每组放入vector容器,再遍历一下有重复就删除咯...

0 0
原创粉丝点击