📄 wuzhanji_random.h
字号:
/*****************************************************/
/* random number functions
/*
/*
/*******************************************************/
/* uniform random number generator
generate a random number between 0 and 1
*/
double random()
{
long z,k;
static long s1=12345L;
static long s2=12345473464L;
k= s1 / 53668L;
s1 = 40014L * (s1 - k*53668L) - k*12211L;
if (s1<0)
s1 = s1 + 2147483563L;
k = s2 / 52774;
s2 = 40692L * (s2 - k*52774L) - k*3791L;
if (s2<0)
s2 = s2 + 2147483399L;
z=s1 - s2;
if (z<1)
z = z + 2147483562L;
return (double) z / (double) 2147483563.0;
}
/* generate a number between -1 and 1 */
double generate_random_source()
{
/* sign of the number */
double sign;
if(random()>=0.5)
sign=-1.0;
else
sign=1.0;
return sign*random();
}
/* binary source generator
generate a sequence of uniformely distributed bits
*/
short generate_binary_source()
{
if(random()<.5) return 0;
else return 1;
}
/* Noise generator
parameters : sigma2 = variance (global variable)
generate a gaussian distributed sequence with zero mean
*/
double AWGN(double sigma2)
{
static int iset=0;
static double gset;
double fac,r,v1,v2;
/* perform Box Muller transformation */
// if (iset==0)
{
do
{
v1=2.0*random()-1.0;
v2=2.0*random()-1.0;
r=v1*v1+v2*v2;
}
while (r>=1.0 || r == 0.0);
fac=sqrt(-2.0*sigma2*log(r)/r);
gset = v1 * fac;
iset = 1;
return (double)( v2*fac);
}
/*
else
{
iset = 0;
return (float)(gset);
}
*/
}
/*******************************
/* Rayleigh noise
/* double RAYL(void)
/* WU ZHANJI progrmmed on JAN 20,2002
/* function: produce rayleigh noise
/* input parameter:delt_2 is the variance of AWGN noise
/* output parameter:RAYL noise
/*******************************/
double RAYL(void)
{
double temp1,temp2,u;
temp1=AWGN(1.0/2.0);
temp2=AWGN(1.0/2.0);
u=sqrt(temp1*temp1+temp2*temp2);
return(u);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -