Vorrei usare STFT per l'analisi multipitch. Mi rendo conto che rilevare i parziali esistenti nel segnale è solo l'inizio. Ho ancora problemi con questo.
Supponiamo che il segnale sia stato campionato con la frequenza "CD" 44100Hz
. Con la finestra dei 1024
campioni ottengo una risoluzione del bin di frequenza di 22500Hz/512=43Hz
. Questo è sufficiente solo per discernere le note di piano alto come:
C5 = 523.251Hz
e C#5 = 554.365
.
Pensavo 1024
fosse una finestra abbastanza grande. Ma forse non lo è e normalmente vengono utilizzate finestre più grandi per rilevare i parziali?
La risoluzione della frequenza può essere aumentata con un metodo diverso dall'aumento della dimensione della finestra, il che peggiora la risoluzione temporale? Ho pensato a due metodi:
Metodo 1:
- Dividi il segnale in bande di frequenza con i filtri passa-banda (ad esempio
0-11.25Hz
e11.25-22.5Hz
). - Effettua il downsampling delle bande più alte in modo che le alte frequenze originali diventino ora basse (quindi fallo per la seconda banda
11.25-22.5Hz -> 0Hz-22.5Hz
) - non sono sicuro che ciò sia possibile. - Concat set di contenitori risultanti con etichette regolate.
method2:
- Utilizzare una serie di filtri passa-basso con limite crescente.
- Eseguire FFT su intervalli di frequenza crescenti.
- Per ogni frequenza utilizzare la migliore risoluzione possibile (bin del primo FFT in cui era inclusa questa frequenza).
- Questo farà sì che le basse frequenze abbiano una risoluzione migliore, ma penso che questo sia ok perché per le note più alte la differenza di frequenza è maggiore.
Sarò grato per qualsiasi commento su questo argomento.
Ho anche letto qui: in che modo la dimensione della finestra, la frequenza di campionamento influenzano la stima del passo FFT? sul metodo per migliorare i risultati di picco picking. Penso che proverò ad usarlo.