Tengo un resultado FFT. Estos se almacenan en dos double
matrices: una matriz de parte real y una matriz de parte imaginaria. ¿Cómo determino las frecuencias que corresponden a cada elemento en estas matrices?
En otras palabras, me gustaría crear una matriz que almacene las frecuencias para cada componente real e imaginario de mi FFT.
c#
signal-processing
fft
Rango
fuente
fuente
Respuestas:
El primer contenedor en el FFT es DC (0 Hz), el segundo contenedor es
Fs / N
, dondeFs
está la frecuencia de muestreo yN
es el tamaño del FFT. El siguiente contenedor es2 * Fs / N
. Para expresar esto en términos generales, el enésimo bin esn * Fs / N
.Entonces, si su frecuencia de muestreo,
Fs
es decir 44.1 kHz y su tamaño FFT,N
es 1024, entonces los contenedores de salida FFT están en:Tenga en cuenta que para una señal de entrada real (partes imaginarias todas cero), la segunda mitad de la FFT (contenedores desde
N / 2 + 1
hastaN - 1
) no contiene información adicional útil (tienen una simetría conjugada compleja con los primerosN / 2 - 1
contenedores). El último bin útil (para aplicaciones prácticas) está enN / 2 - 1
, que corresponde a 22006.9 Hz en el ejemplo anterior. El bin enN / 2
representa la energía en la frecuencia de Nyquist, es decirFs / 2
(= 22050 Hz en este ejemplo), pero en general no tiene ningún uso práctico, ya que los filtros anti-aliasing normalmente atenuarán cualquier señal en y por encimaFs / 2
.fuente
Mira mi respuesta aquí .
Respuesta para comentar:
La FFT en realidad calcula la correlación cruzada de la señal de entrada con funciones seno y coseno (funciones básicas) en un rango de frecuencias igualmente espaciadas. Para una salida FFT dada, hay una frecuencia correspondiente (F) dada por la respuesta que publiqué. La parte real de la muestra de salida es la correlación cruzada de la señal de entrada con
cos(2*pi*F*t)
y la parte imaginaria es la correlación cruzada de la señal de entrada consin(2*pi*F*t)
. La razón por la cual la señal de entrada está correlacionadasin
ycos
funciona es para tener en cuenta las diferencias de fase entre la señal de entrada y las funciones básicas.Al tomar la magnitud de la salida FFT compleja, obtiene una medida de qué tan bien se correlaciona la señal de entrada con las sinusoides en un conjunto de frecuencias, independientemente de la fase de la señal de entrada. Si solo está analizando el contenido de frecuencia de una señal, casi siempre tomará la magnitud o magnitud al cuadrado de la salida compleja de la FFT.
fuente
He usado lo siguiente:
Las entradas son:
i
: Bin para accedersamples
: Frecuencia de muestreo en hercios (es decir, 8000 Hz, 44100 Hz, etc.)nFFT
: Tamaño del vector FFTfuente
samples
onFFT
. Así que por favor hazlo más explicativo.i * samples / nFFT
. ¿Por qué está el extra2
allí? ¿Me estoy perdiendo de algo?Los coeficientes de salida FFT (para entradas complejas de tamaño N) son de 0 a N - 1 agrupados como frecuencia [LOW, MID, HI, HI, MID, LOW].
Consideraría que el elemento en k tiene la misma frecuencia que el elemento en Nk ya que para datos reales, FFT [Nk] = conjugado complejo de FFT [k].
El orden de escaneo de BAJA a ALTA frecuencia es
Hay [N / 2] +1 grupos de frecuencia desde el índice i = 0 a [N / 2], cada uno con el
frequency = i * SamplingFrequency / N
Entonces la frecuencia en el bin FFT [k] es:
fuente
La frecuencia de su k ésimo resultado FFT es 2 * pi * k / N.
fuente