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

📄 random.c

📁 Hard Viterbi QPSK in AWGN, Rayleight soft Viterbi QAM in AWGN, Rayleight viterbi QAM in AWGN, Rayl
💻 C
字号:
/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*       抄荐 积己GENERAL DESCRIPTION    抄荐 积己INITIALIZATION AND SEQUENCING REQUIREMENTS  Copyright (c) 2007 by ARTLAB, ICU. All Rights Reserved.*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*//*===========================================================================                        EDIT HISTORY FOR MODULEwhen      who         what, where, why--------  ---         ----------------------------------------------------------07/01/03  khpark      created=========================================================================== */#include <math.h>#include <stdlib.h>#include <time.h>#include "random.h"#define FALSE 0#define TRUE 1unsigned char is_initialized = FALSE;/*=======================================================================FUNCTION generate_randomDESCRIPTIONDEPENDENCIESRETURN VALUESIDE EFFECTS========================================================================== */void generate_random(int *buffer, int size){	int i = 0;	/* Seed the random-number generator with current time so that	* the numbers will be different every time we run.	*/	if( is_initialized == FALSE )	{		srand( (unsigned)time( NULL ) );		is_initialized = TRUE;	}	for( i = 0; i < size; i++ )	{		*buffer++ = UniformRand() > 0.5? 1 : 0 ;	}}/*=======================================================================FUNCTION UniformRandDESCRIPTION	Generate Uniform random number [0, 1]DEPENDENCIESRETURN VALUESIDE EFFECTS========================================================================== */double UniformRand(void){	double rv;	/* Seed the random-number generator with current time so that	* the numbers will be different every time we run.	*/	if( is_initialized == FALSE )	{		srand( (unsigned)time( NULL ) );		is_initialized = TRUE;	}	rv = (double)rand()/(double)RAND_MAX;	return (rv);}/*=======================================================================FUNCTION GenerateOneRealWithUniformOverDESCRIPTION	Generate one real number using a uniform dist. over [Min - Max]DEPENDENCIESRETURN VALUESIDE EFFECTS========================================================================== */double GenerateOneRealWithUniformOver(double min, double max){	double RV;	RV = (max-min)*UniformRand() + min;	return RV;}/*=======================================================================FUNCTION GaussRandwithMeanVarDESCRIPTION	Gaussian Random Number Generator with any mean and any varianceDEPENDENCIESRETURN VALUESIDE EFFECTS========================================================================== */double GaussRandwithMeanVar(double Mean, double Var){	static double t=0.;	double x, v1, v2, r;		/* Seed the random-number generator with current time so that	* the numbers will be different every time we run.	*/	if( is_initialized == FALSE )	{		srand( (unsigned)time( NULL ) );		is_initialized = TRUE;	}	if (t==0) 	{		do		{			v1 = 2.*UniformRand() - 1.;			v2 = 2.*UniformRand() - 1.;			r = v1*v1 + v2*v2;		}while ( r>=1.);		r=sqrt(-2.*log(r)/r);		t = v2*r;		return (Mean+sqrt(Var)*v1*r);	}	else	{		x=t;		t=0.;		return (Mean+sqrt(Var)*x);	}}/*=======================================================================FUNCTION GaussRandDESCRIPTION	Gaussian Random Number Generator with mean 0 and variance 1DEPENDENCIESRETURN VALUESIDE EFFECTS========================================================================== */double GaussRand(void) {/*	static int sw=0;	static double r1, r2, s;	if (sw==0) {		sw=1;		do {			r1 =2*rnd()-1;			r2 =2*rnd()-1;			s=r1*r1 + r2*r2;		}while ( s>1 || s==0);		s=sqrt(-2*log(s)/s);		return r1*s;	}else{		sw=0;		return r2*s;	}*/	static double t=0.;	double x, v1, v2, r;	/* Seed the random-number generator with current time so that	* the numbers will be different every time we run.	*/	if( is_initialized == FALSE )	{		srand( (unsigned)time( NULL ) );		is_initialized = TRUE;	}	if (t==0) 	{		do		{			v1 = 2.*UniformRand() - 1.;			v2 = 2.*UniformRand() - 1.;			r = v1*v1 + v2*v2;		}while ( r>=1.);		r=sqrt(-2.*log(r)/r);		t = v2*r;		return v1*r;	}	else	{		x=t;		t=0.;		return x;	}}

⌨️ 快捷键说明

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