matlab - ¿Qué es un espectrograma y cómo configuro sus parámetros?
signal-processing fft (1)
Estoy tratando de trazar el espectrograma de mi señal de dominio de tiempo dada:
N=5000;
phi = (rand(1,N)-0.5)*pi;
a = tan((0.5.*phi));
i = 2.*a./(1-a.^2);
plot(i);
spectrogram(i,100,1,100,1e3);
El problema es que no entiendo los parámetros y qué valores se deben dar.
Estos valores que estoy usando, me referí a la documentación en línea de
spectrogram
de MATLAB.
Soy nuevo en MATLAB y simplemente no entiendo la idea.
¡Cualquier ayuda será apreciada!
Antes de entrar en lo que hace ese comando de MATLAB, probablemente quieras saber qué es un espectrograma. De esa manera, obtendrá más significado sobre cómo funciona cada parámetro.
Un espectrograma es una representación visual de la Transformada de Fourier a corto plazo . Piense en esto como tomar fragmentos de una señal de entrada y aplicar una Transformada de Fourier local en cada fragmento. Cada fragmento tiene un ancho especificado y aplica una Transformada de Fourier a este fragmento. Debe tener en cuenta que cada fragmento tiene una distribución de frecuencia asociada. Por cada porción que se centra en un punto de tiempo específico en su señal de tiempo, obtiene un montón de componentes de frecuencia. La recopilación de todos estos componentes de frecuencia en cada fragmento y trazados todos juntos es lo que es esencialmente un espectrograma.
El espectrograma es un mapa de calor visual 2D en el que el eje horizontal representa el tiempo de la señal y el eje vertical representa el eje de frecuencia. Lo que se visualiza es una imagen donde los colores más oscuros significan que para un punto de tiempo particular y una frecuencia particular, cuanto menor es la magnitud del componente de frecuencia, más oscuro es el color. Del mismo modo, cuanto mayor es la magnitud del componente de frecuencia, más claro es el color.
Aquí hay un ejemplo perfecto de un espectrograma:
Fuente: Wikipedia
Por lo tanto, para cada punto de tiempo, vemos una distribución de componentes de frecuencia. Piense en cada columna como la descomposición de frecuencia de un fragmento centrado en este punto de tiempo. Para cada columna, vemos un espectro variable de colores. Cuanto más oscuro es el color, menor es el componente de magnitud a esa frecuencia y viceversa.
Entonces ... ahora que está armado con eso, veamos cómo funciona MATLAB en términos de la función y sus parámetros.
La forma en que llama
spectrogram
ajusta a esta versión de la función:
spectrogram(x,window,noverlap,nfft,fs)
Repasemos cada parámetro uno por uno para que pueda comprender mejor lo que hace cada uno:
-
x
: esta es la señal de entrada en el dominio del tiempo de la que desea encontrar el espectrograma. No puede ser mucho más simple que eso. En su caso, la señal de la que desea encontrar el espectrograma se define en el siguiente código:N=5000; phi = (rand(1,N)-0.5)*pi; a = tan((0.5.*phi)); i = 2.*a./(1-a.^2);
Aquí,
i
es la señal de la que desea encontrar el espectrograma. -
window
: si recuerda, descomponemos la imagen en fragmentos, y cada fragmento tiene un ancho especificado.window
define el ancho de cada fragmento en términos de muestras . Como esta es una señal de tiempo discreto, usted sabe que esta señal fue muestreada con una frecuencia de muestreo y período de muestreo en particular. Puede determinar qué tan grande es la ventana en términos de muestras de la siguiente manera:window_samples = window_time/Ts
Ts
es el tiempo de muestreo de su señal. Establecer el tamaño de la ventana es realmente muy empírico y requiere mucha experimentación. Básicamente, cuanto más grande es el tamaño de la ventana, mejor resolución de frecuencia obtienes al capturar más frecuencias, pero la localización del tiempo es pobre. Del mismo modo, cuanto menor sea el tamaño de la ventana, mejor será la localización a tiempo, pero no obtendrá una descomposición de frecuencia tan buena. No tengo ninguna sugerencia aquí sobre cuál es el tamaño más óptimo ... es por eso que se prefieren las wavelets cuando se trata de descomposición de frecuencia de tiempo. Para cada "fragmento", los fragmentos se descomponen en fragmentos más pequeños de un ancho dinámico, por lo que obtiene una combinación de buena localización de tiempo y frecuencia. -
noverlap
: otra forma de garantizar una buena localización de frecuencia es que los fragmentos se superponen . Un espectrograma adecuado asegura que cada fragmento tenga un cierto número de muestras que se superponen para cada fragmento ynoverlap
define cuántas muestras se superponen en cada ventana. El valor predeterminado es el 50% del ancho de cada fragmento. -
nfft
: básicamente estás tomando la FFT de cada fragmento.nfft
le dice cuántos puntos FFT se desean calcular por porción. El número predeterminado de puntos es el mayor de 256, ofloor(log2(N))
dondeN
es la longitud de la señal.nfft
también da una medida de cuán fina será la resolución de frecuencia. Un mayor número de puntos FFT daría una resolución de frecuencia más alta y, por lo tanto, mostraría detalles de grano fino a lo largo del eje de frecuencia del espectrograma si se visualiza. -
fs
: la frecuencia de muestreo de su señal. El valor predeterminado es 1 Hz, pero puede anular esto a la frecuencia de muestreo a la que se encuentre su señal.
Por lo tanto, lo que probablemente debería sacar de esto es que realmente no puedo decirle cómo configurar los parámetros. Todo depende de la señal que tenga, pero con suerte la explicación anterior le dará una mejor idea de cómo configurar los parámetros.
¡Buena suerte!