📄 cchannelmodel.cpp
字号:
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa2);
Qs2=Qs2+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1+arfa2)/(float)sqrt((double)N2-1/2);
Qc2=Qc2+q;
Sc12=A1[z]*(float)pow(10.0,(-0.9/20.0))*Qc2;
Qc2=0;
Qs2=Qs2+q;
Ss12=A1[z]*(float)pow(10.0,(-0.9/20.0))*Qs2;
Qs2=0;
}//第2径
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos((double)n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa3);
Qc3=Qc3+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa3);
Qs3=Qs3+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1+arfa3)/(float)sqrt((double)N2-1/2);
Qc3=Qc3+q;
Sc13=A4[z]*(float)pow(10.0,(-4.9/20.0))*Qc3;
Qc3=0;
Qs3=Qs3+q;
Ss13=A4[z]*(float)pow(10.0,(-4.9/20.0))*Qs3;
Qs3=0;
} //第3径
Sc1=Sc11+Sc12+Sc13;
Sc=Sc1*Sc1;
Ss1=Ss11+Ss12+Ss13;
Ss=Ss1*Ss1;
S1=S1+Sc+Ss;
}
S=S1/1536;
S0=1+(float)pow(10.0,(-0.9/10.0))+(float)pow(10.0,(-4.9/10.0));
y=S/S0;//归一化
S1=0;
}
//////////////////////////////信道三///////////////////////////////////////////////
else if(m_iChannelType==3)//Vehicular A(jakes,两径)
{
V=30;//km/h
m_dW=2.0*PI*V*Frequency/LightSpeed;
for(z=0;z<1536;z++)
{
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos(n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qc1=Qc1+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qs1=Qs1+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1)/(float)sqrt((double)N2-1/2);
Qc1=Qc1+q;
Sc11=A0[z]*Qc1;
Qc1=0;
Qs1=Qs1+q;
Ss11=A0[z]*Qs1;
Qs1=0;
}//第1径
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos((double)n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa2);
Qc2=Qc2+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa2);
Qs2=Qs2+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1+arfa2)/(float)sqrt((double)N2-1/2);
Qc2=Qc2+q;
Sc12=A2[z]*(float)pow(10.0,(-1.0/20.0))*Qc2;
Qc2=0;
Qs2=Qs2+q;
Ss12=A2[z]*(float)pow(10.0,(-1.0/20.0))*Qs2;
Qs2=0;
}//第2径
Sc1=Sc11+Sc12;
Sc=Sc1*Sc1;
Ss1=Ss11+Ss12;
Ss=Ss1*Ss1;
S1=S1+Sc+Ss;
}
S=S1/1536;
S0=1+(float)pow(10.0,(-1.0/10.0));
y=S/S0;//归一化
S1=0;
}
///////////////////////////////////////信道四///////////////////////////////////////
else if(m_iChannelType==4)//Pedestrian A(jakes,两径)
{
V=120;//km/h
m_dW=2.0*PI*V*Frequency/LightSpeed;
for(z=0;z<1536;z++)
{
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos((double)n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qc1=Qc1+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qs1=Qs1+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1)/(float)sqrt((double)N2-1/2);
Qc1=Qc1+q;
Sc11=A0[z]*Qc1;
Qc1=0;
Qs1=Qs1+q;
Ss11=A0[z]*Qs1;
Qs1=0;
}//第1径
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos((double)n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa2);
Qc2=Qc2+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1+arfa2);
Qs2=Qs2+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1+arfa2)/(float)sqrt((double)N2-1/2);
Qc2=Qc2+q;
Sc12=A1[z]*(float)pow(10.0,(-9.7/20.0))*Qc2;
Qc2=0;
Qs2=Qs2+q;
Ss12=A1[z]*(float)pow(10.0,(-9.7/20.0))*Qs2;
Qs2=0;
}//第2径
Sc1=Sc11+Sc12;
Sc=Sc1*Sc1;
Ss1=Ss11+Ss12;
Ss=Ss1*Ss1;
S1=S1+Sc+Ss;
}
S=S1/1536;
S0=1+(float)pow(10.0,(-9.7/10.0));
y=S/S0;//归一化
S1=0;
}
///////////////////////////////信道五////////////////////////////////////////////////////
else //Rician single path
{
m_dW=2.0*PI*1.5;
for(z=0;z<1536;z++)
{
for(n=1;n<N2;n++)
{
arfa1=PI*n/(N2+1);
Wn=m_dW*cos((double)n*PI/(2*N2-1));
C1n=2*delta*(float)sin((double)n*PI/((double)N2-1))/(float)sqrt((double)N2-1/2);
qn=C1n*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qc1=Qc1+qn;
qn=0;
C1m=2*delta*(float)cos((double)n*PI/(N2-1))/(float)sqrt((double)N2-1/2);
qm=C1m*(float)cos(Wn*(dt0+z/(1.2288e6))+arfa1);
Qs1=Qs1+qm;
qm=0;
}
if(n==N2)
{
arfa1=PI*n/(N2+1);
q=delta*(float)cos(m_dW*(dt0+z/(1.2288e6))+arfa1)/(float)sqrt((double)N2-1/2);
Qc1=Qc1+q;
Sc11=A0[z]*Qc1;
Qc1=0;
Qs1=Qs1+q;
Ss11=A0[z]*Qs1;
Qs1=0;
}//第1径
Sc1=Sc11;
Ss1=Ss11;
Ss=Ss1*Ss1;
S1=(float)sqrt((double)10/11)+Sc1*(float)sqrt((double)1/11);
S0=S1*S1;//Factor K=10dB
S=S+S0+Ss/11;//归一化
}
y=S/1536;
S=0;
}
return(y);
}
float CChannelModel::jakec1(double dt)
{ //t 为每1/4slot开始时间
double T=0.3125e-3;
double arfa1n;
double arfa1m;
int n=1;
int m=1;
float jc1=0;//返回值
float q=0;
double Wn=0; //同相分量频率
double Wm=0; //正交分量频率
float C1n=0; //同相分量权值
float C1m=0; //正交分量权值
for(n=1;n<N1;n++)
{ arfa1n=PI*n/N1;
Wn=m_dW*cos((double)n*PI/(2*N1-1));
C1n=2*delta*(float)sin((double)n*PI/(N1-1))/(float)sqrt((double)N1-1/2);
for(m=1;m<N1;m++)
{
arfa1m=PI*m/N1;
Wm=m_dW*cos((double)m*PI/(2*N1-1));
C1m=2*delta*(float)sin((double)m*PI/(N1-1))/(float)sqrt((double)N1-1/2);
if(n==m)
{
q=C1n*C1m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)
-(float)sin((Wm+Wn)*dt+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C1n*C1m/2;
}
else
{
q=C1n*C1m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)
-(float)sin((Wm+Wn)*dt+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))
+C1n*C1m*(float)(((float)sin((Wn-Wm)*(dt+T)+arfa1n-arfa1m)
-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
}
jc1=jc1+q;
q=0;
}
if (m==N1)
{
arfa1m=PI*m/N1;
Wm=m_dW;
C1m=delta/(float)sqrt((double)N1-1/2);
q=C1n*C1m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)
-(float)sin((Wm+Wn)*dt+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))
+C1n*C1m*(float)(((float)sin((Wn-Wm)*(dt+T)+arfa1n-arfa1m)
-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
jc1=jc1+q;
q=0;
}
}
if (n==N1)
{
arfa1n=PI*n/N1;
Wn=m_dW;
C1n=delta/(float)sqrt((double)N1-1/2);
for(m=1;m<N1;m++)
{
arfa1m=PI*m/N1;
Wm=m_dW*cos((double)m*PI/(2*N1-1));
C1m=2*delta*(float)sin((double)m*PI/(N1-1))/(float)sqrt((double)N1-1/2);
q=C1n*C1m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)
-(float)sin((Wm+Wn)*dt+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))
+C1n*C1m*(float)(((float)sin((Wn-Wm)*(dt+T)+arfa1n-arfa1m)
-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
jc1=jc1+q;
q=0;
}
if (m==N1)
{
arfa1m=PI*m/N1;
Wm=m_dW;
C1m=delta/(float)sqrt((float)N1-1/2);
q=C1n*C1m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)
-(float)sin((Wn+Wm)*dt+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C1n*C1m/2;
jc1=jc1+q;
q=0;
}
}
return (jc1);
}
float CChannelModel::jakes1(double dt)
{ //t 为每1/4slot开始时间
double T=0.3125e-3;
double arfa1n;
double arfa1m;
int m=1;
int n=1;
float q=0;
float js1=0;//返回值
double Wn=0; //同相分量频率
double Wm=0; //正交分量频率
float C2n=0; //同相分量权值
float C2m=0; //正交分量权值
for(n=1;n<N1;n++)
{
arfa1n=PI*n/N1;
Wn=m_dW*cos((double)n*PI/(2*N1-1));
C2n=2*delta*(float)cos((double)n*PI/(N1-1))/(float)sqrt((double)N1-1/2);
for(m=1;m<N1;m++)
{
arfa1m=PI*m/N1;
Wm=m_dW*cos((double)m*PI/(2*N1-1));
C2m=2*delta*(float)cos((double)m*PI/(N1-1))/(float)sqrt((double)N1-1/2);
if(n==m)
{
q=C2n*C2m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)-(float)sin((Wm+Wn)*dt
+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C2n*C2m/2;
}
else
{
q=C2n*C2m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)-(float)sin((Wm+Wn)*dt
+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C2n*C2m*(float)(((float)sin((Wn-Wm)*(dt+T)
+arfa1n-arfa1m)-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
}
js1=js1+q;
q=0;
}
if (m==N1)
{
arfa1m=PI*m/N1;
Wm=m_dW;
C2m=delta/(float)sqrt((double)N1-1/2);
q=C2n*C2m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)-(float)sin((Wm+Wn)*dt
+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C2n*C2m*(float)(((float)sin((Wn-Wm)*(dt+T)
+arfa1n-arfa1m)-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
js1=js1+q;
q=0;
}
}
if (n==N1)
{ arfa1n=PI*n/N1;
Wn=m_dW;
C2n=delta/(float)sqrt((double)N1-1/2);
for(m=1;m<N1;m++)
{
arfa1m=PI*m/N1;
Wm=m_dW*cos((double)m*PI/(2*N1-1));
C2m=2*delta*(float)cos((double)m*PI/(N1-1))/(float)sqrt((double)N1-1/2);
q=C2n*C2m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)-(float)sin((Wm+Wn)*dt
+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C2n*C2m*(float)(((float)sin((Wn-Wm)*(dt+T)
+arfa1n-arfa1m)-(float)sin((Wn-Wm)*dt+arfa1n-arfa1m))/(2*T*(float)(Wn-Wm)));
js1=js1+q;
q=0;
}
if (m==N1)
{
arfa1m=PI*m/N1;
Wm=m_dW;
C2m=delta/(float)sqrt((double)N1-1/2);
q=C2n*C2m*(float)(((float)sin((Wn+Wm)*(dt+T)+arfa1n+arfa1m)-(float)sin((Wm+Wn)*dt
+arfa1n+arfa1m))/(2*T*(float)(Wn+Wm)))+C2n*C2m/2;
js1=js1+q;
q=0;
}
}
return (js1);
}
///////////////////////////////产生(+/-)1随机数//////////////////////////
float CChannelModel::rand1()
{
float x;
int h;
h=rand();
if(h%2==0) x=-1;
else x=1;
return (x);
}
/////////for test only//
// float d=c/1000;
// printf("平均值=%f\n",d);
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -