Sto cercando di implementare un FFT per capire come funziona. Sto usando un file audio casuale (quindi ho non posso controllare la dimensione del segnale), con una frequenza di campionamento di 44,1 Khz. Sto usando questa libreria

https://www.nayuki.io/res/free-small-fft-in-multiple-languages/Fft.java

Lobiettivo è applicare questa formula a ottieni la frequenza: F = n * Fs / N

Con n numero di contenitori. Fs frequenza di campionamento e N dimensione della FFT

1) Si suppone che una Fft abbia una lunghezza, la maggior parte di esse usa una potenza di 2 radici. Ma come posso conoscere la lunghezza della FFT se la applico a un intero array di dati? è la dimensione di quellarray?

2) Non capisco i contenitori, come vengono elaborati? So che FFT funziona con blocchi di dati, ma se fornisco un array completo di dati, come vengono “creati” i contenitori.

Commenti

  • È possibile rispondere a queste domande con un po di ricerca e lettura su Internet. Ti consiglio inoltre di iniziare la codifica con segnali di durata abbastanza breve e applica il tuo software FFT a quelli ed esamina i risultati.
  • In realtà ho fatto molte ricerche ma non sono riuscito a ' capire, ma forse ' sono troppo lento. Grazie per la tua preoccupazione.
  • Prova a cercare su " Trasformata di Fourier discreta " o " come funziona un DFT " invece di " come funziona una FFT ". Una trasformata di Fourier veloce è una scorciatoia di calcolo di una trans di Fourier discreta modulo. Con questultima ricerca è più probabile trovare informazioni sullefficienza computazionale piuttosto che sul processo sottostante. Non ' non vedo come ci si possa aspettare che qualcuno spieghi i fondamenti meglio in una rapida risposta del forum rispetto a un mucchio di siti web dedicati proprio a questo. Anche i primi quattro articoli del mio blog dovrebbero esserti utili. Inizia con dsprelated.com/showarticle/754.php .

Risposta

Domanda 1

Se la applichi su tutta la lunghezza dellarray, la lunghezza dellFFT sarebbe la lunghezza dellarray. Tuttavia, la FFT è più efficiente se la lunghezza è una potenza di due, quindi è comune inserire 0 “alla fine del segnale fino a quando la sua lunghezza è una potenza di 2.

Esempio troppo semplice …

x = [3.4, 2.56, 1.3]

x ha una lunghezza di 3, la potenza successiva di 2 dopo 3 è 4, quindi cambiamo x in

x = [3.4, 2.56, 1.3, 0]

e applica una FFT di lunghezza 4.

Un altro grande MA! Se il tuo segnale è lungo, diventa estremamente inefficiente per fare tutto in una volta. Non vorresti provare a fare un FFT su un file audio della lunghezza anche di una breve canzone. In tal caso, suddividiamo il segnale in blocchi di dimensioni ragionevoli, eseguiamo un FFT su ciascuno e media i risultati.

Ci sono buone probabilità che ciò che vuoi effettivamente fare con i tuoi dati non sia solo un FFT standard, ma piuttosto il processo di calcolo della media che ho descritto sopra. Google Bartlett e Welch metodi per più d etails.

Domanda 2

Non sono sicuro al 100% di cosa stai chiedendo qui. Lo interpreterò come vuoi sapere come viene determinata la larghezza dei bin di frequenza e come funziona.

Lampiezza di ogni bin di frequenza è determinata unicamente dalla velocità alla quale il segnale è stato campionato e la lunghezza della FFT. La larghezza di ogni bin è la frequenza di campionamento divisa per il numero di campioni nella tua FFT.

df = fs / N

I bin di frequenza iniziano da -fs/2 e arrivano fino a fs/2. Ciò significa che se campionati a 100 Hz per 100 campioni, i bin di frequenza saranno di larghezza 1 Hz. Se prendi 200 campioni, ora avrai il doppio dei bin di frequenza e la loro larghezza sarà 1 / 2Hz ciascuno.

Commenti

  • Grazie mille, era tutto ciò che ' non ho capito.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *