Ich muss einen gleitenden Durchschnitt über eine Datenreihe berechnen, innerhalb einer for-Schleife muss ich den gleitenden Durchschnitt über N 9 Tage bekommen. Das Array I m, das in 1 ist, ist 4 Serie von 365 Werten M, die selbst Mittelwerte eines anderen Satzes sind Daten Ich möchte die Mittelwerte meiner Daten mit dem gleitenden Durchschnitt in einer Handlung zu zeichnen. Ich googeln ein bisschen über bewegte Durchschnitte und die Konv-Befehl und fand etwas, was ich versucht, Umsetzung in meinem Code. So im Grunde, ich berechnen meine Mittel und Handlung Es mit einem falschen gleitenden Durchschnitt Ich wählte den WTS-Wert direkt von der Mathworks-Website, so dass ist falsche Quelle Mein Problem aber ist, dass ich nicht verstehe, was diese wts ist Könnte jemand erklären Wenn es etwas mit den Gewichten der zu tun hat Werte, die in diesem Fall ungültig sind Alle Werte werden gleich gewichtet. Und wenn ich das ganz falsch mache, könnte ich etwas Hilfe mit ihm bekommen. Mein aufrichtiger Dank. Schicht Sep 23 14 um 19 05.Using conv ist ein ausgezeichneter Weg zu Implementieren Sie einen gleitenden Durchschnitt In dem Code, den Sie verwenden, ist wts, wie viel Sie jeden Wert wiegen, wie Sie vermutet, die Summe von diesem Vektor sollte immer gleich Eins Wenn Sie möchten, um jeden Wert gleichmäßig Gewicht zu machen und eine Größe N beweglichen Filter dann tun Würden Sie wollen, um zu tun. Um das gültige Argument in conv wird dazu führen, dass mit weniger Werten in Ms als Sie haben in M Verwenden Sie das gleiche, wenn Sie don t mind die Auswirkungen der Null-Padding Wenn Sie die Signalverarbeitung Toolbox können Sie cconv verwenden, wenn Sie Ich möchte einen kreisförmigen gleitenden Durchschnitt versuchen Etwas wie. Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie bereits t 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-Vektor, mit 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 der Spalte Vektor y mit einem gleitenden Durchschnitt Filter Ergebnisse werden in der Spalte Vektor yy zurückgegeben Standard-Spanne für den gleitenden Durchschnitt ist 5.Using MATLAB, wie kann ich den 3-tägigen gleitenden Durchschnitt einer bestimmten Spalte einer Matrix finden und den gleitenden Durchschnitt an diese Matrix anhängen, ich versuche, den 3-tägigen gleitenden Durchschnitt von unten zu berechnen An der Oberseite der Matrix habe ich meinen Code zur Verfügung gestellt. Angesichts der folgenden Matrix a und Maske. Ich habe versucht, den Conv-Befehl zu implementieren, aber ich empfange einen Fehler Hier ist der Conv-Befehl, den ich in der 2. Spalte der Matrix a verwendet habe. Die Ausgabe, die ich wünsche, ist in der folgenden Matrix gegeben. Wenn Sie irgendwelche Vorschläge haben, würde ich es sehr dankbar sein Danke. Für Spalte 2 von Matrix a, berechne ich den 3-tägigen gleitenden Durchschnitt wie folgt und das Ergebnis in Spalte 4 von Matrix a Ich benannte Matrix a wie gewünschtOutput nur zur Veranschaulichung Der 3-Tages-Durchschnitt von 17, 14, 11 ist 14 der 3-Tages-Durchschnitt von 14, 11, 8 ist 11 der 3-Tage-Durchschnitt von 11, 8, 5 Ist 8 und der 3-Tages-Durchschnitt von 8, 5, 2 ist 5 Es gibt keinen Wert in den unteren 2 Zeilen für die 4. Spalte, da die Berechnung für den 3-tägigen gleitenden Durchschnitt nach unten beginnt. Die gültige Ausgabe wird nicht angezeigt Bis mindestens 17, 14 und 11 Hoffentlich ist das sinnvoll Aaron Jun 12 13 bei 1 28. Im Allgemeinen würde es helfen, wenn du den Fehler zeigen würdest. In diesem Fall machst du zwei Dinge falsch. Erstens muss deine Faltung durch geteilt werden Drei oder die Länge des gleitenden Durchschnittes. Zweitens, bemerken Sie die Größe von c Sie können nicht einfach passen c in a Die typische Art, einen gleitenden Durchschnitt zu bekommen wäre, dasselbe zu verwenden. Aber das sieht nicht so aus, wie Sie wollen. Stattdessen sind Sie Gezwungen, ein paar Zeilen zu verwenden. 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, movAv ist entworfen, um die grundlegende Funktionalität dieser The zu replizieren Code hier bietet ein schönes Beispiel für die Verwaltung von Indizes innerhalb Schleifen, die verwirrend sein können, um mit Ich habe bewusst den Code kurz und einfach gehalten, um diesen Prozess clear. movAv führt einen einfachen gleitenden Durchschnitt, die verwendet werden können, um laute Daten in einigen wiederherzustellen Situationen Es funktioniert, indem man den Mittelwert des Eingangs y über ein Gleitzeitfenster nimmt, dessen Größe durch n spezifiziert ist. Je größer n ist, desto größer ist der Glanzgrad der Wirkung von n relativ zur Länge des Eingangsvektors Y und effektiv gut, Art von schafft eine Tiefpass-Frequenz-Filter - siehe die Beispiele und Überlegungen Abschnitt. Weil die Menge der Glättung von jedem Wert von n ist relativ zu der Länge des Eingangs-Vektor, es ist immer wert testen verschiedene Werte 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 etwas durch Stapeln von Mitteln, z. B. den Code und vermieden werden Diagramm unten Vergleich einer Anzahl von verschiedenen Länge Fensterdurchschnitte Beachten Sie, wie glatte 10 10pt mit einem einzigen 20pt Durchschnitt verglichen wird In beiden Fällen sind 20 Punkte von Daten 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 erfolgt in der for-Schleife, aber vor dem Start werden zwei Dinge vorbereitet. Zuerst wird die Ausgabe als NaNs vorab zugewiesen, dies bediente zwei Zwecke Zuerst ist die Vorveröffentlichung in der Regel gute Praxis, da sie das Gedächtnis-Jonglieren reduziert, das Matlab hat Zu tun, zweitens macht es sehr einfach, die gemittelten Daten in eine Ausgabe zu bringen, die die gleiche Größe wie der Eingangsvektor hat. 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 entfernt werden In einer Zeile des Codeausgangsausgangs. 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 genügend Daten zu nehmen Ein 10-Punkt-Mittelwert Da der Ausgang kürzer als der Eingang ist, muss er ordnungsgemäß ausgerichtet werden. Der MidPoint wird so verwendet, dass ein gleicher Datenbetrag am Anfang und am Ende verloren geht und der Eingang mit dem Ausgang des NaN übereinstimmt Puffer, die bei der Vorveröffentlichung der Ausgabe erzeugt werden. für eine 1-lage y - n Find-Index-Bereich, um den Durchschnitt über den Durchschnitt zu nehmen Berechnen Sie die mittlere Ausgabe ein midPoint-Mittelwert yab-Ende In der for-Schleife selbst wird ein Mittelwert über jedes aufeinanderfolgende Segment des Eingangs übernommen. Die Schleife läuft Für a, die als 1 bis zur Länge des Eingangs y definiert ist, abzüglich der Daten, die verloren gehen werden n Wenn die Eingabe 100 Punkte lang ist und n 10 ist, läuft die Schleife von einem 1 bis 90. Dies bedeutet, dass a liefert Der erste Index des zu gemittelten Segments Der zweite Index b ist einfach ein n-1 also bei der ersten Iteration ein 1 n 10 so b 11-1 10 Der erste Durchschnitt wird über yab oder x 1 10 übernommen. Der Durchschnitt davon Segment, 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 wird also der Mittelwert über x 2 11 übernommen und im Ausgang 7 gespeichert Letzte Iteration der Schleife für eine Eingabe der Länge 100, a 91 b 90 10-1 100, so dass der Mittelwert über x 91 100 übernommen und im Ausgang 95 gespeichert wird. Damit bleibt 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 sind nicht immer die beste Wahl Hier sind zwei Beispiele, wo sie nicht unbedingt optimal sind. Mikrofonkalibrierung Dieser Satz von Daten repräsentiert die Niveaus jeder Frequenz, die von einem Lautsprecher und erzeugt wird Aufgezeichnet durch ein Mikrofon mit einer bekannten linearen Antwort Der Ausgang des Lautsprechers variiert mit der Frequenz, aber wir können diese Variation mit den Kalibrierdaten korrigieren - die Ausgabe kann in der Höhe angepasst werden, um die Schwankungen der Kalibrierung zu berücksichtigen Daten sind verrauscht - das bedeutet, dass eine kleine Frequenzänderung eine große, unberechenbare Änderung der Ebene zu berücksichtigen ist, ist dies realistisch oder ist dies ein Produkt der Aufzeichnungsumgebung Es ist in diesem Fall sinnvoll, einen gleitenden Durchschnitt anzuwenden Glättet die Pegel-Frequenz-Kurve, 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 zufällig ist Und bieten 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. Die allgemeine Frage Der Wahl 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 wird hinzugefügt Und gezeichnet als die orange Kurve Ein gleitender Durchschnitt wird bei verschiedenen Punkten von 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, wie eine größere Anzahl von Punkten beginnen zu verlieren Amplitude Detail, wie der Durchschnitt erstreckt sich über verschiedene Phasen erinnern die Welle oscilates um Null, und bedeuten -1 1 0.Ander alternativer Ansatz wäre, um ein Tiefpass-Filter zu konstruieren, als auf das Signal im Frequenzbereich angewendet werden kann ich nicht gehen Ins Detail, da es über den Rahmen dieses Artikels hinausgeht, aber da das Rauschen wesentlich höhere Frequenz als die Wellen-Grundfrequenz ist, wäre es in diesem Fall ziemlich einfach, ein Tiefpassfilter zu konstruieren, als das Hochfrequenzrauschen zu entfernen.
Comments
Post a Comment