我是靠谱客的博主 笨笨身影,最近开发中收集的这篇文章主要介绍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 <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容器,再遍历一下有重复就删除咯...

最后

以上就是笨笨身影为你收集整理的CDMA编码的全部内容,希望文章能够帮你解决CDMA编码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部