Erstellt am Mittwoch, den 08. Oktober 2008 um 20 04 Letzte Aktualisierung am Donnerstag, den 14. März 2013 01 29 Geschrieben von Batuhan Osmanoglu Hits 41574.Moving Average In Matlab. Often Ich finde mich in der Notwendigkeit der Mittelung der Daten, die ich habe, um das Rauschen ein wenig zu reduzieren Ich schrieb paar Funktionen, um genau das zu tun, was ich will, aber Matlab s eingebaute Filterfunktion funktioniert auch ziemlich gut Hier lyrics ich über 1D und 2D Mittelwertbildung von data.1D Filter kann mit der Filterfunktion realisiert werden Die Filterfunktion benötigt mindestens Drei Eingabeparameter der Zählerkoeffizient für den Filter b, den Nennerkoeffizienten für den Filter a und die Daten X natürlich. Ein laufender Durchschnittsfilter kann einfach durch. Für 2D Daten definiert werden, können wir die Matlab s filter2 Funktion verwenden Für weitere Informationen Auf, wie der Filter funktioniert, können Sie type. Here ist eine schnelle und schmutzige Implementierung eines 16 von 16 gleitenden durchschnittlichen Filter Zuerst müssen wir den Filter definieren Da alles, was wir wollen, gleicher Beitrag aller Nachbarn ist, können wir einfach die Spaß machen Ction Wir teilen alles mit 256 16 16 ab, da wir nicht die allgemeine Amplitude des Signals ändern wollen. Um den Filter anzuwenden, können wir einfach folgendes sagen. Below sind die Ergebnisse für die Phase eines SAR-Interferogramms In diesem Fall ist Range in Y-Achse und Azimut ist auf X-Achse abgebildet Der Filter war 4 Pixel breit im Bereich und 16 Pixel breit in Azimut. Download movAv m siehe auch movAv2 - eine aktualisierte Version, die Gewichtung erlaubt. Description Matlab enthält Funktionen namens movavg und tsmovavg Zeitreihen gleitenden Durchschnitt In der Financial Toolbox ist movAv entworfen, um die grundlegende Funktionalität dieser zu replizieren Der Code hier bietet ein schönes Beispiel für die Verwaltung von Indizes innerhalb von Schleifen, die verwirrend sein können, um mit I ve bewusst gehalten den Code kurz und einfach, um diesen Prozess klar zu halten. MovAv führt einen einfachen gleitenden Durchschnitt durch, der verwendet werden kann, um in manchen Situationen geräuschvolle Daten wiederherzustellen. Es funktioniert, indem man den Mittelwert der Eingabe y über ein Schiebezeitfenster nimmt, dessen Größe durch n angegeben ist Je größer n ist, desto größer ist die Größe der Glättung der Wirkung von n ist relativ zu der Länge des Eingangsvektors y und effektiv gut, Art von schafft ein Tiefpass-Frequenz-Filter - siehe die Beispiele und Überlegungen Abschnitt. Weil die Menge der Glättung zur Verfügung gestellt Durch jeden Wert von n ist relativ zu der Länge des Eingangsvektors, es ist immer wert, verschiedene Werte zu testen, um zu sehen, was passend ist Denken Sie auch daran, dass n Punkte in jedem Durchschnitt verloren gehen, wenn n 100 ist, die ersten 99 Punkte des Eingangsvektors Don t enthalten genügend Daten für ein 100pt-Durchschnitt Dies kann durch Stapeln von Durchschnittswerten etwas vermieden werden, zum Beispiel der Code und die Grafik unten vergleichen eine Anzahl von verschiedenen Längen-Fenster-Mitteln, wie glatt 10 10pt mit einem einzigen 20pt-Durchschnitt verglichen wird In beiden Fällen 20 Datenpunkte gehen insgesamt verloren. Erstellen Sie xaxis x 1 0 01 5 erzeugen Rauschen Rauschen 4 Rauschen repmat randn 1, ceil numel x noiseReps, noiseReps, 1 Rauschen Reshape Rauschen, 1, Lärm Lärm Raps erzeugen ydata Rauschen y exp x 10 Rauschen 1 Länge x Perfrom Mittelwerte y2 movAv y, 10 10 pt y3 movAv y2, 10 10 10 pt y4 movAv y, 20 20 pt y5 movAv y, 40 40 pt y6 movAv y, 100 100 pt Plot Abbildung Plot x, y, y2, y3, y4, y5, y6 Legende Raw Daten, 10pt gleitender Durchschnitt, 10 10pt, 20pt, 40pt, 100pt xlabel x ylabel y title Vergleich der bewegten Durchschnitte. movAv m Code Durchlauffunktion Ausgang movAv y, n Die erste Zeile definiert die Funktion s Name, Ein - und Ausgänge Die Eingabe X sollte ein Vektor von Daten sein, um den Durchschnitt einzutragen, n sollte die Anzahl der Punkte sein, um den Durchschnitt über die Ausgabe auszuführen, wird die gemittelten Daten enthalten, die von der Funktion zurückgegeben werden. Vorausgabe der Ausgabeausgabe NaN 1, numel y Find mid point of n midPoint round N 2 Die Hauptarbeit der Funktion ist in der for-Schleife durchgeführt, aber vor dem Start zwei Dinge sind vorbereitet Fir Stly die Ausgabe ist vorab zugewiesen als NaNs, dies diente zwei Zwecken Erstens Vorbereitung ist in der Regel gute Praxis, da es reduziert das Gedächtnis jongliert Matlab zu tun hat, zweitens macht es es sehr einfach, die gemittelten Daten in eine Ausgabe die gleiche Größe wie Der Eingangsvektor Dies bedeutet, dass die gleiche Xaxis später für beide verwendet werden kann, was für das Plotten bequem ist, alternativ können die NaNs später in einer Zeile der Codeausgabeausgabe entfernt werden. Der variable MidPoint wird verwendet, um die Daten im Ausgangsvektor auszurichten Wenn n 10, 10 Punkte verloren gehen, weil für die ersten 9 Punkte des Eingangsvektors gibt es nicht genug Daten, um einen 10-Punkt-Durchschnitt zu nehmen Da die Ausgabe kürzer als die Eingabe ist, muss sie richtig ausgerichtet werden Verwendet werden, so dass eine gleiche Menge an Daten am Anfang und Ende verloren geht, und die Eingabe wird mit dem Ausgang durch die NaN-Puffer, die bei der Vorverteilung der Ausgabe erstellt werden, ausgerichtet. Für eine 1-Länge y - n Find-Indexbereich, um den Durchschnitt über den Urban zu berechnen Mittlere Ausgabe a MidPoint bedeutet yab end In der for-Schleife selbst wird ein Mittelwert über jedes aufeinanderfolgende Segment des Eingangs übernommen. Die Schleife läuft für eine, die als 1 bis zur Länge des Eingangs y definiert ist, abzüglich der Daten, die verloren werden sollen Die Eingabe ist 100 Punkte lang und n ist 10, die Schleife läuft von einem 1 bis 90. Dies bedeutet, dass a liefert den ersten Index des Segmentes gemittelt werden Der zweite Index b ist einfach ein n-1 Also bei der ersten Iteration, A 1 n 10 so b 11-1 10 Der erste Durchschnitt wird über yab oder x 1 10 übernommen. Der Durchschnitt dieses Segments, das ein einzelner Wert ist, wird in der Ausgabe bei Index a midPoint oder 1 5 6 gespeichert. Bei der zweiten Iteration , A 2 b 2 10-1 11 so wird der Mittelwert über x 2 11 übernommen und im Ausgang 7 gespeichert. Bei der letzten Iteration der Schleife für einen Eingang der Länge 100 wird ein 91 b 90 10-1 100, so dass der Mittelwert genommen wird Über x 91 100 und im Ausgang 95 gespeichert Diese verlässt die Ausgabe mit insgesamt n 10 NaN-Werten bei Index 1 5 und 96 100.Beispiele und Überlegungen Bewegliche Mittelwerte sind in einigen Situationen nützlich, aber sie Nicht immer die beste Wahl Hier sind zwei Beispiele, wo sie nicht unbedingt optimal sind. Mikrofonkalibrierung Dieser Satz von Daten repräsentiert die Pegel jeder Frequenz, die von einem Lautsprecher erzeugt und von einem Mikrofon mit einer bekannten linearen Antwort aufgezeichnet wird. Der Ausgang des Lautsprechers variiert mit Frequenz, aber wir können diese Variation mit den Kalibrierdaten korrigieren - die Ausgabe kann in der Höhe angepasst werden, um die Schwankungen in der Kalibrierung zu berücksichtigen. Nichts, dass die Rohdaten verrauscht sind - das bedeutet, dass eine kleine Frequenzänderung ein Erfordernis erfordert Groß, unregelmäßig, Veränderung in der Ebene zu berücksichtigen Ist dies realistisch Oder ist dies ein Produkt der Aufzeichnungsumgebung Es ist in diesem Fall sinnvoll, einen gleitenden Durchschnitt anzuwenden, der die Pegelfrequenzkurve glättet, um eine Eichkurve zu liefern, die etwas weniger unregelmäßig ist Aber warum ist das nicht optimal in diesem Beispiel. Mehrere Daten wären besser - Mehrere Kalibrierungen laufen gemittelt zusammen würden das Rauschen im System zerstören, solange es lief Dom und geben eine Kurve mit weniger subtilen Detail verloren Der gleitende Durchschnitt kann nur annähernd dies, und kann einige höhere Frequenz Dips und Peaks aus der Kurve, die wirklich existieren zu entfernen. Sine Wellen Mit einem gleitenden Durchschnitt auf Sinus Wellen hebt zwei Punkte. Der General Problem der Auswahl einer vernünftigen Anzahl von Punkten, um den Durchschnitt über. It s einfach, aber es gibt effektivere Methoden der Signalanalyse als Mittelung oszillierende Signale im Zeitbereich. In diesem Diagramm ist die ursprüngliche Sinuswelle in blau aufgezeichnet Lärm ist Hinzugefügt und geplottet als die orange Kurve Ein gleitender Durchschnitt wird bei verschiedenen Punkten durchgeführt, um zu sehen, ob die ursprüngliche Welle wiederhergestellt werden kann 5 und 10 Punkte liefern vernünftige Ergebnisse, aber don t entfernen das Lärm ganz, wo eine größere Anzahl von Punkten beginnen Verlieren Amplitude Detail, wie der Durchschnitt erstreckt sich über verschiedene Phasen erinnern die Welle oscilates um Null, und bedeuten -1 1 0.Ander alternativen Ansatz wäre, um ein Tiefpass-Filter zu konstruieren, als es sein kann Angewendet auf das Signal im Frequenzbereich Ich werde nicht ins Detail gehen, da es über den Rahmen dieses Artikels hinausgeht, aber da das Rauschen ist deutlich höhere Frequenz als die Wellen Grundfrequenz, wäre es ziemlich einfach in diesem Fall zu konstruieren Ein Tiefpassfilter, als das Hochfrequenzrauschen zu entfernen. Dieses Beispiel zeigt, wie man gleitende durchschnittliche Filter und Resampling verwenden, um die Wirkung von periodischen Komponenten der Tageszeit auf stündliche Temperaturablesungen zu isolieren sowie unerwünschte Liniengeräusche von einem Open - Loop-Spannungsmessung Das Beispiel zeigt auch, wie die Pegel eines Taktsignals zu glätten, während die Kanten mit einem Median-Filter beibehalten werden. Das Beispiel zeigt auch, wie man einen Hampel-Filter verwendet, um große Ausreißer zu entfernen. Smoothing ist, wie wir wichtige Muster in unseren Daten entdecken Beim Verlassen von Dingen, die unwichtig sind, dh Lärm Wir verwenden Filterung, um diese Glättung durchzuführen Das Ziel der Glättung ist es, langsame Wertänderungen zu erzeugen, so dass es einfacher ist, tr zu sehen Endet in unseren data. Sometimes, wenn Sie Eingabedaten untersuchen, können Sie die Daten glätten, um einen Trend im Signal zu sehen. In unserem Beispiel haben wir einen Satz von Temperaturmesswerten in Celsius, die jede Stunde am Logan Airport für den ganzen Monat genommen werden Januar 2011.Hinweis, dass wir visuell die Wirkung sehen können, die die Tageszeit auf die Temperaturmessung hat Wenn Sie sich nur für die tägliche Temperaturvariation über den Monat interessieren, tragen die stündlichen Schwankungen nur zu Lärm, was die täglichen Variationen schwierig machen kann Zu unterscheiden Um die Wirkung der Tageszeit zu entfernen, würden wir jetzt gern unsere Daten mit einem gleitenden durchschnittlichen Filter glätten. Moving Average Filter In seiner einfachsten Form, ein gleitender Durchschnitt Filter der Länge N nimmt den Durchschnitt von jedem N Aufeinanderfolgende Samples der Wellenform. Um einen gleitenden Mittelwertfilter an jeden Datenpunkt anzuwenden, konstruieren wir unsere Koeffizienten unseres Filters, so dass jeder Punkt gleich gewichtet ist und 1 24 zum Gesamtdurchschnitt beiträgt. Das ergibt uns den Durchschnitt Temperatur über jeden 24-Stunden-Zeitraum. Filter Delay. Hinweis, dass die gefilterten Ausgabe um etwa zwölf Stunden verzögert Dies ist aufgrund der Tatsache, dass unsere gleitenden durchschnittlichen Filter hat eine Verzögerung. Jeder symmetrische Filter der Länge N wird eine Verzögerung von N-1 haben 2 Samples Wir können diese Verzögerung manuell berücksichtigen. Extracting Average Differences. Alternativ können wir auch die gleitenden durchschnittlichen Filter verwenden, um eine bessere Schätzung zu erhalten, wie die Tageszeit die Gesamttemperatur beeinflusst. Um dies zu tun, subtrahieren Sie zuerst die geglätteten Daten aus Die stündlichen Temperaturmessungen Dann segmentieren Sie die differenzierten Daten in Tage und nehmen Sie den Durchschnitt über alle 31 Tage im Monat. Extracting Peak Envelope. Sometimes möchten wir auch gerne eine reibungslos abweichende Schätzung, wie sich die Höhen und Tiefen unseres Temperatursignals ändern Täglich Um dies zu tun, können wir die Hüllkurvenfunktion nutzen, um extreme Höhen und Tiefen zu verbinden, die über eine Teilmenge der 24-Stunden-Periode erkannt werden. In diesem Beispiel stellen wir sicher, dass es mindestens 16 Stunden zwischen jedem Extrem-Hoch gibt Und extrem niedrig Wir können auch ein Gefühl dafür, wie die Höhen und Tiefen sind Trending, indem sie den Durchschnitt zwischen den beiden Extremen. Weighted Moving Average Filters. Other Arten von gleitenden durchschnittlichen Filtern nicht Gewicht jeder Probe gleichermaßen. Eine andere gemeinsame Filter folgt dem Binomial Ausdehnung Diese Art von Filter nähert sich einer Normalkurve für große Werte von n. Es ist nützlich, um Hochfrequenzrauschen für kleine n zu filtern. Um die Koeffizienten für den Binomialfilter zu finden, fliegen Sie mit sich selbst und dann iterativ die Ausgabe mit einer vorgeschriebenen Anzahl von Mal In diesem Beispiel verwenden Sie fünf Gesamt-Iterationen. Ein anderer Filter, der dem Gaußschen Expansionsfilter etwas ähnelt, ist der exponentielle gleitende Mittelwertfilter. Dieser Typ des gewichteten gleitenden Durchschnittsfilters ist einfach zu konstruieren und erfordert keine große Fenstergröße. Sie passen eine exponentiell gewichtete Gleitende durchschnittliche Filter durch einen Alpha-Parameter zwischen null und eins Ein höherer Wert von Alpha wird weniger Glättung haben. Zoom in auf die Messwerte für Ein Tag. Wählen Sie Ihr Land aus.
No comments:
Post a Comment