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 1024campioni ottengo una risoluzione del bin di frequenza di 22500Hz/512=43Hz. Questo è sufficiente solo per discernere le note di piano alto come:
C5 = 523.251Hze C#5 = 554.365.
Pensavo 1024fosse 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.25Hze11.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.