120 likes | 334 Views
Riconoscimento frequenze di note musicali. Corso ESIM Prof. P. Daponte. Gruppo di lavoro: Mario Calì 195/001418 Marco Gallucci 195/001241 Roberto De Falco 195/001429 Eugenio Macchia 195/001134. Problema. Riconoscere una nota musicale utilizzando il ‘C6711 DSK’ .
E N D
Riconoscimento frequenze di note musicali Corso ESIM Prof. P. Daponte Gruppo di lavoro: Mario Calì 195/001418 Marco Gallucci 195/001241 Roberto De Falco 195/001429 Eugenio Macchia 195/001134
Problema • Riconoscere una nota musicale utilizzando il ‘C6711 DSK’
Musica, note e frequenze (1) Con l'espressione Nota Musicale si intendono fondamentalmente due cose: • il segno con cui si rappresentano i suoni usati nella musica • due note, di cui una ha frequenza doppia rispetto all'altra, che sembrano molto simili e di conseguenza sono comunemente chiamate con lo stesso nome. L'intervallo determinato da queste note è detto ottava
Musica, note e frequenze (2) • si è consolidato l'uso di dodici note per ottava • il La4 corrisponde a una frequenza acustica di 440 Hz. Ogni nota è separata dal La4 da un numero intero di semitoni. E ogni 12 semitoni si ha un raddoppio di frequenza.
Strumenti matematici • Per operare l’analisi in frequenza di un segnale è possibile ricorrere alla Trasformata discreta di Fourier (DFT) • La DFT è definita dalla formula • per q = 0, 1, ..., N-1.Calcolare direttamente questa somma richiede una quantità di operazioni aritmetiche O(N2). Un algoritmo FFT ottiene lo stesso risultato con un numero di operazioni O(n log(n))
Fast Fourier Transform • L'algoritmo FFT più diffuso è l'algoritmo di Cooley-Tukey. Questo algoritmo si basa sul principio di divide et impera, e spezza ricorsivamente una DFT di qualsiasi dimensione N con N numero composto, tale che N=N1N2 in DFT più piccole di dimensioni N1 e N2, insieme a O(n) moltiplicazioni per l'unità immaginaria, detti fattori twiddle. • L'uso più conosciuto dell'algoritmo di Cooley-Tukey è di dividere e trasformare in due pezzi di n/2 ad ogni passo, ed è quindi ottimizzato solo per dimensioni che siano potenze di due
Soluzione Matlab • Matlab fornisce agli sviluppatori una funzione di libreria per il calcolo della FFT x = abs(fft(x)) • Grazie all’utilizzo di un costrutto for, è possibile calcolare la frequenza relativa al valore massimo della FFT del segnale, e quindi la frequenza fondamentale • Successivamente, si calcola la frequenza del segnale: freq =(indMax-1)*campFreq/camp; • dove indMax = frequenza fondamentale • campFreq = frequenza di campionamento • Camp = numero di campioni utilizzati
Da Matlab a C • La libreria del TMS320C67x DSP per il calcolo della FFT fornisce la libreria DSPF_sp_cfftr2_dit • Da manuale, la suddetta funzione richiede due procedure di supporto, una per il calcolo dei fattori di Twiddle, ed un’altra per il bit reverse: gen_w_r2 - bit_rev
Simulazioni in Code Composer Studio • Le prime prove sperimentali sono state effettuate fornendo, all’interno del codice sorgente, la lista di campioni prelevati da Matlab x[1024] = {0.014, 0.013, 3.56, …} • Visti i risultati soddisfacenti, si è passati alla sperimentazione su DSP reale
Interrupt • Per effettuare il testing su DSP reale è stata creata una ISR (interrupt service routine) associata al clock da 8kHz presente sulla scheda DSK • Il programma è stato posto in ascolto tramite la seguente funzione main():
Interrupt Service Routine • L’ISR rappresenta il cuore dell’applicazione • Grazie all’utilizzo di più variabili booleane, l’isr stabilisce quando iniziare la memorizzazione dei campioni acquisiti. • Scartato il rumore iniziale, l’isr procede all’esecuzione della fft, e dei successivi calcoli • Un algoritmo di ricerca della minima distanza dalle frequenze delle note conosciute, restituisce la nota corrispondente
Conclusioni • Il sistema attuale riconosce tutte le note della 4° scala dal DO al SI, compresi i semitoni. • E’ ovviamente possibile estendere il riconoscimento alle altre scale musicali semplicemente inserendo nel codice sorgente i valori delle rispettive frequenze. LA LA