Può essere utile avere a disposizione una funzione che restituisce delle distribuzioni probabilistiche.
La più semplice è la distribuzione uniforme che tutti i linguaggi di programmazione rendono disponibile, la celeberrima funzione “random”.
Ricavare la distribuzione uniforme desiderata da questa funzione è decisamente semplice (esempio di codice in C++) .
//**********************************************************************************/
//Generatore pseudo-casuale di numeri a virgola mobile singola precisione
//con distribuzione UNIFORME fra 0 e 1
//**********************************************************************************/
float DistrUnif(void)
{
//La costante RAND_MAX è una costante di sistema!!!!!
return (float)((double)rand()/(double)RAND_MAX);
}
//**********************************************************************************/
//Generatore pseudo-casuale di numeri a virgola mobile singola precisione
//con distribuzione ESPONENZIALE NEGATIVA fra 0 e infinito
//**********************************************************************************/
float DistrEsponenzNeg(void)
{
//Procedura basata sul metodo di inversione
return (-logf(1.0f-DistrUnif()));
}
//**********************************************************************************/
//Generatore pseudo-casuale di numeri a virgola mobile singola precisione
//con distribuzione GAUSSIANA a MEDIA NULLA e VARIANZA UNITARIA
//**********************************************************************************/
float DistrGaussStd (void)
{
//Procedura basata sul calcolo della Gaussiana bi-dimensionale
double r = sqrt(2.0*DistrEsponenzNeg());
double t = 2*CV_PI*DistrUnif();
return (float)(r*cos(t));
}
//**********************************************************************************/
//Generatore di rumore gaussiano bianco (media nulla)
// IN:
// sigma : la varianza del rumore da generare
//**********************************************************************************/
float GaussWhiteNoise (float sigma=1)
{
return (sigma*DistrGaussStd());
}