Ho un algoritmo che azzera una sequenza a 4N, fa una FFT e usa solo la frequenza più bassa N punti rispetto alla 4N generata.
Sembra un sacco di lavoro sprecato, qualche idea su come farlo più velocemente?
Ho un algoritmo che azzera una sequenza a 4N, fa una FFT e usa solo la frequenza più bassa N punti rispetto alla 4N generata.
Sembra un sacco di lavoro sprecato, qualche idea su come farlo più velocemente?
Risposte:
Se hai solo pochi bin, allora quanto segue potrebbe essere molto efficiente per te:
1. Fai semplicemente il DFT di ogni frequenza di cui hai bisogno.
2. Utilizzare l'algoritmo Goertzel per ciascuna frequenza in questione.
Lo zero padding alla lunghezza 4X, calcolando il FFT più lungo, e quindi usando solo i bidoni 1/4 in basso produce risultati quasi identici all'interpolazione Sinc con finestra del FFT lunghezza originale.
Quindi basta usare la lunghezza FFT originale e interpolare usando un kernel di interpolazione Sinc a 3 fasi con una larghezza della finestra adatta.
Lo zero padding nel dominio del tempo offre una soluzione a frequenza più elevata ma nessuna nuova informazione, quindi fornisce essenzialmente l'interpolazione nel dominio della frequenza. A seconda della natura dei segnali e della precisione richiesta, potresti essere in grado di ottenere i punti di frequenza aggiuntivi con una FFT regolare di N punti e di eseguire un'interpolazione adeguata (lineare, spline, pchip, sinc ecc.).