Pages: [1]   Go Down
Author Topic: Generatore di rumore bianco digitale con Arduino  (Read 776 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti ragazzi!
Volevo chiedere un informazione:
- siccome sto ultimando un sintetizzatore modulare autocostruito, ho la necessità di avere una sorgente di white noise digitale;
so benissimo che è veramente semplice crearla in modo analogico (basta amplificare il rumore di collettore di un transistor generico) ma
mi serviva in maniera digitale e volevo sapere se con Arduino è possibile realizzare un progetto del genere.
La trasformazione in pink noise verrà poi delegata al classico filtraggio costituito da un op-amp.

grazie a tutti
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Premetto che non me ne intendo di musica digitale, so che un generatore di rumore bianco è un generatore sonoro che riproduce un suono che non ha periodicità.
Potresti provare ad usare un timer agganciato ad un pin per generare un segnale PWM abbinato ad un generatore di numeri pseudo-casuali. Ad esempio potresti modificare il segnale PWM generato dal timer ogni volta che il contatore del timer va in overflow modificando il valore di partenza del contatore per il ciclo successivo o altri sistemi.

Per "inseminare" il generatore di numeri casuali dell'Arduino potresti usare la lettura di un pin analogico. Oppure potresti usare un'altra fonte esterna, ad esempio la lettura di una fotoresistenza.
Logged


Offline Offline
Full Member
***
Karma: 4
Posts: 219
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quello che devi realizzare è un Linear Feedback Shift Register ( uno psedo - random number generator)
att. usa AVR-GCC o trasformalo x arduino ide

Code:
#include <avr/io.h>

 uint8_t random(void){
     //32 bit random number, from noinit sram
     static uint32_t random31 __attribute__((section(".noinit")));
     //temp storage for random number
     uint32_t temp;
     temp = random31<<1;
     //if bit31 set, or if init sram happens to be 0
     if((temp & 0x80000000)||(temp == 0)){
         //xor magic number (taps)
         temp ^= 0x20AA95B5;
     }
     //save back to random number for next time
     random31 = temp;
     //return lowest byte only
     return temp;
 }

 int main(){
     while(1){
         PORTB=random();
     }
 }

poi prendi l'uscita della portaB e la colleghi su un dac o su una rete resistiva... vedi

un altro modo sarebbe questo:
prendi i bit meno significativi dell' ADC (solo 8bit) , con l' ingresso collegato su una pista di qualche centimetro, fai un shift a destra 16 volte, poi sommaci il valore del TCNT e questo diventa il tuo LFSR number generator

« Last Edit: August 17, 2012, 06:12:17 am by cyclone » Logged

Pages: [1]   Go Up
Jump to: