Sei sulla pagina 1di 7

Tecniche di filtraggio: Sintesi numerica del suono di una corda di chitarra in alcuni corpi filtranti

Lavoro eseguito dagli studenti Adriano De Luca Davide Barisano Paolo Scotto Di Vetta Maria Brigida Brunetti Per il corso di Analisi ed Elaborazione numerica dei Segnali Anno Accademico 2009/2010

Introduzione alla descrizione del lavoro Ci siamo proposti di realizzare diversi modelli di filtro per il suono di una corda: corpo di chitarra, bottiglia di plastica ecc A partire da una risposta allimpulso, ricavata da un file precedentemente ottenuto. Tramite unapprossimazione abbiamo ricavato i coefficienti di un generico filtro numerico di questo tipo. Il passo conclusivo stato nel confrontare il segnale cos elaborato con un segnale reale ricavato da registrazione diretta. Prima di procedere nella descrizione del lavoro effettuato, riassumiamo i concetti teorici di base che descrivono il modello di una corda vibrante. Una corda tesa ai due estremi descritta dal modello delle onde stazionarie su una corda. Tali onde sono descritte dallequazione di DAlambert:

dove la soluzione (x,t) rappresenta landamento della perturbazione sulla corda e v in generale la velocit di propagazione. In particolare fissate le condizioni al contorno del caso specifico di una corda fissa ai due estremi, otteniamo che sono possibili le seguenti frequenze di vibrazione: n=n(/)/(2L) dove la tensione della corda, L la lunghezza e rappresenta al densit lineare di massa. Su questa base teorica abbiamo elaborato il nostro modello numerico. Le elaborazioni sono state effettuate utilizzando il software Matlab 2009. I Parte: Creazione del Filtro La prima parte del lavoro consiste nel generare i coefficienti del filtro numerico da applicare al suono sintetizzato. Per far ci si utilizzata una risposta allimpulso di un corpo di chitarra precedentemente registrato e il programma in Matlab maual.m. manual.m crea un filtro basato su uninterfaccia con lutente.

Si tratta di una funzione a tre argomenti: Impulse,ossia risposta allimpulso del filtro; Num, eventuali coefficienti dei numeratori dati in cascata al secondordine; Den, eventuali coefficienti dei denominatori dati in cascata al secondordine.

Il programma pu essere sintetizzato in blocchi di operazioni:

1. Acquisisce limpulso e crea una prima visualizzazione dello spettro con ampiezza lineare e in decibel e frequenza normalizzata a 2; 2. D allutente la possibilit di apportare alcune modifiche: correzione degli assi, reset di numeratore e denominatore; 3. Imposta con la funzione di Matlab freqz.m una linea guida di partenza (se non sono stati forniti num e den, la linea guida una retta); 4. Chiede di scegliere sul grafico il primo punto per lapprossimazione e ne ricava una coppia di poli e zeri, il guadagno e la banda passante, e successivamente chiede di accettare i valori trovati. Sulla base del primo punto individuato costruisce una nuova linea guida che fornisce una prima approssimazione del filtro. Chiede infine se si desidera proseguire con un nuovo punto. 5. Quando si sceglie di non proseguire con un nuovo punto, passa allimmagazzinamento dei coefficienti trovati e fa il grafico di poli e zeri. Se si desidera unapprossimazione pi fine, si pu rilanciare il programma introducendo i coefficienti ottenuti come argomenti iniziali (num e den). Per costruire il nostro filtro abbiamo lanciato il programma fornendo in ingresso la risposta allimpulso del corpo di chitarra e lasciando vuoti gli argomenti relativi a numeratore e denominatore iniziali. Il criterio adottato per la scelta dei punti stato quello di alternare massimi e minimi successivi dello spettro, o punti intermedi nel caso lapprossimazione non risultasse soddisfacente. Vediamo nel dettaglio i vari passaggi effettuati:

Dopo aver caricato il file impulse.mat, contenente il segnale di risposta allimpulso della cassa armonica, avviamo la function manual.m ponendola uguale alle variabili numo e deno, rappresentanti i coefficienti del denominatore e del numeratore delle frazioni componenti il filtro in uscita:

[numo,deno]=manual(impulse,[ ],[ ]);

A questo punto, dopo alcuni passi, il programma ci mostra il grafico della risposta in frequenza della risposta allimpulso del sistema, chiedendoci di selezionare su di esso un punto caratteristico.

La linea verde rappresenta lanteprima del grafico del filtro in uscita ed inizialmente una retta non avendo definito i coefficienti in ingresso. Dopo aver selezionato il primo punto, ossia il primo minimo relativo, il programma inizia lelaborazione del filtro prendendo il punto selezionato come polo e ci visualizza lanteprima:

