PDA

Visualizza la versione completa : come funziona lo spettrogramma di un suono?


 
weatherman
09-11-2006, 16:02
perche' se ho una onda sonora poi nello spettrogramma mi appaiono diverse frequenze per un determinato istante t? Facendo la trasformazione di Fourier dovrei averne una sola o sbaglio?

leon4rdo
09-11-2006, 16:14
cosi sui due piedi non saprei risponderti, ma hai considerato le spurie che si sommano alla frequenza?

panta1978
09-11-2006, 17:21
Originariamente inviato da weatherman
perche' se ho una onda sonora poi nello spettrogramma mi appaiono diverse frequenze per un determinato istante t? Facendo la trasformazione di Fourier dovrei averne una sola o sbaglio?

No, se tu avessi un suono "puro", ovvero un'onda acustica perfettamente sinusoidale allora sì. Tieni presente che i suoni puri sono fastidiosissimi (per farti capire, un suono puro può essere il rumore di un cicalino o di una radiosveglia).

Ora, se in quest'onda sonora tu hai registrato, per fare un esempio, un flauto che suona un La della 3° ottava (frequenza base: 440 Hz), troverai tutte armoniche con frequenze multiple di 440 Hz (880 Hz, 1.32 kHz, 1.76 kHz, 2.2 kHz, eccetera).

Se poi registri il suono di un organo che esegue degli accordi, avrai tante note, i cui contributi si sommeranno.

Poi, chiaramente, registrerai anche il rumore di fondo, ed allora troverai un certo numero di "frequenze predominanti", mentre alle altre frequenze troverai valori di ampiezza (o densità di ampiezza, a seconda della scala che usi) decisamente inferiori.

Spero di essere stato utile.

weatherman
09-11-2006, 17:53
Originariamente inviato da panta1978
No, se tu avessi un suono "puro", ovvero un'onda acustica perfettamente sinusoidale allora sì. Tieni presente che i suoni puri sono fastidiosissimi (per farti capire, un suono puro può essere il rumore di un cicalino o di una radiosveglia).

Ora, se in quest'onda sonora tu hai registrato, per fare un esempio, un flauto che suona un La della 3° ottava (frequenza base: 440 Hz), troverai tutte armoniche con frequenze multiple di 440 Hz (880 Hz, 1.32 kHz, 1.76 kHz, 2.2 kHz, eccetera).

Se poi registri il suono di un organo che esegue degli accordi, avrai tante note, i cui contributi si sommeranno.

Poi, chiaramente, registrerai anche il rumore di fondo, ed allora troverai un certo numero di "frequenze predominanti", mentre alle altre frequenze troverai valori di ampiezza (o densità di ampiezza, a seconda della scala che usi) decisamente inferiori.

Spero di essere stato utile.
grazie ora la storia e' un po' piu' chiara. Sai per caso anche come, dato un segnale, si trovano le varie frequenze che lo compongono (per andare quindi a formare lo spettrogramma)?

panta1978
09-11-2006, 18:00
Originariamente inviato da weatherman
grazie ora la storia e' un po' piu' chiara. Sai per caso anche come, dato un segnale, si trovano le varie frequenze che lo compongono (per andare quindi a formare lo spettrogramma)?

