Newsgroup: it.comp.musica
Titolo: Accordatore

Salve sto costruendo un accordatore per il computer (in pratica un 
software che ti dice se stai suonando in modo accordato o no usando il 
microfono attaccato al computer).
ho usato la trasformata veloce di fourier, e graficando il risultato ho 
ottenuto i grafici che potete vedere ai link di seguito:
http://img91.imageshack.us/img91/1240/2000hzplotspectrum5kt.jpg
qui il segnale in input era una sinusoide a 2000hz e disturbo minimo
http://img91.imageshack.us/img91/8549/440hzplotspectrum7fg.jpg
qui il segnale in input era una sinusoide a 440hz (un LA) e disturbo minimo.
non mi intendo molto di Fourier, come faccio partendo da quei dati a 
capire che il segnale percepito corrispondeva a un LA o a qualcos'altro?
grazie
Giulio

 Giulio
HTH
Ciao
-- 
Emiliano Grilli
Linux user #209089 
http://www.emillo.net

 qualcos'altro?
In effetti c'è qualcosa che non torna. Se hai una sinusoide in ingresso
a 2000Hz (o a 440Hz) devi ottenere uno spettro con picco a 2000Hz (e
440Hz). I grafici che hai ottenuto tu sembrano avere due picchi attorno
ai 25Hz e ai 75Hz (per l'onda a 2000Hz) e attorno ai 5Hz e 95 Hz (per
l'onda a 440Hz). Sicuro di aver usato l'algoritmo giusto, oppure di
aver fornito correttamente il segnale di ingresso?
Salvador



Bè, i due grafici sono identici, quindi qualcosa che non va c'è.
Innanzitutto l'asse delle frequenze non va oltre come scala?
Intanto ti do due consigli sulla FFT.
Ho visto che non hai usato nessuna finestra di campionamento. Questo con
segnali sinusoidali in genere non è una grande idea (spiegare il perchè
non mi è molto facile senza un disegnino). Prova con una finestra di
Hamming.
Ho visto che usi finestre da 512 campioni. La FFT vuole un numero di
campioni pari a una potenza di due, ma 512 mi sembrano pochini. La
risoluzione raggiunta dallo spettro è proporzionale alla larghezza
di finestra. Calcola che un la naturale (440Hz) a 44100Hz di campionamento
occupa circa un centinaio di campioni per periodo. Indi per cui la tua
finestra è inadatta scendendo circa a 100Hz (non prendi manco un periodo
completo). Allarga, almeno a 1024, ma anche oltre. 
I risultati che hai ottenuto per me sono semplicemente lo spettro della
finestra rettangolare usata. In ogni caso otterrai sempre armoniche spurie
dovute alla finestrazione, ma se le cose son fatte bene sono sempre più
basse della fondamentale. Certo, nel tuo caso c'è qualcosa che non va ma
non posso capire cosa.
Ciao
 

 aver fornito correttamente il segnale di ingresso?
bhe nel programma passo semplicemente l'input del microfono 
rappresentato con numeri tra 0 e 255 alla FFT. ho impostato vari delta_T 
(che dovrebbe essere il tempo di campionamento) però la cosa strana è 
che al diminuire del tempo di campionamento (sono arrivato a delta_T = 
1/5000) i picchi si spostano a sinistra.
il segnale di input è campionato a 8000hz ma come si vede nei disegni 
postati precedentemente uso solamente 512 campioni per calcolare la FFT 
(mi serve una cosa molto veloce, che sia in grado di aggiornarsi spesso)
ho provato ad aumentare il numero dei campioni fino a 4096 e questi sono 
i risultati:
1000 hz con 4096 campioni e delta_T 1/20:
http://img54.imageshack.us/img54/2664/1000hz20cps4096samples0hr.jpg
1000 hz con 4096 campioni e delta_T 1/2000:
http://img81.imageshack.us/img81/5302/1000hz2000cps4096samples1dc.jpg