Eu tenho um conjunto de músicas para as quais extraí o espectrograma de magnitude usando uma Hamming Window com sobreposição de 50%. Após extrair o espectrograma, reduzi a dimensionalidade usando a Análise de Componentes Principais (PCA). Depois de reduzi-lo à menor dimensionalidade, reconstruí os espectrogramas de dimensões mais baixas. Então agora, haveria algum erro entre o espectrograma original e o espectrograma reconstruído. Gostaria de converter esse espectrograma novamente no sinal de áudio e reproduzi-lo, para que eu pudesse saber, quando reconstruído de dimensões mais baixas, como o áudio soa.
Existe alguma função disponível no Matlab, por exemplo. converter um espectrograma de magnitude em um sinal de áudio?
audio
spectrogram
ifft
user76170
fonte
fonte
Respostas:
Se o espectrograma foi calculado como a magnitude do intervalo de tempo curto transforma-se a partir de janelas sobrepostas , o espectrograma contém implicitamente algumas informações de fase.
As seguintes iterações fazem o trabalho:
stft isftS é o espectrograma, é a transformação de Fourier com tempo de avanço curto, é a transformação de Fourier de tempo inverso-curto.stft isft
fonte
Foi difícil entender a resposta de @edouard, que está fazendo a coisa certa. Compare com /signals//a/3410/9031 , que eu usei para implementar minha reconstrução.
Observe que é o número imaginário e é o sinal reconstruído na iteração . Comece com sendo um vetor aleatório de comprimento do sinal de áudio. Para mim, algumas iterações foram suficientes para obter um resultado que parecia bom. O erro absoluto no sinal original foi, no entanto, bastante alto. Também o espectrograma gerado I gerado a partir do sinal reconstruído, apesar de mostrar as mesmas estruturas em geral, tinha magnitudes bastante diferentes.x n n th x 0Eu xn nth x0
fonte
Você pode usar o espectrograma reconstruído versus o espectrograma original para projetar um filtro cuja resposta de magnitude transforma um espectrograma no outro. Em seguida, você pode aplicar esse filtro aos dados originais no domínio do tempo ou às FFTs originais para sobrepor adicionar / salvar uma filtragem rápida de convolução.
fonte
Use o algoritmo Griffin-Lim para inverter o sinal de áudio do espectrograma, se você não estiver preocupado com a complexidade da computação.
fonte