Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoCarmela Chiari Modificato 8 anni fa
1
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
2
Problema ‘C6711 DSK’ Riconoscere una nota musicale utilizzando il ‘C6711 DSK’
3
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 musicamusica 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 ottavaottava
4
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.
5
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(N 2 ). Un algoritmo FFT ottiene lo stesso risultato con un numero di operazioni O(n log(n))
6
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=N 1 N 2 in DFT più piccole di dimensioni N 1 e N 2, insieme a O(n) moltiplicazioni per l'unità immaginaria, detti fattori twiddle.divide et impera 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
7
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
8
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
9
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
10
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():
11
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
12
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.