📄 transmitter.cpp
字号:
#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 + -