Estoy tratando de implementar una FFT para entender cómo funciona. Estoy usando un archivo de sonido aleatorio (así que no puedo controlar el tamaño de la señal), con una frecuencia de muestreo de 44,1Khz. Estoy usando esta biblioteca

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

El objetivo es aplicar esta fórmula a obtener la frecuencia: F = n * Fs / N

Con n número de bins. Fs frecuencia de muestreo y N tamaño de la FFT

1) Se supone que una Fft tiene una longitud, la mayoría usa una potencia de 2 radix. Pero, ¿cómo puedo saber la longitud de la FFT si la aplico a una matriz completa de datos? ¿Es el tamaño de esa matriz?

2) No entiendo los bins, ¿cómo se procesan? Sé que FFT funciona con fragmentos de datos, pero si doy un conjunto completo de datos, ¿cómo se «crean» los bins.

Comentarios

  • Estas preguntas se pueden responder con solo un poco de búsqueda y lectura en Internet. También te recomiendo que comiences tu codificación con señales de duración bastante corta y aplique su software FFT a ellas y examine los resultados.
  • Realmente busqué mucho, pero no pude ' entender, pero tal vez i ' soy demasiado lento. Gracias por tu preocupación.
  • Intenta buscar en " Discrete Fourier Transform " o " cómo funciona un DFT " en lugar de " ¿cómo funciona una FFT? ". Una Transformada Rápida de Fourier es un atajo computacional de una Trans Fourier Discreta formulario. Con la última búsqueda, es más probable que encuentre información sobre la eficiencia computacional en lugar del proceso subyacente. No ' no veo cómo se puede esperar que alguien explique los fundamentos mejor en una respuesta rápida en un foro que un montón de sitios web dedicados a hacer precisamente eso. Los primeros cuatro artículos de mi blog también deberían serle útiles. Comience con dsprelated.com/showarticle/754.php .

Respuesta

Pregunta 1

Si lo aplica en toda la longitud de la matriz, la longitud de la FFT sería la longitud de la matriz. Pero, la FFT es más eficiente si la longitud es una potencia de dos, por lo que es común colocar 0 «s en el final de la señal hasta que su longitud sea una potencia de 2.

Ejemplo demasiado simple …

x = [3.4, 2.56, 1.3]

x tiene una longitud de 3, la siguiente potencia de 2 después de 3 es 4, por lo que cambiamos x a

x = [3.4, 2.56, 1.3, 0]

y aplique una FFT con longitud 4.

Otro grande PERO! Si su señal es larga, se vuelve extremadamente ineficaz para hacer todo de una vez. No querrá intentar hacer una FFT en un archivo de audio de la duración de una canción corta. En ese caso, dividimos la señal en trozos de un tamaño razonable, ejecutamos una FFT en cada uno y promediar los resultados.

Hay buenas probabilidades de que lo que realmente desea hacer con sus datos no sea solo una FFT estándar, sino el proceso de promediado que describí anteriormente. Google Bartlett y Welch métodos para más d detalles.

Pregunta 2

No estoy 100% seguro de lo que está preguntando aquí. Voy a interpretarlo como si quisiera saber cómo se determina el ancho de los intervalos de frecuencia y cómo se ejecuta con eso.

El ancho de cada intervalo de frecuencia se determina únicamente por la velocidad a la que se muestreó la señal y la longitud de la FFT. El ancho de cada contenedor es la frecuencia de muestreo dividida por el número de muestras en su FFT.

df = fs / N

Los intervalos de frecuencia comienzan en -fs/2 y van hasta fs/2. Eso significa que si se muestrea a 100 Hz para 100 muestras, sus intervalos de frecuencia serán de ancho 1 Hz. Si toma 200 muestras, ahora tendrá el doble de intervalos de frecuencia y su ancho será de 1/2 Hz cada uno.

Comentarios

  • Muchas gracias, fue todo lo que no ' entendí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *