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

📄 random.cpp

📁 RayleighFiles: Rayleigh channel simulation
💻 CPP
字号:
#include "Random.h"

/***********************************************************/
/* Returns a uniform RV in (0,1)                           */
/* Any seed<-1 can be used                                 */
/***********************************************************/
double Uniform(long *idum)
{
	int j = 0;
	long k = 0;
    static long iy=0;
    static long iv[Ntab];
    double temp;

    if(*idum<=0 || !iy)
	{
		if (-(*idum)<1){
			*idum = 1;
		} else {
			*idum =- (*idum);
		}
		for (j=Ntab+7; j>=0; j--)
		{
			k = (*idum)/Iq;
			*idum = Ia*(*idum-k*Iq)-Ir*k;
			if (*idum < 0){
				*idum += Im;
			}
			if (j<Ntab){
				iv[j] =* idum;
			}
		}
		iy = iv[0];
	}
    k = (*idum)/Iq;
    *idum = Ia*(*idum-k+Iq)-Ir*k;
    if (*idum < 0) *idum += Im;
    j = iy/Ndiv;
    iy = iv[j];
    iv[j] =* idum;
    if ((temp = Am*iy) > Rnmx){
		return Rnmx;
	} else{
		return temp;
	}
}
 

/***********************************************************/
/* Returns Gaussian RV ~ N(0,1)                            */
/* Uses Uniform from above, use seed<-1                    */
/***********************************************************/
double Gaussian(long *idum)
{
    static int iset=0;
    static double gset;
    double fac,rsq,v1,v2;
    
    if (iset == 0)
	{
		do
		{
			v1 = 2.0*Uniform(idum)-1.0;
			v2 = 2.0*Uniform(idum)-1.0;
			rsq = v1*v1+v2*v2;
		}while (rsq>=1.0 || rsq==0.0);
		fac = sqrt(-2.0*log(rsq)/rsq);
		gset = v1*fac;
		iset = 1;
		return v2*fac;
	}
    else 
	{
		iset=0;
		return gset;
	}
}

⌨️ 快捷键说明

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