2016-07-06 20 views
1

Ich versuche, ein bereits vorhandenes Spektrogramm von Matlab in meinen Python-Code zu integrieren, mit Matplotlib. Wenn ich jedoch den Fensterwert eingabe, gibt es ein Problem: In Matlab ist der Wert ein Skalar, aber Matplotlib benötigt einen Vektor. Warum ist das so?Unterschied zwischen Matlab Spektrogramm und Matplotlib-Spektrum?

+1

Sie müssen Ihre Skalarwerte in Vektor für Array konvertieren. Numpy könnte Ihnen helfen, Ihr Problem zu lösen – Deadpool

Antwort

1

Die Argumente sind nur anders organisiert.

In Matplotlib wird die Fenstergröße mit dem Argument NFFT angegeben. Das Argument window hingegen ist nur für die Angabe des Fensters selbst, anstatt die Größe. Wie MATLAB akzeptiert das Argument window einen Vektor. Im Gegensatz zu MATLAB akzeptiert es jedoch auch eine Funktion, die einen Vektor mit beliebiger Länge annehmen und einen anderen Vektor derselben Größe zurückgeben soll. Dadurch können Sie Funktionen für Fenster anstelle von Vektoren verwenden.

So ist es in MATLAB Begriffe zu setzen, die MATLAB window Argument wird aufgespalten in die window und NFFT Argumente in matplotlib, während die MATLAB NFFT Argument der matplotlib pad_to Argument entspricht.

Aus dem Grund, die Fenster- und Fenstergröße unabhängig angeben können Sie eine Funktion als Argument für window verwenden (die in der Tat ist der Standardwert). Dies ist mit den MATLAB-Argumenten nicht möglich.

In Python sind Funktionen erstklassige Objekte, was in MATLAB nicht der Fall ist. Daher ist es üblich, Funktionen als Argumente für andere Funktionen in Python zu verwenden, im Vergleich zu MATLAB. In Python können Sie auch Argumente nach Namen angeben, was MATLAB jedoch nicht tut. In MATLAB ist es also viel üblicher, Argumente zu haben, die abhängig von den Eingaben verschiedene Dinge tun, während ähnliche Funktionen in Python dazu neigen, diese in mehrere unabhängige Argumente aufzuteilen.

+0

Korreliert die Fs? Ich bemerke, dass das Fs auf Matplotlib auch die x-Achse beeinflusst (das Setzen meiner Fs auf 2^-1 oder 2^-10 änderte das Bild nicht, nur die beiden Skalen) –

+0

'Fs' ist die Abtastfrequenz, die bestimmt den Abstand der Zeitpunkte und der Frequenzen. Ich wäre überrascht, wenn Fs in der MATLAB-Version * nicht sowohl die X- (Zeit) als auch die Y-Achse (Frequenz) ändern würden. – TheBlackCat

+0

Wie würde ich die niedrigeren Frequenzen vergrößern und die höheren herausschneiden? –

1

Der Wert in Matlab ist ein Skalar, da er die Größe des Fensters darstellt, und Matlab verwendet standardmäßig ein Hamming-Fenster. Das Window-Argument akzeptiert auch einen Vektor, sodass Sie jede gewünschte Fensterfunktion übergeben können.

+0

Gibt es eine Möglichkeit, Fenstergröße in Matplotlib anzugeben? –

+0

@JoeBernstein: Wie ich in meiner Antwort gesagt habe, benutze das Argument 'NFFT'. – TheBlackCat

+0

@JoeBernstein, ja wie @TheBlackCat sagte, könnten Sie das 'NFFT' Argument verwenden. Außerdem verwendet 'matplotlib' einen Standardwert für das Hann-Fenster. Wenn Sie also nichts an dieses Argument übergeben, werden Ihre Daten vor der Analyse mit einem Hann-Fenster multipliziert. Wenn Sie das ändern möchten, können Sie die integrierten Funktionen verwenden, die Fenster in der gleichen Größe Ihrer Eingabedaten erstellen. Hier finden Sie weitere Informationen: http://matplotlib.org/api/mlab_api.html#matplotlib.mlab.specgram – nevos