Convertendo espectrograma de mel em espectrograma

8

Eu tenho um conjunto de músicas para as quais extraí o STFT (Short-Time Fourier Transform) e usei o espectro de magnitudepara calcular o espectrograma de mel usando uma matriz de banco de filtros de mel , então . Quero saber se existe algum método para reverter esse processo, ou seja, converter do espectrograma mel de volta para o espectrograma. Realizei alguma redução de dimensionalidade no espectrograma mel e reconstruí o espectrograma mel a partir de dimensões mais baixas. Agora eu quero regenerar o sinal de áudio do espectrograma de mel reconstruído, então acho que primeiro reconstrua o espectrograma e depois o sinal de áudio.|S|MX=registro(M×|S|)

O problema é que a matriz do banco de filtros de mel não é uma matriz quadrada, uma vez que reduzimos o número de compartimentos de frequência, então inverso de não pode ser usado assim: . Então, existe alguma maneira de gerar o mapeamento inverso, como alguma função de transferência inversa que pode converter de para ?MS^=M-1exp(X)XS

user76170
fonte
Isso simplesmente não é possível, a menos que você tenha um modelo anterior muito forte de como eram suas fontes. Sem nenhuma informação prévia sobre suas fontes, existem de fato muitos espectros diferentes que podem ser "recolhidos" no mesmo conjunto de coeficientes de frequência de mel.
Pichenettes
@ pichenettes: Então, como reconstruir a música original, espero que você tenha entendido o problema. Eu tenho um espectrograma de mel e uma versão reconstruída a partir de dimensões mais baixas. Em vez de relatar que "o erro foi" em termos de números numéricos, se existe alguma maneira de "ouvir" o espectrograma de mel reconstruído, posso dizer que após a redução da dimensionalidade, retendo menos componentes e reconstruindo o mel -espectrograma, é assim que o áudio soa.
user76170
2
Simplesmente não é possível no caso geral. É como ter 5 números e perguntar como "reconstruir" os números que formam sua soma.
Pichenettes
Queremos criar um sistema de controle de voz no Matlab, mas não sabemos como podemos fazer isso. Temos dados de voz, mas como podemos colocar esses dados no Matlab. por exemplo, arquivos (eight1.mel .... eight.mel). Queremos esse reconhecimento de números em inglês em áudio no matlab. 1-Devo converter arquivos ".mel-waw"? 2-Qual posso usar códigos? Se você nos ajudar, gostaríamos de agradecer Atenciosamente

Respostas:

5

Tomar um espectrograma de magnitude e um banco de filtros Mel são processos com perdas. Informações importantes necessárias para reconstruir o original serão perdidas. Portanto, você precisa voltar e usar as amostras de áudio originais para fazer a reconstrução, determinando um filtro no domínio do tempo ou da frequência equivalente à sua redução de dimensionalidade.

Você pode fazer suposições sobre as informações perdidas, mas essas suposições geralmente soam imprecisas, artificiais e / ou robóticas. Ou você pode usar apenas entradas especialmente sintetizadas, onde as suposições serão corretas por design dessa entrada.

hotpaw2
fonte
Existe uma transformação reversa equivalente para o banco Mel fiter? Eu entendo que é um processo com perdas. e não conseguimos encontrarM-1já que M não é quadrado. No entanto, é possível pular essa etapa e executar diretamente o PCA no espectrograma de magnitude | M | ? Armazene também as informações da fase. Em seguida, reconstrua | M |, combine as informações da fase e recupere o áudio original?
precisa saber é o seguinte
1

Como já mencionado, em geral não é possível executar exatamente. Como se você tivesse uma representação 2D da cena 3D, do lado de fora de um carro, você não pode, em princípio, dizer se é um desenho muito fino que se assemelha a um carro ou se era uma foto de um carro real, mas se você assumir que ninguém tentou enganar você pode fazer algumas suposições sobre dados reais; de fato, é assim que os modelos generativos de aprendizado de máquina funcionam.

Com relação à transformação inversa, como a maioria dos filtros é ortogonal (seu produto interno é zero), você pode usar a transposição do banco de filtros como uma aproximação da transformação inversa; no entanto, a escala dos dados estará incorreta, como você facilmente verificará. Você pode usar algumas estatísticas sobre o STFT original extraído de alguns grandes conjuntos de dados, por canal (frequência) e normalizar oMTMxter a escala 'certa'. Quando se trata de criar espectrograma completo apenas a partir do sinal de magnitude, é possível usar o algoritmo Griffin-Lin para fazer alguma aproximação. Você pode usar algo como WaveNet ou Parallel Wavenet para fazer isso com mais robustez, pois foi verificado que funciona muito bem com o sinal de fala e outros sinais de áudio.

Marek G.
fonte
1

Atualmente, o mais fácil seria usar librosapara esta tarefa. Possui a função mel_to_stft que faz exatamente o que você deseja.

Como outros já mencionaram, essa reconstrução é com perdas e apenas uma solução aproximada pode ser encontrada. Na librosa, isso é feito usando o algoritmo de quadrados de concessão não negativos .

Lembre-se de que: se você extraiu as energias da mel usando seu próprio algoritmo, deve garantir que o desvio da frequência seja semelhante; caso contrário, você terminará com áudio que soa desarmônico (supondo que mais tarde você queira sintetizar o forma de onda do STFT). Na librosa existem duas funções de distorção, você pode usar a segunda especificando htk=True.

jojek
fonte