domingo, 16 de octubre de 2022

Ruido Blanco Analógico por Software (Sí aunque parezca mentira)

Usando como fuente el reloj del procesador al calcular cifrados sha he conseguido una fuente analógica de ruido aleatorio con la que crear ruido blanco analógico por software pues lo normal es que las funciones que calculan random son pseudoaleatorias es decir ristras de números que serán iguales siempre que partas de la misma semilla. La utilidad del ruido blanco analógico va desde ayudar a dormir o relajarse o combatir ruiditos de fondo de máquinas y wifi (en la cóclea produce ruidos según la nasa por dilatación por las microondas fenómeno descubierto en los 70s)
Las redes neuronales artificiales también usan ruido y muchas otras cosas seguro me es útil, de momento como audio generado al vuelo.


análisis de frecuencia o trasformada de Fourier para los amigos...(captado con Audacity que no el ruido blanco de Audacity que es pseudoaleatorio)

es ruido blanco (aunque que se va un poco en las frecuencias bajas <10hz así que bastante bien)
He hecho el programa en c# con visual studio.

trocito de código que genera el número aleatorio de verdad:


private int UnDe255()
        {
            double nuevoRandom;
            Stopwatch watch = new Stopwatch();

            byte[] rawrandom = new byte[rnd.Next(40,280)];

        
            rnd.NextBytes(rawrandom);
            watch.Start();
            hash = mySHA.ComputeHash(rawrandom);
            watch.Stop();
            nuevoRandom = watch.Elapsed.TotalMilliseconds;


            nuevoRandom = 1 / nuevoRandom;


            nuevoRandom = (1/nuevoRandom);
            string semilla = (nuevoRandom.ToString().Replace(",", ""));
            
            var random = new Random(Int32.Parse (semilla));


            nuevoRandom = random.Next(0,255);
           

            return (int)nuevoRandom ;
        }


El programa genera una cadena variable de 40 a 280 bytes de números pseudoaleatorios.
Calcula su cifrado con el algoritmo sha1 y cuenta el tiempo que le cuesta: esto sería la verdadera fuente aleatoria analogía, pues el procesador entre temperatura ruido campo magnético nunca tarda lo mismo y además esta exagerado por recibir los números de un array variable y ser estos pseudoaleatorios (aunque igual ni falta hace que sean pseudorandom)
El tiempo que tarda en milisegundos en efectuar la operación sirve como semilla a un número generado por el algoritmo del sistema que es pseudo-random; lo que consigo con esto es ruido blanco (existen varios tipos de ruidos según su espectro los más usados: blanco, rosa, marrón o browniano también llamado rojo) , pues la semilla era de origen analógico.
Finalmente lleno un buffer de datos y con la librería NAudio genero el ruido en tiempo real.
En la universidad de Princeton estudian como las emociones alteran la realidad y los eventos:
Las emociones afectan el resultado de eventos aleatorios como un juego de dados parece, estar seguro que vas a sacar algo o tener miedo a perder influye...
Los aparatos que hacen lo mismo (generar ruido blanco analógico) se venden en ebay o los tienes que fabricar con dos transistores.
igual de todas formas analógico implica que es por hardware y de un circuito sin cuantizar o pasar a números pero supongo que se entiende.

No hay comentarios:

Publicar un comentario