Esistono tanti programmi scientifici ad hoc. Anche excel lo fa installando le opportune librerie, ma è scomodissimo, sconsiglio vivamente!
Io (è il mio pane quotidiano, 'sta roba) utilizzo un software commerciale chiamto Matlab. Molto potente, in grado di fare un pacco di cose, dall'analisi dei segnali, alla simulazione di sistemi elettrici, meccanici, termici... Ovviamente ha un costo esorbitante che un privato non può permettersi!

Tra gli emuli open-source segnalo Octave (http://www.gnu.org/software/octave/), che ha molte meno toolboxes e funzionalità, ma è gratuito! Per fare le fft va benissimo. Esiste sia per Win che per Mac che per Linux.

Una volta che lo installi, devi crearti un programmino che salvi in un file .m (che puoi editare col blocco note o altro software simile, es: Notepad+), poi lo lanci da linea di comando.

Se hai bisogno di altre info, più che volentieri.

weatherman
09-11-2006, 18:08
Originariamente inviato da panta1978
Esistono tanti programmi scientifici ad hoc. Anche excel lo fa installando le opportune librerie, ma è scomodissimo, sconsiglio vivamente!
Io (è il mio pane quotidiano, 'sta roba) utilizzo un software commerciale chiamto Matlab. Molto potente, in grado di fare un pacco di cose, dall'analisi dei segnali, alla simulazione di sistemi elettrici, meccanici, termici... Ovviamente ha un costo esorbitante che un privato non può permettersi!

Tra gli emuli open-source segnalo Octave (http://www.gnu.org/software/octave/), che ha molte meno toolboxes e funzionalità, ma è gratuito! Per fare le fft va benissimo. Esiste sia per Win che per Mac che per Linux.

Una volta che lo installi, devi crearti un programmino che salvi in un file .m (che puoi editare col blocco note o altro software simile, es: Notepad+), poi lo lanci da linea di comando.

Se hai bisogno di altre info, più che volentieri.
ok, matlab lo conosco. Ma non ho ancora capito bene: facendo una ft,fft,stft o quant'altro ho comunque solo la frequenza fondamentale o sbaglio? Quali sono le operazioni matematiche che mi permettono di trovare le altre frequenze?

clax
09-11-2006, 18:19
se ben ricordo, la fft di matlab trova solo le ampiezze e forse gli sfasamenti di ciascuna armonica (e le mette in un vettore), mentre le frequenze sono da inserire in un altro vettore col quale poi verrà "plottato" assieme per avere il diagramma ampiezze-frequenze. per quanto riguarda la frequenza principale, mi ricordo che nel caso di un segnale campionato aveva un legame con il tempo totale di campionamento e con la frequenza di campionamento, però non mi ricordo in che termini era.

panta1978
09-11-2006, 18:29
Originariamente inviato da weatherman
ok, matlab lo conosco. Ma non ho ancora capito bene: facendo una ft,fft,stft o quant'altro ho comunque solo la frequenza fondamentale o sbaglio? Quali sono le operazioni matematiche che mi permettono di trovare le altre frequenze?

No. Usualmente, una fft ha una sintassi del genere:

Y = fft(X,N)

In sostanza, eseguo una fft su N nodi alla funzione X. Molto spesso, per velocizzare l'algoritmo, N è una potenza del due o comunque un numero ben divisibile. Per intenderci, N=1024 è ottimale, N=1000 buono, N=1100 così così, N=1097 è male.

Ciò significa che, se usi N nodi, dividi il tuo spettro di frequenze in N/2 parti.
Così, se mettiamo per semplicità, tu hai fatto un campionamento a 50.000 Hz, e poni N=1000, otterrai i valori della fft per i seguenti valori di frequenza:
0 Hz - 50 Hz - 100 Hz - 150 Hz - 200 Hz - 250 Hz - ....... - 25.000 Hz (per il criterio di Shannon se campioni ad una frequenza fs, la banda massima osservabile è fs/2).

Per ogni valore della frequenza ottieni un numero complesso, il cui valore assoluto rappresenta la densità di ampiezza del segnale, e la fase... la fase del segnale.

Per quanto riguarda l'algoritmo utilizzato, la trasformata di Fourier classica moltiplica la funzione f(t) per delle funzioni sin(wt) e cos(wt) con frequenze pari alle frequenze che si vogliono osservare e, calcolandone l'integrale, trova i valori rispettivamente della parte reale e della parte immaginaria della trasformata di Fourier.

L'algoritmo fft (Fast Fourier Transform) è più complesso, e sfrutta delle simmetrie della funzione per arrivare allo stesso risultato della funzione fft con meno calcoli (N*logN contro N^2). In pratica, divide la funzione originaria in tanti "pezzettini", e li calcola separatamente, poi unisce i risultati.

PS: ricordati che la fft ti fornisce la densità di ampiezza A del segnale. Se vuoi passare all'ampiezza a, devi fare il seguente calcolino:

a = sqrt(A)/(N/2)

Angioletto
09-11-2006, 18:31
lo 0,5 % del rumore che ascoltate nel passaggio da una stazione radio all'altra rappresenta il residuo del suono generato dal big-bang :madai!?:

weatherman
09-11-2006, 18:47
Originariamente inviato da panta1978
No. Usualmente, una fft ha una sintassi del genere:

Y = fft(X,N)

In sostanza, eseguo una fft su N nodi alla funzione X. Molto spesso, per velocizzare l'algoritmo, N è una potenza del due o comunque un numero ben divisibile. Per intenderci, N=1024 è ottimale, N=1000 buono, N=1100 così così, N=1097 è male.

Ciò significa che, se usi N nodi, dividi il tuo spettro di frequenze in N/2 parti.
Così, se mettiamo per semplicità, tu hai fatto un campionamento a 50.000 Hz, e poni N=1000, otterrai i valori della fft per i seguenti valori di frequenza:
0 Hz - 50 Hz - 100 Hz - 150 Hz - 200 Hz - 250 Hz - ....... - 25.000 Hz (per il criterio di Shannon se campioni ad una frequenza fs, la banda massima osservabile è fs/2).

Per ogni valore della frequenza ottieni un numero complesso, il cui valore assoluto rappresenta la densità di ampiezza del segnale, e la fase... la fase del segnale.

Per quanto riguarda l'algoritmo utilizzato, la trasformata di Fourier classica moltiplica la funzione f(t) per delle funzioni sin(wt) e cos(wt) con frequenze pari alle frequenze che si vogliono osservare e, calcolandone l'integrale, trova i valori rispettivamente della parte reale e della parte immaginaria della trasformata di Fourier.

L'algoritmo fft (Fast Fourier Transform) è più complesso, e sfrutta delle simmetrie della funzione per arrivare allo stesso risultato della funzione fft con meno calcoli (N*logN contro N^2). In pratica, divide la funzione originaria in tanti "pezzettini", e li calcola separatamente, poi unisce i risultati.

PS: ricordati che la fft ti fornisce la densità di ampiezza A del segnale. Se vuoi passare all'ampiezza a, devi fare il seguente calcolino:

a = sqrt(A)/(N/2)
va bene, penso di aver capito piu' o meno, ora vedo un po' se riesco a combinare qualcosa con matlab :ciauz:

Loading