MFCC-Merkmalsextraktion

7

Ich habe einen Audioblock und habe eine FFT darauf durchgeführt. Jetzt möchte ich diese FFT in eine Reihe von MFCCs konvertieren. Obwohl ich weiß, dass ich etwas mit der Gewichtung der FFT-Samples basierend auf einer Reihe von Dreiecksfiltern tun muss, habe ich keine wirkliche Ahnung, worum es geht.

Kann jemand etwas ins Detail gehen? Wenn Sie mir ein Matlab-Beispiel geben möchten, erklären Sie bitte jeden Schritt gut, da Sie mit Matlab einige Ecken abschneiden können und ich versuche, die MFCC-Extraktion auf dem iPhone zu implementieren.

Goz
quelle

Antworten:

11

Es gibt eine Menge Literatur zu MFCCs im Internet, daher wäre es etwas einfacher, wenn Sie genauer wissen könnten, welchen Teil der Verarbeitung Sie nicht verstehen. Aber ich gebe einen Überblick darüber, was zu tun ist, in der Hoffnung, dass dies für Sie hilfreich ist:

  1. Berechnen Sie die quadratischen Größen der FFT-Bins
  2. Wiegen Sie die Behälter mit dreieckigen Fenstern. Normalerweise werden die Fenster so gewählt, dass die Zentren der Dreiecke auf einer Mel-Frequenzskala gleich weit voneinander entfernt sind und dass jedes Dreieck an den Zentren der beiden benachbarten Dreiecke beginnt und endet. Die Mel-Frequenzskala ist definiert durch
    m=2595log10(1+f/700)
    wo fist die Frequenz in Hz. Schauen Sie sich die Abbildung an, um zu sehen, wie es funktioniert: Geben Sie hier die Bildbeschreibung ein Beachten Sie, dass die Kernel so normalisiert sind, dass die Summe der Gewichte pro Dreieck gleich 1 ist. Normalerweise werden etwa 20 solcher dreieckigen Fenster verwendet.
  3. Nehmen Sie den Logarithmus der gewichteten Koeffizienten.
  4. Berechnen Sie die DCT.
Matt L.
quelle
Prost Matt, ich habe das alles gelesen, aber wo ich hinfalle, ist "Wiege die Mülleimer mit dreieckigen Fenstern". Ich habe keine Ahnung, was das genau bedeutet. Sollte ich einen Satz Behälter nehmen und dann jeden Behälter abhängig von diesem dreieckigen "Fenster" gewichten und dann alle zusammen addieren und das einen "Behälter" nennen? (Dies ist meine beste Vermutung). Wenn ja, wie berechne ich das dreieckige Fenster? Die Mel-Frequenzgleichung, die Sie gepostet haben ... Ich verstehe nicht, wie sich mehrere Frequenzen auf einen Mel "Bin" beziehen können ... Weitere Informationen zu diesem speziellen Schritt wären sehr dankbar! :)
Goz
Sie haben Recht mit den Fenstern: Sie berechnen gewichtete Summen Ihrer FFT-Behälter. Die Gewichte sind die Einzelwerte der Dreiecksfunktionen. Die Mel-Skala dient nur zum Zentrieren der Dreiecke. Wählen Sie zB 20 äquidistante Punkte auf der Mel-Skala und transformieren Sie über die Formel zurück zu Hertz, um die Mittenfrequenzen in Hz zu erhalten. Natürlich müssen Sie das Ergebnis runden, um die Werte mit gültigen FFT-Bins abzugleichen.
Matt L.
Prost, dass die Zentrierung des Behälterteils Sinn macht. Aber wie gewichte ich dreieckig (schlechte Wortwahl, aber es ist großartig zu versuchen und zu sagen;)) die Fenster? dh wie breit sollten sie sein? Auch warum dreieckig und nicht irgendein anderer Fenstertyp? Gauß vielleicht?
Goz
Abgesehen davon (und sollte möglicherweise in anderen Fragen gestellt werden), warum berechnen Sie MFCCs (ohne Berücksichtigung der Gewichtung) so anders als ein Cepstrum? dh warum die DCT und nicht inverse FFT?
Goz
Nun, Sie wiegen nicht die Fenster, sondern die FFT-Behälter. Einfaches Beispiel: Dreieck mit den Werten 1,2,1, sodass Ihre gewichtete Ausgabe für dieses Dreieck 1 * (erstes FFT-Fach) + 2 * (zweites FFT-Fach) + 3 * (drittes FFT-Fach) beträgt. Warum Dreieck eine gute Frage ist, ist nur die Standardmethode. Probieren Sie andere aus, wenn Sie möchten, aber ich bezweifle, dass Sie erheblich bessere Ergebnisse erzielen.
Matt L.