J'ai un ensemble de chansons pour lesquelles j'ai extrait le STFT (Short-Time Fourier Transform) et utilisé le spectre de magnitudepour calculer le spectrogramme mel en utilisant une matrice de banc de filtres mel , donc . Je veux savoir s'il existe une méthode pour inverser ce processus, c'est-à-dire reconvertir du spectrogramme mel au spectrogramme. J'ai effectué une certaine réduction de dimensionnalité sur le spectrogramme mel, et reconstruit le spectrogramme mel à partir de dimensions inférieures. Maintenant, je veux régénérer le signal audio à partir du spectrogramme mel reconstruit, donc je suppose que d'abord reconstruire le spectrogramme puis le signal audio.
Le problème est que la matrice de la banque de filtres mel n'est pas une matrice carrée, car nous réduisons le nombre de bins de fréquence, donc l'inverse de ne peut pas être utilisé comme ceci: . Existe-t-il un moyen de générer le mappage inverse, comme une fonction de transfert inverse qui peut convertir de en ?
la source
Réponses:
La prise d'un spectrogramme d'amplitude et d'une banque de filtres Mel sont des processus avec perte. Les informations importantes nécessaires à la reconstruction de l'original auront été perdues. Vous devez donc revenir en arrière et utiliser les échantillons audio d'origine pour effectuer la reconstruction en déterminant un filtre de domaine temporel ou fréquentiel équivalent à votre réduction de dimensionnalité.
Vous pouvez faire des hypothèses sur les informations perdues, mais ces hypothèses elles-mêmes semblent généralement inexactes, artificielles et / ou robotiques. Ou vous ne pouvez utiliser qu'une entrée spécialement synthétisée, où les hypothèses seront correctes par la conception de cette entrée.
la source
Comme déjà mentionné, en général, il n'est pas possible d'effectuer exactement. Comme si vous avez une représentation 2D de la scène 3D, ex côté d'une voiture, vous ne pouvez pas en principe dire si c'est un dessin animé très fin qui ressemble à une voiture ou si c'était une photo d'une vraie voiture mais si vous supposez que personne n'a essayé de tromper vous, vous pouvez faire quelques hypothèses sur les données réelles, en effet c'est ainsi que fonctionnent les modèles génératifs d'apprentissage automatique.
En ce qui concerne la transformation inverse, puisque la plupart des filtres sont orthogonaux (leur produit intérieur est zéro), vous pouvez utiliser la transposition de la banque de filtres comme approximation de la transformation inverse, mais la mise à l'échelle des données sera erronée comme vous pourrez facilement le vérifier. Vous pouvez utiliser des statistiques sur le STFT d'origine extraites d'un grand ensemble de données ex par canal (fréquence) et normaliser le pour avoir la «bonne» échelle. Lorsqu'il s'agit de créer un spectrogramme complet à partir du signal d'amplitude uniquement, vous pouvez utiliser l'algorithme Griffin-Lin pour effectuer une approximation. Vous pouvez utiliser quelque chose comme WaveNet ou Parallel Wavenet pour le faire plus robuste, car il a été vérifié qu'il fonctionne assez bien avec le signal vocal et d'autres signaux audio.MTMx
la source
De nos jours, la chose la plus simple serait d'utiliser
librosa
pour cette tâche. Il a la fonction mel_to_stft qui fait exactement ce que vous voulez.Comme d'autres l'ont mentionné, cette reconstruction est à perte et seule une solution approximative peut être trouvée. Dans la librosa, cela se fait en utilisant l' algorithme des carrés de bail non négatifs .
Une chose à garder à l'esprit: si vous avez extrait les énergies de mél en utilisant votre propre algorithme, vous devez vous assurer que la déformation de fréquence est similaire, sinon vous vous retrouverez avec un son qui semble désharmonique (en supposant que plus tard vous voulez synthétiser le forme d'onde de la STFT). Dans la librosa, il existe deux fonctions de déformation, vous pouvez utiliser la seconde en spécifiant
htk=True
.la source