Ich versuche, ein Matlab-Zuweisungsprojekt mit der folgenden Frage auszufüllen: Schreiben Sie eine Funktion namens MovingOccess, die einen Skalar namens x als Eingabeargument annimmt und einen Skalar zurückgibt. Die Funktion verwendet einen Puffer, um vorherige Eingänge zu halten, und der Puffer kann maximal 25 Eingänge halten. Insbesondere muss die Funktion die letzten 25 Eingänge in einem Vektor speichern (der Puffer). Jedes Mal, wenn die Funktion aufgerufen wird, kopiert es das Eingabeargument in ein Element des Puffers. Wenn bereits 25 Eingänge im Puffer gespeichert sind, verwirft es das älteste Element und speichert das aktuelle im Puffer. Nachdem sie die Eingabe im Puffer gespeichert hat, gibt sie den Mittelwert aller Elemente im Puffer zurück. Die Lösung, die ich zur Verfügung stelle, ist die folgende: Nach dem Auto Grader fungiert meine Funktion korrekt, wenn die Werte 1-50 nacheinander übergeben, aber scheitert, wenn Werte einer lärmenden Sinuswelle nacheinander übergeben (was ich mir mitgeteilt habe, Art eines Rundungsfehlers). Ich wäre Ihnen dankbar, wenn einer von euch mir einige Hinweise in Bezug auf die möglichen Fehlerschritte in meinem Code (oben angehängt) geben könnte. Vielen Dank im Voraus Ich muss einen gleitenden Durchschnitt über eine Datenreihe berechnen, innerhalb einer for-Schleife. Ich muss den gleitenden Durchschnitt über N9 Tage bekommen. Das Array Im Computing in ist 4 Serien 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 einer Handlung darstellen. Ich googelte ein bisschen über bewegte Durchschnitte und den Conv-Befehl und fand etwas, was ich versucht habe, in meinem Code zu implementieren: Also grundsätzlich berechne ich meinen Mittel und plot es mit einem (falschen) gleitenden Durchschnitt. Ich habe den WTS-Wert direkt von der Mathworks-Website ausgewählt, also ist das falsch. (Quelle: mathworks. nlhelpeconmoving-average-trend-estimation. html) Mein Problem aber ist, dass ich nicht verstehe, was diese 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 ganz falsch mache, könnte ich mir etwas helfen. Mein herzlichster Dank. Fragte am 23.09 um 19:05 Mit 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 erraten). Die Summe dieses Vektors sollte immer gleich eins sein. Wenn du deinen Wert gleichmäßig erwärmen möchtest und eine Größe N bewegter Filter machst, dann würdest du es tun wollen Mit dem gültigen Argument in conv wird es darum gekommen, weniger Werte in Ms zu haben, als du in M hast. Benutze das gleiche, wenn du die Auswirkungen von nicht beachtet hast Nullpolsterung. Wenn Sie die Signalverarbeitung Toolbox können Sie cconv verwenden, wenn Sie einen kreisförmigen gleitenden Durchschnitt versuchen wollen. Etwas wie Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie havent bereits haben. 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 im Spaltenvektor Y mit einem gleitenden durchschnittlichen Filter. Die Ergebnisse werden im Spaltenvektor yy zurückgegeben. Die Standardspanne für den gleitenden Durchschnitt ist 5.29 September, 2013 Gleitender Durchschnitt durch Faltung Was ist gleitender Durchschnitt und was ist es gut für Wie ist das Bewegen der Mittelung durch die Faltung gemacht Verschieben Durchschnittlich ist eine einfache Operation verwendet in der Regel zu unterdrücken Rauschen eines Signals: Wir Setzen Sie den Wert jedes Punktes auf den Mittelwert der Werte in seiner Nachbarschaft. Nach einer Formel: Hier ist x die Eingabe und y ist das Ausgangssignal, während die Größe des Fensters w ist, soll ungerade sein. Die obige Formel beschreibt eine symmetrische Operation: Die Proben werden von beiden Seiten des tatsächlichen Punktes genommen. Unten ist ein echtes Leben Beispiel. Der Punkt, an dem das Fenster gelegt wird, ist rot. Werte außerhalb von x sollen Nullen sein: Um herumzuspielen und die Effekte des gleitenden Durchschnitts zu sehen, werfen Sie einen Blick auf diese interaktive Demonstration. Wie man es durch Faltung macht Wie Sie vielleicht erkannt haben, ist die Berechnung des einfachen gleitenden Durchschnitts ähnlich der Faltung: In beiden Fällen wird ein Fenster entlang des Signals verschoben und die Elemente im Fenster werden zusammengefasst. Also, versuch es, das Gleiche zu tun, indem du eine Faltung benutzt. Verwenden Sie die folgenden Parameter: Die gewünschte Ausgabe ist: Als erster Ansatz, versuchen wir, was wir bekommen, indem wir das x-Signal durch den folgenden k-Kernel falten: Der Ausgang ist genau dreimal größer als der erwartete. Es kann auch gesehen werden, dass die Ausgangswerte die Zusammenfassung der drei Elemente im Fenster sind. Es ist, weil während der Faltung das Fenster verschoben wird, werden alle Elemente in ihm mit einem multipliziert und dann zusammengefasst: yk 1 cdot x 1 cdot x 1 cdot x Um die gewünschten Werte von y zu erhalten. Die Ausgabe wird durch 3 geteilt: Nach einer Formel, die die Teilung einschließt: Aber wäre es nicht optimal, die Teilung während der Faltung zu machen. Hier kommt die Idee, indem sie die Gleichung neu arrangiert: So werden wir den folgenden k Kernel verwenden: Auf diese Weise werden wir Bekomme die gewünschte Ausgabe: Im Allgemeinen: Wenn wir gleitenden Durchschnitt durch Faltung mit einer Fenstergröße von w machen wollen. Wir verwenden den folgenden k Kernel: Eine einfache Funktion, die den gleitenden Durchschnitt macht: Ein Beispiel ist: Erstellt am Mittwoch, den 08. Oktober 2008 um 20:04 Uhr Zuletzt aktualisiert am Donnerstag, den 14. März 2013 um 01:29 Uhr Geschrieben von Batuhan Osmanoglu Hits: 41473 Moving Average In Matlab Oft finde ich 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 Matlabs in Filterfunktion gebaut funktioniert auch ziemlich gut. Hier schreiben wir über 1D - und 2D-Mittelung von Daten. 1D-Filter kann mit der Filterfunktion realisiert werden. Die Filterfunktion benötigt mindestens drei Eingangsparameter: den Zählerkoeffizienten für den Filter (b), den Nennerkoeffizienten für den Filter (a) und die Daten (X) natürlich. Ein laufender Durchschnittsfilter kann einfach definiert werden durch: Für 2D-Daten können wir die Funktion Matlabs filter2 verwenden. Für weitere Informationen darüber, wie der Filter funktioniert, können Sie Folgendes eingeben: Hier ist eine schnelle und verschmutzte Implementierung eines 16 x 16 gleitenden Durchschnittsfilters. Zuerst müssen wir den Filter definieren. Da alles, was wir wollen, gleicher Beitrag aller Nachbarn ist, können wir einfach die Funktion benutzen. Wir teilen alles mit 256 (1616), da wir nicht die allgemeine Ebene (Amplitude) des Signals ändern wollen. Um den Filter anzuwenden, können wir einfach folgendes ausführen. Die Ergebnisse für die Phase eines SAR-Interferogramms sind. In diesem Fall ist der Bereich in der Y-Achse und der Azimut ist auf der X-Achse abgebildet. Der Filter war 4 Pixel breit im Bereich und 16 Pixel breit in Azimut.
No comments:
Post a Comment