2015-03-28 13 views
5

Ich versuche, das Spektrogramm meines Zeitbereichssignals zu plotten gegeben:Was ist ein Spektrogramm und wie stelle ich seine Parameter ein?

N=5000; 
phi = (rand(1,N)-0.5)*pi; 
a = tan((0.5.*phi)); 
i = 2.*a./(1-a.^2); 
plot(i); 
spectrogram(i,100,1,100,1e3); 

Das Problem ist, ich verstehe nicht, die Parameter und welche Werte gegeben werden soll. Diese Werte, die ich verwende, bezog ich auf die Online-Dokumentation von MATLAB spectrogram. Ich bin neu bei MATLAB, und ich bekomme einfach nicht die Idee. Jede Hilfe wird sehr geschätzt!

+1

Haben Sie die Hilfe überprüft? http://www.mathworks.com/help/signal/ref/spectrogram.html;jsessionid=204fc52302b5fd3f2f47972b67b1 – NKN

Antwort

12

Bevor wir uns dem eigentlichen MATLAB-Befehl zuwenden, wollen Sie wahrscheinlich wissen, was ein Spektrogramm ist. Auf diese Weise erhalten Sie mehr Bedeutung für die Funktionsweise der einzelnen Parameter.

Ein Spektrogramm ist eine visuelle Darstellung des Short-Time Fourier Transform. Stellen Sie sich vor, Sie nehmen Chunks eines Eingangssignals und wenden eine lokale Fourier-Transformation auf jeden Chunk an. Jeder Chunk hat eine bestimmte Breite und Sie wenden eine Fourier-Transformation auf diesen Chunk an. Sie sollten beachten, dass jedem Chunk eine Häufigkeitsverteilung zugeordnet ist. Für jeden Chunk, der zu einem bestimmten Zeitpunkt in Ihrem Zeitsignal zentriert ist, erhalten Sie eine Reihe von Frequenzkomponenten. Die Sammlung all dieser Frequenzkomponenten bei jedem Block und alle zusammen aufgetragen ist im wesentlichen ein Spektrogramm.

Das Spektrogramm ist eine 2D-Karte, in der die horizontale Achse die Zeit des Signals und die vertikale Achse die Frequenzachse darstellt. Was visualisiert wird, ist ein Bild, bei dem dunklere Farben bedeuten, dass für einen bestimmten Zeitpunkt und eine bestimmte Frequenz, je niedriger der Betrag der Frequenzkomponente ist, desto dunkler die Farbe ist. In ähnlicher Weise gilt, je höher die Frequenzkomponente ist, desto heller ist die Farbe.

Hier ist ein perfektes Beispiel für ein Spektrogramm:

Quelle: Wikipedia

daher für jeden Zeitpunkt, wir eine Verteilung der Frequenzkomponenten zu sehen. Stellen Sie sich jede Spalte als die Frequenzzerlegung eines Chunks vor, der zu diesem Zeitpunkt zentriert ist. Für jede Spalte sehen wir ein variierendes Spektrum von Farben. Je dunkler die Farbe ist, desto niedriger ist die Amplitudenkomponente bei dieser Frequenz und umgekehrt.


So! ... jetzt bist du mit, dass bewaffnet, gehen wir darüber, wie MATLAB arbeitet im Hinblick auf die Funktion und deren Parameter. Die Art und Weisen Sie spectrogram fordern entspricht diese Version der Funktion:

spectrogram(x,window,noverlap,nfft,fs) 

die durch jeden Parameter einzeln gehen lassen, so dass Sie ein besseres Verständnis von dem, was jeder tut:

  • x - Dies ist das Eingangs-Zeitbereichssignal, nach dem Sie das Spektrogramm suchen möchten. Es kann nicht viel einfacher als das sein. In Ihrem Fall mögen das Signal, das Sie das Spektrogramm finden, in dem folgenden Code definiert:

    N=5000; 
    phi = (rand(1,N)-0.5)*pi; 
    a = tan((0.5.*phi)); 
    i = 2.*a./(1-a.^2); 
    

    Hier i ist das Signal, das Sie das Spektrogramm finden mögen.

  • window - Wenn Sie sich erinnern, zerlegen wir das Bild in Chunks und jeder Chunk hat eine bestimmte Breite.window definiert die Breite jedes Stücks in Bezug auf Proben. Da es sich um ein zeitdiskretes Signal handelt, wissen Sie, dass dieses Signal mit einer bestimmten Abtastfrequenz und Abtastperiode abgetastet wurde. Sie können bestimmen, wie groß das Fenster in Bezug auf die Proben ist durch:

    window_samples = window_time/Ts

    Ts ist die Abtastzeit des Signals. Das Einstellen der Fenstergröße ist eigentlich sehr empirisch und erfordert viel Experimentieren. Grundsätzlich gilt: Je größer die Fenstergröße, desto besser ist die Frequenzauflösung, wenn Sie mehr Frequenzen erfassen, aber die Zeitlokalisierung ist schlecht. Je kleiner die Fenstergröße ist, desto besser ist die zeitliche Lokalisierung, aber eine Frequenzzerlegung ist nicht besonders gut. Ich habe hier keine Vorschläge, was die optimale Größe ist ... weshalb wavelets bevorzugt sind, wenn es um Zeit-Frequenz-Zerlegung geht. Für jeden "Chunk" werden die Chunks in kleinere Chunks mit einer dynamischen Breite zerlegt, so dass Sie eine Mischung aus guter Zeit und Frequenzlokalisierung erhalten.

  • noverlap - Eine weitere Möglichkeit zur Gewährleistung einer guten Frequenzlokalisierung besteht darin, dass die Chunks sich überlappen. Ein geeignetes Spektrogramm stellt sicher, dass jeder Chunk eine bestimmte Anzahl von Samples hat, die sich für jeden Chunk überlappen, und noverlap definiert, wie viele Samples in jedem Fenster überlappt werden. Der Standardwert ist 50% der Breite jedes Chunks.

  • nfft - Sie nehmen im Wesentlichen die FFT von jedem Stück. nfft teilt Ihnen mit, wie viele FFT-Punkte pro Chunk berechnet werden sollen. Die Standardanzahl von Punkten ist die größte von 256 oder floor(log2(N)), wobei N die Länge des Signals ist. nfft gibt auch ein Maß dafür, wie feinkörnig die Frequenzauflösung sein wird. Eine höhere Anzahl von FFT-Punkten würde eine höhere Frequenzauflösung ergeben und somit feinkörnige Details entlang der Frequenzachse des Spektrogramms anzeigen, wenn diese visualisiert werden.

  • fs - Die Abtastfrequenz Ihres Signals. Der Standardwert ist 1 Hz, aber Sie können dies auf die Abtastfrequenz Ihres Signals überschreiben.


Deshalb, was Sie wahrscheinlich aus diesem nehmen sollte, ist, dass ich nicht wirklich sagen kann, wie man die Parameter einzustellen. Es hängt alles davon ab, welches Signal Sie haben, aber hoffentlich gibt Ihnen die obige Erklärung eine bessere Vorstellung von wie, um die Parameter einzustellen.


Viel Glück!

+0

Dies ist eine gute Antwort. Ich würde nur hinzufügen, dass "nfft" gibt ein Maß dafür, wie feinkörnig die Frequenzauflösung sein wird. Eine höhere Anzahl von FFT-Punkten würde eine höhere Frequenzauflösung ergeben und feinkörnige Details entlang der Frequenzachse des Spektrogramms anzeigen, wenn sie visualisiert werden. – AruniRC

+0

@AruniRC Das ist sehr wahr. Ich lege das rein. Danke! – rayryeng