Sto cercando di creare un programma di rilevamento del tono che estrae le frequenze dei picchi in uno spettro di potenza ottenuto da un FFT ( fftpack
). Sto estraendo le frequenze di picco dal mio spettro usando il Primo Estimatore di Quinn per interpolare tra i numeri di bin. Questo schema sembra funzionare bene in determinate condizioni. Ad esempio, utilizzando una funzione di finestra rettangolare con una dimensione della finestra di 1024 e una frequenza di campionamento di 16000, il mio algoritmo identifica correttamente la frequenza di un tono A440 purocome 440.06 con una seconda frequenza parziale di 880.1. Tuttavia, in altre condizioni, produce risultati imprecisi. Se cambio la frequenza di campionamento (ad esempio a 8000) o la dimensione della finestra (ad esempio a 2048), identifica ancora correttamente il primo parziale come 440, ma il secondo parziale è da qualche parte intorno a 892. Il problema peggiora ancora per i toni inarmonici come quelli prodotto da una chitarra o un piano.
La mia domanda generale è: in che modo la frequenza di campionamento, la dimensione della finestra e la funzione della finestra influiscono sulla stima della frequenza dei picchi FFT? La mia ipotesi era che il semplice aumento della risoluzione dello spettro aumentasse l'accuratezza della stima della frequenza di picco, ma questa non è chiaramente la mia esperienza (anche il riempimento zero non aiuta). Sto anche assumendo che la scelta della funzione finestra non avrà molto effetto perché la dispersione spettrale non dovrebbe cambiare la posizione del picco (sebbene, ora che ci penso, la dispersione spettrale potrebbe potenzialmente influenzare la stima della frequenza interpolata se le dimensioni dei bin adiacenti a il picco viene aumentato artificialmente dalla perdita da altri picchi ...).
qualche idea?