2016-03-23 17 views
0

Aufruf librosa.feature.mfcc() auf einer Audio-Datei spuckt wie so ein 2D-Array aus:Warum spuckt librosa librosa.feature.mfcc() ein 2D-Array aus?

array([[ -5.229e+02, -4.944e+02, ..., -5.229e+02, -5.229e+02], 
    [ 7.105e-15, 3.787e+01, ..., -7.105e-15, -7.105e-15], 
    ..., 
    [ 1.066e-14, -7.500e+00, ..., 1.421e-14, 1.421e-14], 
    [ 3.109e-14, -5.058e+00, ..., 2.931e-14, 2.931e-14]]) 

ist meine Frage, was sind diese? Weil ich ein 1D-Array von Koeffizienten erwartet habe, warum ist es 2D? und was sind die Dimensionen? Vielleicht ist das mein Missverständnis dessen, was ich zurückbekommen sollte, aber jede Erklärung würde geschätzt werden. Ich habe versucht, online zu schauen, aber jeder scheint zu wissen, was es ist.

+0

https://en.wikipedia.org/wiki/Mel-frequency_cepstrum - immer noch nicht geholfen, es scheint immer noch wie es sollte ein 1D-Array sein ... – canada11

+0

Ich wollte dir schicken [Doc link] (https://bmcfee.github.io/librosa/generated/librosa.feature.mfcc.html) aber jetzt sehe ich das Problem - das ist ** von ** den Links, nur ohne Erklärung, warum die Werte was sie sind sind. Das heißt, ihr Beispiel ist Zeitreihe, über eine Anzahl von Features oder was auch immer, was die 2 Dimensionen erklärt. Sind Ihre Daten keine Zeitreihen? – dwanderson

+0

Es ist eine WAV-Datei – canada11

Antwort

1

Ich habe auch auf diesem gestolpert.

Auschecken https://librosa.github.io/librosa/glossary.html speziell die Formulierung für "Rahmen".

Sie würden sich normalerweise eine Reihe von Samples vorstellen, die von links nach rechts auf der x-Achse laufen - beachten Sie jedoch, dass dies in Librosa als 'y' bezeichnet wird.

Nehmen wir an, meine Probe vorhanden ist, mit einem Fenster von 2 und Hopfen Größe 1:

[1,2,3,4,5] 

Wenn ich erwarte, dass die folgenden:

array([[1, 2], 
     [2, 3], 
     [3, 4], 
     [4, 5]]) 

Was librosa mich tatsächlich gibt, ist:

array([[1, 2, 3, 4], 
     [2, 3, 4, 5]]) 

Es scheint wegen der Bequemlichkeit für die Art und Weise zu sein, wie librosa Daten anzeigen/werfen kann.

Die einfache Art und Weise mit dem arbeiten, was Sie in der Regel in Ihrem Kopf haben würden, ist die np.array

mfccs = librosa.feature.mfcc(np.array([1,2,3,4,5])) 
# The mfccs exists down the columns, not across each row! 

array([[-353.18529412], 
     [ -9.92147635], 
     [ 1.39044844], 
     [ 19.76460942], 
     [ 25.52789074], 
     [ -18.65229483], 
     [ 17.41164986], 
     [ 32.40858638], 
     [ -13.52776281], 
     [ 8.38747316], 
     [ 23.82210792], 
     [ 16.50381765], 
     [ -23.39931177], 
     [ 40.04480991], 
     [ 7.76233177], 
     [ -2.54971281], 
     [ 4.81715362], 
     [ 36.80008536], 
     [ -9.8943455 ], 
     [ -0.57583487]]) 

mfccs.T 
# Now mffcs[0] (the first row) refers to the first mfcc! 

array([[-353.18529412, -9.92147635, 1.39044844, 19.76460942, 
      25.52789074, -18.65229483, 17.41164986, 32.40858638, 
     -13.52776281, 8.38747316, 23.82210792, 16.50381765, 
     -23.39931177, 40.04480991, 7.76233177, -2.54971281, 
      4.81715362, 36.80008536, -9.8943455 , -0.57583487]]) 

Für Anfänger zu transponieren: Was bedeutet das? Stellen Sie sich die Matrix (Array) vor, die auf einem Stück durchsichtigem Plastik gedruckt wird, dann greifen Sie nach unten links und drehen Sie die Seite um, indem Sie die untere linke Seite nach oben rechts bewegen.