J'ai un résultat FFT. Ceux-ci sont stockés dans deuxdouble
tableaux: un tableau de parties réelles et un tableau de parties imaginaires. Comment déterminer les fréquences qui correspondent à chaque élément de ces tableaux?
En d'autres termes, j'aurais aimé créer un tableau qui stocke les fréquences pour chaque composant réel et imaginaire de ma FFT.
c#
signal-processing
fft
Rango
la source
la source
Réponses:
Le premier bac de la FFT est DC (0 Hz), le second bac est
Fs / N
, oùFs
est la fréquence d'échantillonnage etN
est la taille de la FFT. Le prochain bac est2 * Fs / N
. Pour exprimer cela en termes généraux, le nième bac estn * Fs / N
.Donc, si votre fréquence d'échantillonnage, par
Fs
exemple 44,1 kHz et votre taille FFT,N
est de 1024, alors les bacs de sortie FFT sont à:Notez que pour un signal d'entrée réel (parties imaginaires toutes nulles) la seconde moitié de la FFT (cases de
N / 2 + 1
àN - 1
) ne contient aucune information supplémentaire utile (elles ont une symétrie conjuguée complexe avec les premièresN / 2 - 1
cases). Le dernier casier utile (pour des applications pratiques) est àN / 2 - 1
, ce qui correspond à 22006,9 Hz dans l'exemple ci-dessus. Le bac àN / 2
représente l'énergie à la fréquence de Nyquist, c'est-à-direFs / 2
(= 22050 Hz dans cet exemple), mais cela n'a en général aucune utilité pratique, car les filtres anti-crénelage atténueront typiquement tous les signaux à et au-dessusFs / 2
.la source
Jetez un œil à ma réponse ici .
Réponse au commentaire:
La FFT calcule en fait la corrélation croisée du signal d'entrée avec les fonctions sinus et cosinus (fonctions de base) dans une plage de fréquences également espacées. Pour une sortie FFT donnée, il y a une fréquence correspondante (F) comme donnée par la réponse que j'ai postée. La partie réelle de l'échantillon de sortie est la corrélation croisée du signal d'entrée avec
cos(2*pi*F*t)
et la partie imaginaire est la corrélation croisée du signal d'entrée avecsin(2*pi*F*t)
. La raison pour laquelle le signal d'entrée est corrélé avecsin
etcos
fonctions est de tenir compte des différences de phase entre le signal d'entrée et les fonctions de base.En prenant l'amplitude de la sortie FFT complexe, vous obtenez une mesure de la corrélation entre le signal d'entrée et les sinusoïdes à un ensemble de fréquences, quelle que soit la phase du signal d'entrée. Si vous analysez simplement le contenu fréquentiel d'un signal, vous prendrez presque toujours la magnitude ou la magnitude au carré de la sortie complexe de la FFT.
la source
J'ai utilisé ce qui suit:
Les entrées sont:
i
: Bin pour accédersamples
: Taux d'échantillonnage en Hertz (soit 8000 Hz, 44100Hz, etc.)nFFT
: Taille du vecteur FFTla source
samples
ounFFT
. Alors, veuillez le rendre plus explicatif.i * samples / nFFT
. Pourquoi le supplément est-2
il là? Est-ce que je manque quelque chose?Les coefficients de sortie FFT (pour une entrée complexe de taille N) sont de 0 à N - 1 regroupés en fréquence [LOW, MID, HI, HI, MID, LOW].
Je considérerais que l'élément en k a la même fréquence que l'élément en Nk puisque pour des données réelles, FFT [Nk] = conjugué complexe de FFT [k].
L'ordre de balayage de la basse fréquence à la haute fréquence est
Il existe [N / 2] +1 groupes de fréquences de l'indice i = 0 à [N / 2], chacun ayant le
frequency = i * SamplingFrequency / N
Ainsi, la fréquence à la case FFT [k] est:
la source
La fréquence de votre k e résultat FFT est de 2 * pi * k / N.
la source