⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 transmitter.cpp

📁 单用户dscdma的仿真
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include <iostream>
using namespace std;
#include <complex>
#include "transmitter.h"
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include<math.h>
#include<fstream>
#define PI 3.1415926535
#define sqr(x) ((x)*(x))
#define x1 100
#define x2 30000
/////////////////////////////////////////////////////////
//                                                  /////
//                   频域扩频的传送过程            ///////
//////////////////////////////////////////////////////////
void transmitter::StartFdomaintransmit ( )
{
	//int a[1000],b[1000]={0},ab[100][100],c[1000]={0},d[1000]={0},cd[100][100],z[100]={0},i,j,k,N2x;
	//FILE *fp;
	int i,j,k,N=10,n=3,*a;
	
	double n1,snr=2;
    complex<double> *TD=new complex<double>[12800];
    complex<double> *FD=new complex<double>[12800];
//double e[1000],f[10000],g[1000]={0},md[10][1000],de[10][1000],ee[10][100]={0},sp[10][100],I[10][100],Q[10][100],rI[10][1000],rQ[10][1000];
  // double dic[4],min,fI[10][1000],fQ[10][1000],finde[10][1000]={0},n;
 n1=log(Fspreadfactor)/log(2);
Userbit=new int[10000];
a=new int[10000];

//////////这是测试数据/////////////////////
//for(i=0;i<1000;i++)
  //  Userbit[i]=-1;
 random(numberofuserbit);
     cout<<"单双极性变换"<<"\n";
for(i=0; i<numberofuserbit; i++)
    cout<<Userbit[i]<<" ";
   cout<<"\n";
   ///////////////////////////
for(i=0; i<numberofuserbit; i++)
   a[i]=Userbit[i];
   Mseq=new int[10000];
M_seq(n);
cout<<"M序列"<<"\n";
for(i=0; i<100; i++)
    cout<<Mseq[i] <<" ";
   cout<<"\n";
////////////////////////////
   SpreadOut=Allocate2DArray(10,1000);           //动态2维数组分配内存
F_domainSpread(Fspreadfactor,a);
delete Mseq;
delete a;
  cout<<"扩频"<<"\n";
for(i=0;i<Fspreadfactor;i++)
{ for(j=0;j<numberofuserbit;j++) 
    cout<<SpreadOut[i][j]<<" ";
 cout<<"\n";
}

//////////////////////////////
Ireal=Allocate2DArray(10,1000);                       //动态2维数组分配内存
Qimag=Allocate2DArray(10,1000);                      //动态2维数组分配内存
QPSK(Fspreadfactor);
DeAllocate2DArray(SpreadOut,10);                //删除内存
 /*cout<<"I支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)
  
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Ireal[i][j]<<" ";
    cout<<"\n";
}   
 cout<<"Q支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Qimag[i][j]<<" ";
    cout<<"\n";
}   
  */

IFFTrealout=Allocate2DArray(10,1000);                       //动态2维数组分配内存
IFFTimagout=Allocate2DArray(10,1000);                      //动态2维数组分配内存
 cout<<"--------------IFFT变换-------------------";
 cout<<"\n";
for(i=0;i<numberofuserbit/2+numberofuserbit%2;i++)
{for( k=0;k<Fspreadfactor;k++)
 FD[k]=complex<double>(Ireal[k][i], Qimag[k][i]); 
//  for( k=0;k<Fspreadfactor;k++)
// cout<<FD[k].real()<<"+J"<<FD[k].imag()<<"   ";
 // cout<<"\n------------------\n";
FFT(TD,FD,int(n1+0.5),-1);

  for( k=0;k<Fspreadfactor;k++)
  {IFFTrealout[k][i]=TD[k].real();
   IFFTimagout[k][i]=TD[k].imag();
  }

}
DeAllocate2DArray(Ireal,10);                                   //删除内存
DeAllocate2DArray(Qimag,10);                                   //删除内存
/*cout<<"I支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)                                  
  
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<IFFTrealout[i][j]<<" ";
    cout<<"\n";
}   
 cout<<"Q支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<IFFTimagout[i][j]<<" ";
    cout<<"\n";
} */


}
/////////////////////////////////////////////////////////
//                                                  /////
//                   时域扩频的传送过程ds-cdma     ///////
//////////////////////////////////////////////////////////
void transmitter::StartTdomaintransmit ( )
{
	int i,j,k,N=10,n=3;
	double n1=0,snr=2,*b;
    complex<double> *TD=new complex<double>[x2];
    complex<double> *FD=new complex<double>[x2];
//double e[1000],f[10000],g[1000]={0},md[10][1000],de[10][1000],ee[10][100]={0},sp[10][100],I[10][100],Q[10][100],rI[10][1000],rQ[10][1000];
  // double dic[4],min,fI[10][1000],fQ[10][1000],finde[10][1000]={0},n;
// n1=log(Fspreadfactor)/log(2);
	Fspreadfactor=1;
Userbit=new int[x2];
b=new double[x2];
//////////这是测试数据/////////////////////
//for(i=0;i<1000;i++)
  //  Userbit[i]=-1;
 random(numberofuserbit);
    /*cout<<"单双极性变换"<<"\n";
for(i=0; i<numberofuserbit; i++)
    cout<<Userbit[i]<<" ";
   cout<<"\n";*/
   ///////////////////////////
Ireal=Allocate2DArray(1,x2);                       //动态2维数组分配内存
Qimag=Allocate2DArray(1,x2);                      //动态2维数组分配内存
QPSK(1);

//intDeAllocate2DArray(SpreadOut,1);                //删除内存
/*cout<<"I支路"<<"\n";
for(i=0;i<1;i++)
  
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Ireal[i][j]<<" ";
    cout<<"\n";
}   
 cout<<"Q支路"<<"\n";
for(i=0;i<1;i++)
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Qimag[i][j]<<" ";
    cout<<"\n";
}   */
 SpreadOutReal=new double[x2];
SpreadOutImag=new double[x2];
for(i=0; i<numberofuserbit/2+numberofuserbit%2; i++)
{b[i]=Ireal[0][i];
 //cout<<b[i]<<" ";
}
  Mseq=new int[x2];
M_seq(n);
/*cout<<"M序列"<<"\n";
for(i=0; i<2000; i++)
    cout<<Mseq[i] <<" ";
   cout<<"\n";*/
////////////////////////////
 SpreadOut=Allocate2DArray(1,x2);           //动态2维数组分配内存
T_domainSpread(Tspreadfactor,b);
for(i=0; i<(numberofuserbit/2+numberofuserbit%2)*Tspreadfactor; i++)
  SpreadOutReal[i]=SpreadOut[0][i];


//cout<<"\n";
for(i=0; i<numberofuserbit/2+numberofuserbit%2; i++)
{b[i]=Qimag[0][i];
}
T_domainSpread(Tspreadfactor,b);
for(i=0; i<(numberofuserbit/2+numberofuserbit%2)*Tspreadfactor; i++)
  SpreadOutImag[i]=SpreadOut[0][i];
//cout<<"Mseq[256*8]="<<Mseq[256*8];
delete Mseq;
delete b;
numberofuserbit=numberofuserbit*(Tspreadfactor);
/*cout<<"扩频I"<<"\n";

{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<< SpreadOutReal[j]<<" ";
 cout<<"\n";
}
cout<<"扩频Q"<<"\n";

{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<< SpreadOutImag[j]<<" ";
 cout<<"\n";
}
  */
//cout<<"SpreadOut[0][256*8]="<<SpreadOut[0][256*8-1];
/*
//////////////////////////////
Ireal=Allocate2DArray(1,15000);                       //动态2维数组分配内存
Qimag=Allocate2DArray(1,15000);                      //动态2维数组分配内存
QPSK(1);

DeAllocate2DArray(SpreadOut,1);                //删除内存
cout<<"I支路"<<"\n";
for(i=0;i<1;i++)
  
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Ireal[i][j]<<" ";
    cout<<"\n";
}   
 cout<<"Q支路"<<"\n";
for(i=0;i<1;i++)
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<Qimag[i][j]<<" ";
    cout<<"\n";
}   
  
*/
IFFTrealout=Allocate2DArray(1,x2);                       //动态2维数组分配内存
IFFTimagout=Allocate2DArray(1,x2);                      //动态2维数组分配内存
 //cout<<"--------------IFFT变换-------------------";
 //cout<<"\n";
for(i=0;i<numberofuserbit/2+numberofuserbit%2;i++)
{for( k=0;k<1;k++)
 FD[k]=complex<double>(SpreadOutReal[i], SpreadOutImag[i]); 
//  for( k=0;k<Fspreadfactor;k++)
// cout<<FD[k].real()<<"+J"<<FD[k].imag()<<"   ";
 // cout<<"\n------------------\n";
FFT(TD,FD,int(0),-1);

  for( k=0;k<1;k++)
  {IFFTrealout[k][i]=TD[k].real();
   IFFTimagout[k][i]=TD[k].imag();
  }

}
DeAllocate2DArray(Ireal,1);                                   //删除内存
DeAllocate2DArray(Qimag,1);                                   //删除内存
/*cout<<"I支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)                                  
  
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<IFFTrealout[i][j]<<" ";
    cout<<"\n";
}   
 cout<<"Q支路"<<"\n";
for(i=0;i<Fspreadfactor;i++)
{ for(j=0;j<numberofuserbit/2+numberofuserbit%2;j++) 
    cout<<IFFTimagout[i][j]<<" ";
    cout<<"\n";
} */
delete TD;
delete    FD;

}



