Tengo un conjunto de canciones para las cuales extraje STFT (Short-Time Fourier Transform) y utilicé el espectro de magnitud para calcular el espectrograma de mel utilizando una matriz de banco de filtros de mel , entonces . Quiero saber si hay algún método para revertir este proceso, es decir, convertir del espectrograma mel nuevamente al espectrograma. Realicé una reducción de dimensionalidad en el espectrograma de mel y reconstruí el espectrograma de mel de dimensiones más bajas. Ahora quiero regenerar la señal de audio del espectrograma reconstruido, así que supongo que primero reconstruir el espectrograma y luego la señal de audio.
El problema es que la matriz del banco de filtros de mel no es una matriz cuadrada, ya que reducimos el no de los contenedores de frecuencia, por lo que es inverso no se puede usar así: . Entonces, ¿hay alguna forma de generar el mapeo inverso, como alguna función de transferencia inversa que puede convertir de a ?
fuente
Respuestas:
Tanto tomar un espectrograma de magnitud como un banco de filtros Mel son procesos con pérdidas. Se habrá perdido información importante necesaria para reconstruir el original. Por lo tanto, debe regresar y utilizar las muestras de audio originales para realizar la reconstrucción determinando un filtro de dominio de tiempo o frecuencia equivalente a su reducción de dimensionalidad.
Puede hacer suposiciones sobre la información perdida, pero esas suposiciones generalmente suenan inexactas, artificiales y / o robóticas. O puede usar solo entradas especialmente sintetizadas, donde los supuestos serán correctos por diseño de esa entrada.
fuente
Como ya se mencionó, en general no es posible realizar exactamente. Al igual que si tiene una representación en 2D de una escena en 3D, por fuera del automóvil, en principio no puede decir si es una caricatura muy delgada que se parece a un automóvil o si fue una foto de un automóvil real, pero si supone que nadie ha intentado engañar usted, puede hacer algunas suposiciones sobre datos reales, de hecho así es como funcionan los modelos generativos de aprendizaje automático.
Con respecto a la transformación inversa, dado que la mayoría de los filtros son ortogonales (su producto interno es cero), puede usar la transposición del banco de filtros como una aproximación de la transformación inversa, sin embargo, el escalado de los datos será incorrecto, ya que podrá verificarlo fácilmente. Puede usar algunas estadísticas sobre STFT original extraído de algunos conjuntos de datos grandes, por canal (frecuencia) y normalizar elMTMx tener la escala 'correcta'. Cuando se trata de crear un espectrograma completo solo a partir de la señal de magnitud, puede usar el algoritmo Griffin-Lin para hacer una aproximación. Puede usar algo como WaveNet o Parallel Wavenet para hacerlo de manera más sólida, ya que se ha comprobado que funciona bastante bien con la señal de voz y otras señales de audio.
fuente
Hoy en día lo más fácil sería usar
librosa
para esta tarea. Tiene la función mel_to_stft que hace exactamente lo que quieres.Como otros han mencionado, esta reconstrucción es con pérdidas y solo se puede encontrar una solución aproximada. En librosa se realiza utilizando el algoritmo de cuadrados de arrendamiento no negativos .
Una cosa a tener en cuenta: si ha extraído las energías mel utilizando su propio algoritmo, debe asegurarse de que la deformación de frecuencia sea similar, de lo contrario, terminará con un audio que suena desarmónico (suponiendo que más adelante desee sintetizar el forma de onda del STFT). En librosa hay dos funciones de deformación, puede usar la segunda especificando
htk=True
.fuente