Ich habe online gelesen, aber ich kann einfach nicht alles zusammenfügen. Ich habe einige Hintergrundkenntnisse über Signale / DSP-Inhalte, die dafür ausreichen sollten. Ich bin daran interessiert, diesen Algorithmus irgendwann in Java zu codieren, aber ich verstehe ihn noch nicht vollständig. Deshalb bin ich hier (es zählt als Mathematik, oder?).
Hier ist, wie ich denke, es funktioniert zusammen mit den Lücken in meinem Wissen.
Beginnen Sie mit Ihrem Audio-Sprachbeispiel, beispielsweise einer WAV-Datei, die Sie in ein Array einlesen können. Nenne dieses Array , wobei n von 0 , 1 , … , N - 1 reicht (also N Abtastwerte). Die Werte entsprechen der Audiointensität - Amplituden.
Teilen Sie das Audiosignal in verschiedene "Frames" von etwa 10 ms auf, wobei Sie davon ausgehen, dass das Sprachsignal "stationär" ist. Dies ist eine Form der Quantisierung. Wenn Ihre Abtastrate also 44,1 kHz beträgt, entsprechen 10 ms 441 Abtastwerten oder Werten von .
Führe eine Fourier-Transformation durch (FFT zur Berechnung). Wird dies nun für das gesamte Signal oder für jeden einzelnen Frame von ? Ich denke, es gibt einen Unterschied, weil die Fourier-Transformation im Allgemeinen alle Elemente eines Signals betrachtet, also F ( x [ n ] ) ≠ F ( x 1 [ n ] ) verbunden mit F ( x 2 [ n ] ) verbunden mit … F ( x N [ n ] ) wobei x sind die kleineren Frames. Wie auch immer, sagen wir, wir machen etwas FFT und haben am Ende X [ k ] für den Rest .
Zuordnung zur Mel-Skala und Protokollierung. Ich weiß, wie man reguläre Frequenzzahlen auf die Mel-Skala umrechnet. Für jedes von X [ k ] (die "x-Achse", wenn Sie es zulassen) können Sie die Formel hier ausführen : http://en.wikipedia.org/wiki/Mel_scale . Aber wie steht es mit den "y-Werten" oder den Amplituden von X [ k ] ? Bleiben sie nur die gleichen Werte, werden aber an die entsprechenden Stellen auf der neuen Mel (x-) Achse verschoben? Ich habe in einem Papier gesehen, dass es etwas über das Aufzeichnen der tatsächlichen Werte von X [ k ] gibt, denn dann ist X [ k ] = A ] ∗ Wenn angenommen wird, dass eines dieser Signale unerwünschtes Rauschen ist, wandelt die logarithmische Operation dieser Gleichung das multiplikative Rauschen in additives Rauschen um, das hoffentlich gefiltert werden kann (?).
Nun ist der letzte Schritt, ein DCT von Ihrem modifizierten von oben zu nehmen (es wurde jedoch modifiziert). Dann nehmen Sie die Amplituden dieses Endergebnisses und das sind Ihre MFCCs. Ich habe etwas über das Wegwerfen von Hochfrequenzwerten gelesen.
Also versuche ich wirklich, Schritt für Schritt herauszufinden, wie man diese Typen berechnet, und offensichtlich entziehen sich mir einige Dinge von oben.
Außerdem habe ich von der Verwendung von "Filterbänken" gehört (im Grunde genommen ein Array von Bandpassfiltern) und weiß nicht, ob es sich dabei um das Erstellen von Frames aus dem Originalsignal handelt, oder ob Sie die Frames nach der FFT erstellen?
Zuletzt habe ich etwas an MFCCs mit 13 Koeffizienten gesehen?