Saturday, 4 February 2017

Wie Berechnet Man Den Gleitenden Durchschnitt In Matlab

Ich muss einen gleitenden Durchschnitt über eine Datenreihe innerhalb einer for-Schleife berechnen. Ich muss den gleitenden Durchschnitt über N9 Tage bekommen. Das Array Im-Berechnen ist 4 Reihe von 365 Werten (M), die selbst Mittelwerte eines anderen Satzes von Daten sind. Ich möchte die Mittelwerte meiner Daten mit dem gleitenden Durchschnitt in einem Diagramm darstellen. Ich googeln ein wenig über gleitende Durchschnitte und den conv Befehl und fand etwas, das ich versuchte, in meinem Code umzusetzen: So grundsätzlich berechne ich meinen Durchschnitt und plot ihn mit einem (falschen) gleitenden Durchschnitt. Ich wählte die wts Wert direkt an der Mathworks-Website, so dass ist falsch. (Quelle: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mein Problem aber ist, dass ich nicht verstehe, was dieses wts ist. Könnte jemand erklären, wenn es etwas mit den Gewichten der Werte zu tun hat: das ist in diesem Fall ungültig. Alle Werte werden gleich gewichtet. Und wenn ich das völlig falsch mache, könnte ich etwas Hilfe dabei haben Mein aufrichtigster Dank. Die Verwendung von conv ist eine hervorragende Möglichkeit, einen gleitenden Durchschnitt zu implementieren. In dem Code, den Sie verwenden, ist wts, wie viel Sie jeden Wert wiegen (wie Sie ahnen). Die Summe dieses Vektors sollte immer gleich Eins sein. Wenn Sie jeden Wert gleichmäßig gewichten und eine Größe N bewegten Filter dann tun möchten, würden Sie tun möchten Mit dem gültigen Argument in conv wird mit weniger Werten in Ms, als Sie in M ​​haben. Verwenden Sie diese, wenn Sie dont die Auswirkungen von Nullpolsterung. Wenn Sie die Signalverarbeitung Toolbox haben, können Sie cconv verwenden, wenn Sie einen kreisförmigen gleitenden Durchschnitt ausprobieren möchten. Etwas wie Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie havent bereits. Sie können Filter verwenden, um einen laufenden Durchschnitt zu finden, ohne eine for-Schleife zu verwenden. Dieses Beispiel findet den laufenden Durchschnitt eines 16-Element-Vektors unter Verwendung einer Fenstergröße von 5. 2) glatt als Teil der Curve Fitting Toolbox (die in den meisten Fällen verfügbar ist) yy glatt (y) glättet die Daten in dem Spaltenvektor Y unter Verwendung eines gleitenden Durchschnittsfilters. Die Ergebnisse werden im Spaltenvektor yy zurückgegeben. Die Standardspanne für den gleitenden Durchschnitt ist 5.Ive bekam einen Vektor, und ich möchte den gleitenden Durchschnitt von ihm berechnen (mit einem Fenster der Breite 5). Zum Beispiel, wenn der betreffende Vektor 1,2,3,4,5,6,7,8 ist. Dann sollte der erste Eintrag des resultierenden Vektors die Summe aller Einträge in 1,2,3,4,5 (dh 15) sein, der zweite Eintrag des resultierenden Vektors sollte die Summe aller Einträge in 2,3,4, 5,6 (dh 20) usw. Am Ende sollte der resultierende Vektor 15,20,25,30 sein. Wie kann ich tun, dass Die conv Funktion ist rechts oben Ihre Gasse: Drei Antworten, drei verschiedene Methoden. Hier ist eine schnelle Benchmark (verschiedene Eingangsgrößen, feste Fenster Breite von 5) mit timeit fühlen sich frei, Löcher in sie (in den Kommentaren), wenn Sie denken, es muss verfeinert werden. Conv als der schnellste Ansatz seine etwa doppelt so schnell wie Münzen Ansatz (mit Filter). Und etwa viermal so schnell wie Luis Mendos Ansatz (mit cumsum). Hier ist ein weiterer Benchmark (feste Eingangsgröße von 1e4. Verschiedenen Fensterbreiten). Hier tritt der Luis Mendos cumsum-Ansatz als klarer Sieger auf, weil seine Komplexität in erster Linie von der Länge des Eingangs bestimmt wird und unempfindlich gegenüber der Fensterbreite ist. Zusammenfassung Zusammenfassend sollten Sie die Conv-Ansatz verwenden, wenn Ihr Fenster relativ klein ist, verwenden Sie die Cumsum-Ansatz, wenn Ihr Fenster relativ groß ist. Code (für Benchmarks) Gleitender Durchschnitt mit nur MATLAB-Funktionen berechnen Dieses Beispiel zeigt, wie der gleitende Mittelwert eines Signals mit der movmean-Funktion berechnet wird. Die movmean-Funktion berechnet den gleitenden 10-Punkt-Durchschnitt der verrauschten Daten, die von einem Beschleunigungsmesser kommen. Die drei Spalten in diesen Daten stellen die lineare Beschleunigung des Beschleunigungsmessers in den X-Achsen, Y-Achsen und Z-Achsen dar. Alle Daten sind in einer MAT-Datei verfügbar. Zeichnen Sie den gleitenden Durchschnitt der X-Achsen-Daten. Die Daten sind nicht sehr groß (7140 Proben in jeder Spalte) und sind vollständig für die Verarbeitung verfügbar. Die movmean-Funktion ist für solche einmaligen Berechnungen ausgelegt. Wenn jedoch die Daten sehr groß sind, beispielsweise in der Grßenordnung von GB, oder wenn es sich bei den Daten um einen Live-Stream handelt, der in Echtzeit verarbeitet werden soll, dann verwenden Sie Systemobjekte. Die Systemobjekte teilen die Daten in Segmente auf, die als Frames bezeichnet werden, und verarbeiten jeden Frame in einer Iterationsschleife nahtlos. Dieser Ansatz ist speicherwirksam, da zu jedem Zeitpunkt nur ein Datenrahmen verarbeitet wird. Außerdem sind die Systemobjekte optimiert, um Zustände intern zu behandeln. MATLAB und Simulink sind eingetragene Warenzeichen von The MathWorks, Inc. Bitte lesen Sie mathworkstrademarks für eine Liste anderer Marken, die Eigentum von The MathWorks, Inc. sind. Andere Produkt - oder Markennamen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Eigentümer. Wähle dein Land


No comments:

Post a Comment