2016-09-15 7 views
1

Ich arbeite mit einigen Beschleunigungsmesser Daten und es wurde vorgeschlagen, dass ich einige Fensterung für die Isolierung verschiedener Ereignisse in das Signal tun. Im Gegensatz zu den meisten anderen Dingen ist die Fensterung in MATLAB schlecht dokumentiert und ich hatte gehofft, dass einige einfache Beispiele (oder Vorschläge zum Lesen und Verlinken) von Windowing implementiert werden. Ich habe mich auch gefragt, warum Fenster überhaupt, anstatt nur die Daten in Abschnitte zu brechen und die einzelnen Frames zu analysieren. Vielen Dank. enter image description hereWindowing Signale in MATLAB

wie Meine Anfangsdaten sahen:

Ein Beispiel für einen Test oder ein Ereignis ist unten dargestellt oben gezeigt einzige Spitze erweitert wird.

Auch können einige vorschlagen, wie ich Fenster die erste Handlung mit MATLAB.

enter image description here

Antwort

1

Windowing ist in den Bereichen der Signalverarbeitung Theorie als Programmierung, aber es ist sehr wichtig, wenn die Ausgabe einer FFT zu verstehen, also wahrscheinlich im Wert von etwas ausführlicher erläutern.

Im Wesentlichen, wenn Sie ein Signal abschneiden (zum Beispiel in Blöcken verarbeiten), verändern Sie den Frequenzbereich auf eine ziemlich überraschende Art und Weise. Sie enden damit, alle Frequenzterme mit einer "Fenster" -Funktion zu falten (d. H. Zu verschmieren). Wenn Sie nichts anderes tun, als truncate, dann ist diese Funktion sin()/sin(). Was passiert ist, dass dies den Frequenzinhalt des ursprünglichen Signals über das gesamte Spektrum verteilt, und wenn es eine dominante Komponente gibt, dann wird alles andere damit begraben. Je kürzer die Blöcke sind, desto schlechter ist der Effekt, wenn das Fenster im Frequenzbereich dicker wird.

Die Fensterung mit geformten Fenstern, wie Hamming, Hanning oder Blackman, verändert die Frequenzbereichsantwort, wodurch das Verschmieren mehr auf das ursprüngliche Signal beschränkt wird. Der resultierende Frequenzbereich ist dadurch deutlich klarer.

Um einen Block von Daten, x zu analysieren, dann, was Sie sollten tun ist

transform=fft(x.*hanning(length(x))); 

Das Ergebnis wird sehr komplex sein, die Sie mit plot(20*log10(abs(transform)))

Für eine mathematische Analyse https://cnx.org/contents/[email protected]/Spectrum-Analysis-Using-the-Di sehen anzeigen kann

Wenn Sie eine praktische praktische Erfahrung dessen, was Windowing tut, möchten, versuchen Sie https://cnx.org/contents/[email protected]/Spectrum-Analyzer-MATLAB-Exerc

+0

Vielen Dank für detaillierte Antwort @Dave. Einige der Signale, mit denen ich arbeite, bestehen aus einer Anzahl von kurzen diskreten Ereignissen, die voneinander unabhängig sind. In diesem Fall ist es in Ordnung, das Signal in jedes einzelne Ereignis aufzuteilen und die FFT jedes Ereignisses zu berechnen. – Michael

+0

Wenn die Ereignisse kurz sind, dann müssen Sie definitiv die Daten Fenster! Eine kurze Sequenz führt zu großen Fenstern, wobei das schlimmstmögliche Verschmieren allein durch Abschneiden verursacht wird. Es ist eine einfache Sache, verschiedene Fenster auszuprobieren - ersetzen Sie einfach das "Hamming" durch etwas passenderes. Sie müssen jedoch ein wenig vorsichtig sein, je mächtiger das Fenster ist (je niedriger die Verschmierung bei Frequenzen, die weiter von der starken Spektralkomponente entfernt sind), desto breiter wird die Hauptkomponente, was bedeutet, dass die Auflösung im Frequenzbereich abfällt. Du kriegst nichts für nichts! – Dave

+0

Die Ereignisse sind kurz, aber das Signal geht zwischen den Ereignissen vollständig auf Null. So haben wir die Daten aufgezeichnet. Anstatt für jedes Ereignis oder jeden Test ein Signal aufzuzeichnen, haben wir kontinuierlich aufgezeichnet und zugelassen, dass alle Transienten vor dem nächsten Test absterben. Ich werde ein Beispiel in der ursprünglichen Frage veröffentlichen. – Michael