Effettuiamo il lavoro per pi punti ottenendo il seguente andamento:

Terminando lelaborazione del filtro il programma ci fornisce in uscita i coefficienti caratterizzanti il filtro elaborato:
numo 0.9993 1.0055 0.9986 1.0352 0.9979 1.0114 -1.9942 -1.9869 -1.9883 -1.9774 -1.9749 -1.9134 0.9957 0.9846 0.9961 0.9541 0.9964 0.9298 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 deno -1.9942 -1.9869 -1.9883 -1.9774 -1.9749 -1.9134 0.9950 0.9901 0.9946 0.9893 0.9943 0.9412

In un secondo momento abbiamo migliorato la nostra approssimazione con ulteriori cicli. II Parte: Sintesi del suono di una corda pizzicata Successivamente si passato ad effettuare la sintesi numerica del suono di una corda attraverso il programma generate.m. Utilizzando le regole esposte in precedenza dalla teoria del modello fisico, La funzione generate.m genera leccitazione di una corda pizzicata. Essa parte da valori fissi che simulano i parametri caratteristici della corda (tensione, frequenza, ecc) e tramite analisi di Fourier produce le componenti orizzontali e verticali dellonda stazionaria.

Con i parametri di default il programma genera una corda di SOL (=196 Hz). In particolare il parametro Th legato alla tensione della corda.. Variando opportunamente tale parametro abbiamo prodotto anche la corda successiva, quella del SI (=247 Hz). La funzione richiede in ingresso: Eventuali coefficienti di filtraggio (Num, Den); Frequenza di Sampling.

Ci che abbiamo fatto stato dunque di generare un suono di corda pizzicata ad una frequenza di sampling di 44100 Hz senza ulteriore filtraggio: y=generate([ ],[ ],44100); III Parte: Filtraggio Avendo ora a disposizione filtro e campione sonoro, non resta che applicare luno allaltro. Abbiamo applicato i coefficienti di filtraggio prodotti da manual.m al suono sintetizzato da generate.m attraverso la funzione cascade.m. Tale funzione applica i coefficienti a cascata del secondo ordine che caratterizzano il filtro ad un segnale in
ingresso. Essa parte dai coefficienti del primo sistema del secondo ordine e ne esegue il filtraggio attraverso la funzione filter, distinguendo i casi in cui i vari valori del numeratore sono uguali o diversi da zero. Successivamente itera il procedimento attraverso un ciclo for che agisce per ogni sistema sulloutput precedente, in modo da filtrarlo ogni volta.

Abbiamo dunque utilizzato cascade.m mettendo in ingresso i coefficienti prodotti da manual.m e il segnale prodotto da generate.m: yf=cascade(numo,deno,y); IV parte: Analisi dei Risultati Il segnale acustico ottenuto, filtrato ed elaborato, pu essere ascoltato attraverso la function di matlab soundsc.m. Lascolto ci fornisce delle prime informazioni sui risultati ottenuti. Per ottenere unanalisi pi approfondita, per, effettuiamo unanalisi di Fourier del segnale e osserviamone lo spettro delle frequenze confrontandolo con lo spettro di un segnale acustico di una corda di chitarra reale registrato e fornito dal file GUITG.WAV. Possiamo confrontare i grafici delle due risposte in frequenza:

Suono Sintetizzato

Suono Reale

Quello che possiamo vedere da un primo confronto che larmonica corrispondente a circa 440 Hz (pi precisamente a 392 Hz) del suono sintetizzato, possiede un intensit molto pi elevata rispetto al caso reale. Per ovviare a tale discrepanza abbiamo in ultima istanza cercato di generare un filtro band-stop per attenuare la banda di frequenze intorno a 392 Hz applicandolo al suono sintetizzato. Per far ci abbiamo utilizzato lapplicazione di Matlab fdatool. Avendo effettuato il filtraggio, ottenendo un nuovo segnale acustico, lanalisi di Fourier ci fornisce il seguente risultato leggermente pi vicino alla situazione reale:

La vicinanza eccessiva dellarmonica fondamentale con larmonica da attenuare non ci permette di effettuare ulteriori filtraggi in quanto si potrebbero perdere informazioni essenziali. Sebbene, comunque, non abbiamo raggiunto una situazione perfettamente coincidente con il caso reale, la coincidenza delle armoniche componenti gli spettri ci permette di affermare di essere riusciti a simulare, con questo procedimento, un segnale acustico molto somigliante a quello di una corda pizzicata filtrata da un corpo di chitarra.