<< Chapter < Page Chapter >> Page >

Si modifichi il codice di [link] in modo da ottenere la curva di livello di un noise gate . Quando il livello scende al di sotto della soglia verde, si applica uno smorzamento che gradualmenteforza il segnale ad essere inudibile. Quando il livello supera la soglia rossa, si applica una amplificazione cheriporta il segnale al livello originale.

Nella soluzione seguente il segnale viene abbattuto, quando scende al di sotto della soglia inferiore,mediante moltiplicazioni successive per un coefficiente gDown , il cui valore (sempre minore di uno) viene impostato in base al tempo desiderato dismorzamento ed al frame rate. Lo smorzamento si considera esaurito quando il segnale di ingresso vienead essere moltiplicato per 0.01 . Analogamente, al superamento della soglia superiore, il moltiplicatore viene riportato a unomediante moltiplicazioni successive per il coefficiente gUp , di valore sempre maggiore di uno. import ddf.minim.*;AudioInput in; int WIDTH=400, HEIGHT=200; int x;int level, prevLevel, levelG; color colorLine=color(0,255,0);boolean acceso=false; int basso=30;int alto=50; float damp=1.0;float gain = 1.0; Minim minim;float decayTime = 10.0; // in seconds float raiseTime = 2.0;float gDown = pow(10,-2/frameRate/decayTime); float gUp = pow(10,2/frameRate/raiseTime);void setup(){ println("gDown = " + gDown + "gUp = " + gUp);size(WIDTH, HEIGHT); minim = new Minim(this);// get a line-in from Minim: mono, 512 sample buffer // default sampling rate is 44100, default bit-depth is 16in = minim.getLineIn(Minim.MONO, 512);}void draw() {if (x==0) { background(0);stroke(255,0,0); line(0,HEIGHT-alto,WIDTH,HEIGHT-alto); stroke(0,255,0); line(0,HEIGHT-basso,WIDTH,HEIGHT-basso);} stroke(colorLine);level = int(in.left.level()*HEIGHT); gain = gain*damp;//println(gain); if (gain>1.0) gain = 1.0; if (gain<0.01) gain = 0.01; levelG = int(level*gain);line(x, HEIGHT - prevLevel, (x+1)%WIDTH, HEIGHT - levelG); x = (x+1)%WIDTH;prevLevel = levelG; if (acceso) {if (level<basso) { colorLine = color(0, 255, 0);damp = gDown; acceso = false;} }else //spento {if (level>alto) { colorLine = color(255, 0, 0);damp = gUp; acceso = true;} }}void stop() {// always stop Minim minim.stop();super.stop(); }

Gli esempi di sogliatura, isteresi, e gating visti nel caso dell'elaborazione del segnale audio sono di utilità generale per qualsiasiflusso di segnale proveniente da un sensore e, in particolare, anche nell'elaborazione di segnale video.

Filtri

Nella maggior parte delle applicazioni che trattano flussi di segnale provenienti da sensori, c'è la necessità di addolcire( smoothing ) il profilo dei segnali stessi, in modo da evitare picchi improvvisi e rumore a rapidavariabilità. Ciò si può fare con i filtri . Il più semplice filtro di smoothing è il filtro di media , il quale restituisce ad ogni istante il valor medio tra due campionitemporalmente contigui del segnale di ingresso. Interpretando i segnali nel dominio delle frequenze, l'operazione dismoothing corrisponde ad un filtraggio passa-basso, cioè ad una attenuazione delle frequenze elevate. Infatti, levariazioni repentine corrispondono a componenti di frequenza elevata.Le capacità di smoothing del filtro di media sono limitate, e per ottenere degli smoothing più decisi (maggiore attenuazionedelle alte frequenze) bisogna fare medie pesate di un numero maggiore di campioni del segnale di ingresso. Un filtro moltoutile allo scopo è il filtro del secondo ordine simmetrico . Qualunque sia l'ordine del filtro, la sua realizzazione comemedia pesata di campioni del segnale di ingresso può essere effettuata convenientemente appoggiandosi alla realizzazione a buffer circolare . In questo caso, la lettura avverrà da un certo numero di celle contigue a quella puntata da OUT , queste letture saranno pesate per i coefficienti del filtro, e il puntatore IN coinciderà con il puntatore OUT .

Get Jobilize Job Search Mobile App in your pocket Now!

Get it on Google Play Download on the App Store Now




Source:  OpenStax, Programmazione di artefatti interattivi. OpenStax CNX. Dec 09, 2010 Download for free at http://cnx.org/content/col10417/1.9
Google Play and the Google Play logo are trademarks of Google Inc.

Notification Switch

Would you like to follow the 'Programmazione di artefatti interattivi' conversation and receive update notifications?

Ask