J'ai un ensemble de chansons pour lesquelles j'ai extrait le spectrogramme de magnitude à l'aide d'une fenêtre de Hamming avec un chevauchement de 50%. Après avoir extrait le spectrogramme, j'ai fait une certaine réduction de dimensionnalité en utilisant l'analyse des composants principaux (PCA). Après l'avoir réduit à une dimensionnalité inférieure, j'ai reconstruit les spectrogrammes à partir de dimensions inférieures. Alors maintenant, il y aurait une erreur entre le spectrogramme original et le spectrogramme reconstruit. Je voudrais reconvertir ce spectrogramme en signal audio et le lire, afin de pouvoir savoir une fois reconstruit à partir de dimensions inférieures, comment son audio.
Existe-t-il une fonction disponible dans, disons Matlab. convertir un spectrogramme de magnitude en un signal audio ??
la source
Réponses:
Si le spectrogramme a été calculé comme l'amplitude des transformations de Fourrier à court terme à partir de fenêtres qui se chevauchent , alors le spectrogramme contient implicitement des informations de phase.
Les itérations suivantes font le travail:
est le spectrogramme, stft est la transformée de Fourier à temps court vers l'avant, isft est la transformée de Fourier à temps court inverse.S stft isft
la source
J'ai eu un peu de mal à comprendre la réponse de @edouard, qui fait la bonne chose. Comparez avec /signals//a/3410/9031 , que j'ai utilisé pour implémenter ma reconstruction.
la source
Vous pouvez utiliser le spectrogramme reconstruit par rapport au spectrogramme d'origine pour concevoir un filtre dont la réponse en amplitude transforme un spectrogramme en un autre. Vous pouvez ensuite appliquer ce filtre aux données du domaine temporel d'origine, ou aux FFT d'origine pour un filtrage à convolution rapide d'ajout / enregistrement de chevauchement.
la source
Utilisez l'algorithme Griffin-Lim pour inverser le signal audio du spectrogramme, si vous n'êtes pas préoccupé par la complexité du calcul.
la source