miércoles, 26 de octubre de 2022

Fuente de ruido blanco analógica por software sin hardware en tiempo real.


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.

sobre la foto: 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:

acutalización: no me gustaba como sonaba pues al final usaba mi random como semilla del random que viene de serie así que puse un coseno.He cambiado el código.

   private int UnDe255BlancoCOS()

        {
            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)%360;

            return (int)(255 * Math.Cos(nuevoRandom));

        }



El nuevo análisis de espectro queda así usando la función matemática coseno.Algo mejor que el primer análisis arriba.

El programa genera una cadena variable de 40 a 280 bytes de números pseudoaleatorios.

Luego con librerías de audio como NAudio es fácil de usar para sacar ruido en tiempo real pues es que lo que me interesa.

ejemplo de la función en un Timer o reloj cargando un buffer de la libreria NAudio

 private void timer4_Tick(object sender, EventArgs e

        {

            for (int a = 0; a < 10000; a++)

            {

                bytes[a] = (byte)UnDe255BlancoCOS();

            }

            try

            {

                provider.AddSamples(bytes, 1, 10000);

            }

            catch

            {

                provider.ClearBuffer();

                provider.AddSamples(bytes, 1, 10000);

            }

        }

Subiré el programa a algún sitio supongo.

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:

The Global Consciousness Project (princeton.edu)

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.

lo subiré aquí o igual solo el código. Es muy sencillo.

No hay comentarios:

Publicar un comentario