Conversion du spectrogramme mel en spectrogramme

8

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.|S|MX=log(M×|S|)

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 ?MS^=M1exp(X)XS

user76170
la source
Ce n'est tout simplement pas possible à moins d'avoir un modèle antérieur très solide de ce à quoi ressemblaient vos sources. Sans aucune information préalable sur vos sources, il existe en effet de nombreux spectres différents qui peuvent être "regroupés" dans le même ensemble de coefficients de fréquence de mel.
pichenettes
@pichenettes: Alors comment reconstruire la chanson originale, j'espère que vous avez compris le problème. J'ai un mel-spectrogramme, et une version reconstruite à partir de dimensions inférieures. Au lieu de rapporter que "l'erreur était" en termes de chiffres numériques, s'il y a un moyen "d'entendre" en quelque sorte le spectrogramme de mel reconstruit, alors je peux dire qu'après la réduction de dimensionnalité, en conservant moins de composants et en reconstruisant le mel -spectrogramme, voici comment sonne.
user76170
2
Ce n'est tout simplement pas possible dans le cas général. C'est comme avoir 5 nombres et demander comment «reconstruire» les nombres à partir de leur somme.
pichenettes
Nous voulons faire un système de contrôle vocal sur le matlab mais nous ne savons pas comment nous pouvons le faire. Nous avons des données vocales mais comment pouvons-nous mettre ces données dans le Matlab. par exemple (eight1.mel .... eight.mel). Nous voulons cette reconnaissance audio des nombres en anglais dans matlab. 1-Dois-je convertir des fichiers ".mel-waw"? 2-Qui puis-je utiliser des codes? Si vous nous aidez, nous vous serions reconnaissants. Cordialement

Réponses:

5

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.

hotpaw2
la source
Existe-t-il une transformation inverse équivalente pour la banque Mel Fiter? Je comprends que c'est un processus avec perte. et nous ne pouvons pas trouver puisque M n'est pas carré. Cependant, est-il possible de sauter cette étape et d'effectuer directement l'ACP sur le spectrogramme de magnitude | M | ? Stockez également les informations de phase. Ensuite, reconstruisez | M |, combinez les informations de phase et récupérez l'audio d'origine? M1
user76170
1

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

Marek G.
la source
1

De nos jours, la chose la plus simple serait d'utiliser librosapour 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.

jojek
la source