/////////////////////////////////////////////////////////
//                                                  /////
//                    产生随机数                   ///////
//////////////////////////////////////////////////////////
void transmitter::random(int bitnumber)
{  int i;
   time_t t;
   srand((unsigned) time(&t));
   
   for(i=0; i<bitnumber; i++)
   {  Userbit[i]=rand() % (2);
  
   }
    /*cout<<"原始数据"<<"\n";
for(i=0; i<numberofuserbit; i++)
    cout<<Userbit[i]<<" ";
   cout<<"\n";*/
  Userbit[i]=0;//最末位为0
   /////////////////单双极性变换/////////////////
   for(i=0;i<bitnumber;i++)
	   Userbit[i]=Userbit[i]*2-1;

}
/////////////////////////////////////////////////////////
//                                                  /////
//                    产生m序列扩频码             ///////
//////////////////////////////////////////////////////////
	void transmitter::M_seq(int n)
    {
		int *zita,i,k,N;
		zita=new int[30000];
		N=int(pow(2,n)-1);
	for(i=0;i<n;i++)                    //对zita[k]赋初值
	{
      zita[i]=1;
	   Mseq[i]=1;
    }
	
	switch(n)
	{
	case 2: 
		    for(k=n+1;k<=10000;k++)
			{
               zita[k]=zita[k-n]^zita[k-1];	
               Mseq[k]=(2*zita[k]-1);
			 // cout<<Mseq[k]<<"  ";
			 
            }
		    break;
case 3: 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -