Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Generare un numero random

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Generare un numero random

Messaggioda Foto UtenteDirtyDeeds » 2 feb 2012, 9:21

Giusto per far vedere che il rumore elettronico può non essere così casuale come si pensa, la figura sotto mostra il rumore della tensione di offset di un certo amplificatore in una misura a lungo termine. Le misure sono prese ogni 10 s con un tempo di integrazione di 2 s. La durata complessiva della misurazione è di circa 12 ore.

Il rumore non è chiaramente bianco con correlazioni ben visibili.

offset_1.png
offset_1.png (18.35 KiB) Osservato 470 volte
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[12] Re: Generare un numero random

Messaggioda Foto UtenteGuidoB » 2 feb 2012, 11:56

Mi è venuto in mente che se un microcontrollore ha una EEPROM a bordo, ci si potrebbe memorizzare il seme del generatore per il prossimo riavvio, in modo che non dipenda dalla sequenza di accensione, che è sempre uguale.
Per esempio si potrebbe implementare un "contatore di riavvii", incrementarlo in EEPROM ad ogni riavvio, e utilizzarlo come seme. A lungo termine questo seme assumerà tutti i valori possibili con uguale probabilità (anche se saranno molto prevedibili).
Penso che bisognerebbe scartare i primi numeri casuali generati (forse due o tre, ma bisogna provare) per evitare che le sequenze comincino ogni volta in modo simile.

Se durante il funzionamento il micro riceve input dall'ambiente in momenti più o meno casuali, si potrebbero sfruttare per rendere imprevedibile il prossimo seme (anche se non ne migliorano le qualità statistiche).
Per esempio, avendo come periferica una tastiera, alla seconda o terza pressione di un tasto si potrebbe sommare a un valore in EEPROM un contatore di tempo trascorso dal riavvio. Successivamente, per non stressare troppo la EEPROM scrivendola troppo, si potrebbe aggiornare questo valore ogni 100 o 1000 tasti premuti, sommandogli ogni volta il contatore di tempo trascorso. Al riavvio si potrebbe utilizzare come seme questo valore, sommato al numero di riavvii (per preservare la equiprobabilità statistica).

Naturalmente tutte le somme vanno ridotte "modulo" il numero massimo di valori del seme.

Spero di non aver scritto castronerie, soprattutto per la parte statistica. Chiedo umilmente un parere ai più esperti.
Avatar utente
Foto UtenteGuidoB
14,4k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 2247
Iscritto il: 3 mar 2011, 16:48
Località: Madrid

0
voti

[13] Re: Generare un numero random

Messaggioda Foto UtenteTardoFreak » 2 feb 2012, 12:01

In questo modo però due apparecchiature identiche genererebbero sempre le stesse identiche sequenze.
Un sistema invece è quello di usare il solito contatore il cui valore viene catturato allo spegnimento dell' apparecchiatura, con opportuni accorgimenti circuitali e sempre che questo avvenga in modo casuale, chesso' tramite intevento umano. Il dato sarebbe davvero casuale ed una serie di questi dati potrebbe essere usata come magazzino di semi per inizializzare le sequenze pseudo random.
In pratica se non ci si infila in qualche modo una vera casualità non ci sono sistemi che tengono.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[14] Re: Generare un numero random

Messaggioda Foto UtenteDirtyDeeds » 2 feb 2012, 12:08

Comunque, nella generazione dei numeri casuali bisogna sempre tenere presente qual è l'obiettivo per cui vengono generati.

Per esempio, se dovessi fare un'analisi con metodo Montecarlo, potrei magari aver bisogno di generare una sequenza di 10 milioni di numeri casuali che abbia delle buone proprietà statistiche (che vuol dire: assomigli ragionevolmente a un rumore bianco), ma posso anche non preoccuparmi troppo del seme iniziale (o posso lasciarne libera la scelta).
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,7k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7013
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[15] Re: Generare un numero random

Messaggioda Foto UtenteGuidoB » 2 feb 2012, 12:33

TardoFreak ha scritto:In questo modo però due apparecchiature identiche genererebbero sempre le stesse identiche sequenze.
...
In pratica se non ci si infila in qualche modo una vera casualità non ci sono sistemi che tengono.

Concordo che se è necessaria imprevedibilità serve un "input" esterno.
Come ho scritto, per aggiungere imprevedibilità si possono sfruttare gli istanti in cui si verificano pressioni di tasti su una tastiera (o altri eventi) per scrivere in EEPROM un numero imprevedibile. Al seguente riavvio questo numero si può poi sommare al contatore di riavvii, e usare il risultato come seme "imprevedibile" e "equiprobabile". Penso che potrebbe funzionare.

O_/
Avatar utente
Foto UtenteGuidoB
14,4k 6 12 13
G.Master EY
G.Master EY
 
Messaggi: 2247
Iscritto il: 3 mar 2011, 16:48
Località: Madrid

0
voti

[16] Re: Generare un numero random

Messaggioda Foto UtenteTardoFreak » 2 feb 2012, 13:35

Si, quello funziona.
L' importante è che il contatore che cattura viaggi ad una velocità di molto superiore al tempo minimo umano, che mi pare sia quello di trasmissione di un segnale su un nervo e che, se non ricordo male, vale 1ms. (o 4ms. ? boh).
Diciamo che un contatore che s' incrementa ogni 100us avrebbe senso.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti