Soy un ingeniero químico, no un EE, así que esto es un poco difícil.
Estoy tratando de descubrir cómo tomar datos de amplitud vs tiempo y transformarlos en frecuencia vs tiempo. Mi primer instinto es cortar mis datos en fragmentos, realizar la FFT en cada fragmento y luego trazarlo. Desafortunadamente, a medida que la duración del tiempo de cada segmento se aproxima a cero, ya no hay suficiente información para obtener información de frecuencia precisa (las frecuencias bajas requieren más que un segmento de tiempo muy pequeño). Entonces ... ¿cómo hago esto? Estoy seguro de que este es un problema famoso que alguien ya ha resuelto.
Este es el tipo de transformación que estoy buscando, ilustrada con una onda de sonido (nota de piano G). Como puede ver, este gráfico tiene tres ejes, y el tercero está representado por color.
La resolución de tiempo frente a frecuencia es un problema bien conocido, y de hecho hay enfoques para superarlo. Para las señales de audio, algunas de las técnicas comúnmente utilizadas incluyen: métodos paramétricos; resolución adaptativa (analice con varias configuraciones de tiempo / frecuencia y junte los resultados juntos: Wen X. y M. Sandler, "Espectrograma compuesto usando múltiples transformadas de Fourier"); wavelets / descomposiciones en bases sobrecompletas; y el uso de información de fase para extraer la ubicación precisa de los picos de frecuencia (IFgram).
Sin embargo, parece que el gráfico que ha mostrado no utiliza algunas de estas técnicas; así que sospecho que esto no es lo que podrías estar buscando. Parece haber cierta "mancha" en el eje horizontal (por ejemplo, en t = 1.2s) y este es un signo seguro de que el análisis se ha realizado con una alta superposición entre los fragmentos.
De hecho, la duración del fragmento y el número de cuadros de análisis por segundo no tienen que estar vinculados entre sí si permite que los cuadros se superpongan. Entonces, si desea usar un marco de análisis de 40 ms de largo, su cuadrícula no tiene que ser:
marco 1: t = 0..t = 40ms; marco 2: t = 40ms..t = 80ms
Podría muy bien ser:
marco 1: t = 0..t = 40ms; marco 2: t = 10ms..t = 50ms
Esta superposición puede dar la ilusión de una resolución temporal más alta sin reducir demasiado el tamaño de la ventana FFT. Tenga en cuenta que esto solo puede ayudar a ubicar con precisión un evento en el eje de tiempo: no ayudará a resolver dos eventos cercanos en el tiempo ... Al igual que aumentar el tamaño de FFT podría ayudar a identificar la ubicación de un pico de frecuencia, pero no con el resolución de dos picos de frecuencia adyacentes.
¿Cómo irías a la inversa (transforma del espectrograma a la señal de audio)
Pete
4
Sí, muchas personas han trabajado en análisis de frecuencia de tiempo.
El enfoque de "cortar mis datos en fragmentos, realizar la FFT en cada fragmento" es una buena idea. La aplicación de una "función de ventana" en cada fragmento, justo antes de realizar la FFT, ayuda a evitar muchos artefactos. Permitir que los trozos se superpongan también ayuda. Después de esos ajustes, terminas con la transformación de Gabor , que parece ser la transformación de Fourier de corto tiempo más popular (STFT).
Cuando corta la serie temporal en partes muy cortas, obtiene información de tiempo muy precisa sobre cuándo comienza y se detiene un tono, pero la información de frecuencia es muy borrosa.
Cuando corta la serie temporal en partes muy largas, obtiene información de frecuencia muy precisa en cuanto a la frecuencia exacta de un tono, pero el momento exacto en que comienza y se detiene es borroso.
Este es un problema famoso, pero, por desgracia, no solo no se ha resuelto, se ha demostrado que la incertidumbre entre ambos es inevitable: el límite de Gabor, el límite de Heisenberg-Gabor, el principio de incertidumbre , etc.
Si yo fuera usted, comenzaría con una de las muchas bibliotecas comerciales para calcular la transformación de Gabor y experimentaría cortando las series de tiempo en varias longitudes. Existe una gran posibilidad de que tenga suerte y termine con algo de tiempo que le brinde una localización de tiempo adecuada y una discriminación de frecuencia adecuada .
La transformación de Gabor es solo con ventanas gaussianas. Si usa otra ventana, es solo un STFT. (Y las verdaderas ventanas gaussianas no existen en digital porque se reducen al infinito.)
endolito
@endolith: Tienes razón. La transformación de Gabor utiliza una "función de ventana gaussiana" que se trunca a una longitud finita; es bastante parecida, pero no matemáticamente idéntica a, una gaussiana ideal.
David Cary
Creo que la transformación de Gabor es una transformación continua, que usa una integral, por lo que puede tener un Gaussiano no truncado como la ventana.
endolito
@endolith: Sí, en principio, una persona podría usar un gaussiano no truncado como ventana. En la práctica, dado que prácticamente toda la energía del gaussiano se encuentra dentro de unos pocos sigma de la joroba central, el uso de una ventana truncada prácticamente no hace perceptible ninguna diferencia en el gráfico de salida. Dado que el software que produce diagramas de cascada de espectrogramas aplica repetidamente la ventana gaussiana y luego realiza una FFT para cada columna del gráfico, "no truncar" haría que ese software sea insoportablemente lento.
Sí, muchas personas han trabajado en análisis de frecuencia de tiempo.
El enfoque de "cortar mis datos en fragmentos, realizar la FFT en cada fragmento" es una buena idea. La aplicación de una "función de ventana" en cada fragmento, justo antes de realizar la FFT, ayuda a evitar muchos artefactos. Permitir que los trozos se superpongan también ayuda. Después de esos ajustes, terminas con la transformación de Gabor , que parece ser la transformación de Fourier de corto tiempo más popular (STFT).
Como ya ha señalado, y como señala el artículo de Wikipedia, todas las técnicas de transformación de Fourier a corto plazo tienen una compensación:
Este es un problema famoso, pero, por desgracia, no solo no se ha resuelto, se ha demostrado que la incertidumbre entre ambos es inevitable: el límite de Gabor, el límite de Heisenberg-Gabor, el principio de incertidumbre , etc.
Si yo fuera usted, comenzaría con una de las muchas bibliotecas comerciales para calcular la transformación de Gabor y experimentaría cortando las series de tiempo en varias longitudes. Existe una gran posibilidad de que tenga suerte y termine con algo de tiempo que le brinde una localización de tiempo adecuada y una discriminación de frecuencia adecuada .
Si eso no funciona para esta aplicación, entonces me gustaría pasar a otros enfoques para la representación tiempo-frecuencia y análisis tiempo-frecuencia - transformadas de tren de ondas, se transforma chirplet , fraccional transformada de Fourier (FRFT), etc.
EDITAR: Algunos códigos fuente para generar espectrogramas / diagramas de cascada a partir de datos de audio:
La imagen al espectrograma va en la dirección inversa de las utilidades anteriores.
fuente