Trasformata discreta di Fourier: trovare rapidamente il fondamentale?


9

In primo luogo, mi scuso perché sono uno sviluppatore di software ed è da molto tempo che non mi immergo nella matematica pura, quindi la mia domanda potrebbe sembrare stupida. Spero di no.

Il contesto è il riconoscimento del tono nella musica.

Se prendi una nota musicale e applichi ad essa una trasformata di Fourier, avrai una somma infinita di ampiezze per determinate frequenze. Ad esempio, se gioco una nota il cui fondamentale è , su qualsiasi strumento, dopo la trasformata di Fourier, avrò armoniche a a F , 2 F , 3 F , ... , n F . Ogni frequenza avrà una data ampiezza che definisce il timbro dello strumento (piano, voce, tromba, ... tutti seguono questo loaw, ma avrai ampiezze diverse per ogni armonica)FF,2F,3F,...,nF

Ora quello che vorrei fare è da un dato segnale audio, trovare . Solo quello. È più complicato di quanto sembri perché avrai sempre un rumore di fondo e così via ... Inoltre, F non è necessariamente la frequenza con la massima ampiezza!FF

Quindi la mia idea per trovare è applicare un DFT (bene in realtà un FFT per la velocità) e trovare una frenata F , in modo che F + 2 F + 3 F + ... + n F sia massimo nell'output FFT.FFF+2F+3F+...+nF

Pensi che sia possibile? Pensi che sia possibile in brevissimo tempo (diciamo <5 millisecondi)?


Probabilmente questa potrebbe essere una risposta: edaboard.com/thread197897.html

Bene, sì, ma questo è un metodo diverso, no? IMHO, è più facile ma molto meno affidabile perché non riesce a distinguere tra suoni armonici e inarmonici ...
Dinaiz,

Risposte:


6

Quello che stai descrivendo è molto simile al metodo Harmonic Product Spectrum per la stima del tono, come elencato in questo documento CCRMA di Stanford .

Un FFT non ti dà una "somma infinita di ampiezze", ma un numero finito di bin risultati a seconda della lunghezza del FFT.

5 mS è solo 1 periodo di una nota di 200 Hz e solo una frazione di un periodo inferiore a 200 Hz. Il riconoscimento del tono musicale di solito richiede l'ascolto o l'analisi di un numero multiplo di periodi della periodicità di un suono di tono. E molta musica usa note sotto G2. Se si dispone di una lunghezza sufficiente di dati, il calcolo di una stima dell'intonazione da tali dati potrebbe richiedere solo l'ordine dei microsecondi anziché i millisecondi su un PC o dispositivo mobile moderno.


Buon punto. Tuttavia, se hai già 2F e 3F, non hai davvero bisogno di F, vero? Nel tuo esempio, 2F = 400hz e 3F = 600hz, quindi puoi probabilmente scoprire che F era 200 anche senza sentire abbastanza suono per avere un periodo di 5 ms, vero? Ho anche sentito parlare della trasformazione wavelet. Pensi che sia un metodo migliore per farlo?
Dinaiz,

@Dinaiz: dipende dalla sorgente del suono acuto e dal fatto che quei frammenti di frequenze di overtone siano effettivamente stazionari o meno. Le wavelet sono una domanda completamente separata.
hotpaw2,

Quindi questo metodo non è adatto per trovare f0 in "tempo quasi reale". Allo stato dell'arte attuale, è possibile trovare f0, in meno di pochi millisecondi, con qualsiasi strumento, o è una causa persa e dovrei rinunciare alla mia ricerca? : D
Dinaiz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.