Saltar al contenido

Generación de ruido blanco de frecuencia de audio usando Arduino Mini Pro

Esta es la solución más válida que encomtrarás brindar, pero primero mírala detenidamente y analiza si se adapta a tu trabajo.

Solución:

No sé si necesitas todo eso, solo un Arduino y un altavoz piezoeléctrico y un potenciómetro si quieres jugar con el volumen.

void generateNoise()  lobit;
    reg = newr;
    digitalWrite (speakerPin, reg & 1);
    delayMicroseconds (50);  // Changing this value changes the frequency.

La respuesta de Mike utiliza una configuración de registro de desplazamiento de retroalimentación lineal de Fibonacci, pero la configuración de registro de desplazamiento de retroalimentación lineal de Galois es más compacta y podría ser más rápida:

#define speakerPin 8

unsigned long lastClick;

void setup() 
  // put your setup code here, to run once:
   pinMode(speakerPin,OUTPUT);
   lastClick = micros();   



/* initialize with any 32 bit non-zero  unsigned long value. */
#define LFSR_INIT  0xfeedfaceUL
/* Choose bits 32, 30, 26, 24 from  http://arduino.stackexchange.com/a/6725/6628
 *  or 32, 22, 2, 1 from 
 *  http://www.xilinx.com/support/documentation/application_notes/xapp052.pdf
 *  or bits 32, 16, 3,2  or 0x80010006UL per http://users.ece.cmu.edu/~koopman/lfsr/index.html 
 *  and http://users.ece.cmu.edu/~koopman/lfsr/32.dat.gz
 */  
#define LFSR_MASK  ((unsigned long)( 1UL<<31 | 1UL <<15 | 1UL <<2 | 1UL <<1  ))

unsigned int generateNoise() 
  // See https://en.wikipedia.org/wiki/Linear_feedback_shift_register#Galois_LFSRs
   static unsigned long int lfsr = LFSR_INIT;  /* 32 bit init, nonzero */
   /* If the output bit is 1, apply toggle mask.
                                    * The value has 1 at bits corresponding
                                    * to taps, 0 elsewhere. */

   if(lfsr & 1)  lfsr =  (lfsr >>1) ^ LFSR_MASK ; return(1);
   else          lfsr >>= 1;                      return(0);



void loop() 
      /* ... */
      if ((micros() - lastClick) > 50 )  // Changing this value changes the frequency.
        lastClick = micros();
        digitalWrite (speakerPin, generateNoise());
      


Si guardas algún recelo o disposición de enriquecer nuestro artículo eres capaz de escribir un comentario y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *