scipy.signal.spectrogram nfft parámetro

¿Qué significa el parámetro nfft en esta función? Consulte este enlace para obtener la documentación https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.signal.spectrogram.html

scipy.signal.spectrogram funciona dividiendo la señal en segmentos de tiempo (que se superponen parcialmente) y luego calcula el espectro de potencia de la Transformada Rápida de Fourier (FFT) de cada segmento. La longitud de estos segmentos se puede controlar mediante el argumento nperseg , que le permite ajustar la compensación entre la resolución en los dominios de frecuencia y tiempo que surge debido al principio de incertidumbre . Hacer nperseg más grande le da más resolución en el dominio de la frecuencia al costo de una menor resolución en el dominio del tiempo.

Además de variar el número de muestras que entran en cada segmento, a veces también es conveniente aplicar un relleno cero a cada segmento antes de tomar su FFT. Esto es para lo que es el argumento nfft :

nfft : int, opcional

Longitud de la FFT utilizada, si se desea una FFT rellenada con cero. Si Ninguno , la longitud FFT es nperseg . Por defecto, ninguno .

De forma predeterminada, nfft == nperseg , lo que significa que no se utilizará el relleno cero.

¿Por qué querrías aplicar el relleno cero?

  • Una razón es que esto hace que el resultado de FFT sea más largo, lo que significa que terminará con más intervalos de frecuencia y un espectrogtwig que se verá “más suave” sobre la dimensión de la frecuencia. Sin embargo, tenga en cuenta que esto en realidad no le brinda más resolución en el dominio de la frecuencia; es básicamente una forma eficiente de hacer una interpolación sincera en el resultado de la FFT (consulte aquí para obtener una explicación más detallada).
  • Desde la perspectiva del rendimiento, podría tener sentido rellenar los segmentos para que su longitud sea una potencia de 2, ya que las FFTs de radix-2 pueden ser significativamente más rápidas que los métodos más generales.