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

📄 cchannelmodel.cpp

📁 这是cdma2000的一个分组调度算法实例
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			  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 + -