Conversión de espectrograma mel a espectrograma

8

Tengo un conjunto de canciones para las cuales extraje STFT (Short-Time Fourier Transform) y utilicé el espectro de magnitud |S| para calcular el espectrograma de mel utilizando una matriz de banco de filtros de mel M, entonces X=log(M×|S|). 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 M no se puede usar así: S^=M1exp(X). Entonces, ¿hay alguna forma de generar el mapeo inverso, como alguna función de transferencia inversa que puede convertir deX a S?

usuario76170
fuente
Esto simplemente no es posible a menos que tenga un modelo previo muy sólido de cómo sonaban sus fuentes. Sin ninguna información previa sobre sus fuentes, de hecho, hay muchos espectros diferentes que pueden "colapsarse" en el mismo conjunto de coeficientes de frecuencia de mel.
pichenettes
@pichenettes: Entonces, ¿cómo reconstruir la canción original? Espero que hayas entendido el problema. Tengo un espectrograma de mel y una versión reconstruida de las dimensiones inferiores. En lugar de informar que "el error fue" en términos de cifras numéricas, si de alguna manera podría "escuchar" el espectrograma de mel reconstruido, entonces puedo decir que después de la reducción de dimensionalidad, al retener menos componentes y reconstruir el mel -Espectrograma, así es como suena el audio.
user76170
2
Simplemente no es posible en el caso general. Es como tener 5 números y preguntar cómo "reconstruir" los números para formar su suma.
pichenettes
Queremos hacer un sistema de control de voz en el matlab, pero no sabemos cómo podemos hacer esto. Tenemos datos de voz, pero ¿cómo podemos poner estos datos en el Matlab? por ejemplo, (eight1.mel .... eight.mel) archivos. Queremos este reconocimiento de números en inglés de audio en matlab. 1-¿Debo convertir los archivos ".mel-waw"? 2-¿Cuál puedo usar códigos? Si nos ayudas, agradeceríamos saludos de agradecimiento

Respuestas:

5

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.

hotpaw2
fuente
¿Existe una transformación inversa equivalente para Mel fiter bank? Entiendo que es un proceso con pérdida. y no podemos encontrarM1ya que M no es cuadrado. Sin embargo, es posible omitir ese paso y realizar directamente PCA en espectrograma de magnitud | M | ? También almacene la información de fase. Luego reconstruya | M |, combine la información de fase y recupere el audio original.
user76170
1

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 elMTMxtener 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.

Marek G.
fuente
1

Hoy en día lo más fácil sería usar librosapara 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.

jojek
fuente