Moving Average Matlab Matrix
29 September, 2013 Gleitender Durchschnitt durch Faltung Was ist gleitend Durchschnitt und was ist es gut für Wie ist die gleitende Mittelung durch Faltung durchgeführt Moving Average ist eine einfache Operation, die gewöhnlich verwendet wird, um Rauschen eines Signals zu unterdrücken: Wir setzen den Wert jedes Punktes auf die Durchschnitt der Werte in seiner Nachbarschaft. Nach einer Formel: Hier ist x die Eingabe und y das Ausgangssignal, während die Größe des Fensters w ist, die ungerade sein soll. Die obige Formel beschreibt eine symmetrische Operation: Die Proben werden von beiden Seiten des aktuellen Punktes genommen. Unten ist ein Beispiel aus dem wirklichen Leben. Der Punkt, auf dem das Fenster gelegt wird, ist tatsächlich rot. Werte außerhalb x sind Nullen: Um zu spielen und sehen die Auswirkungen der gleitenden Durchschnitt, werfen Sie einen Blick auf diese interaktive Demonstration. Wie man es durch Faltung erkennt Wie Sie vielleicht erkannt haben, ist die Berechnung des einfachen gleitenden Durchschnittes ähnlich der Faltung: In beiden Fällen wird ein Fenster entlang des Signals geschoben und die Elemente im Fenster zusammengefasst. Also, geben Sie ihm einen Versuch, die gleiche Sache zu tun, indem Sie Faltung. Verwenden Sie die folgenden Parameter: Die gewünschte Ausgabe ist: Als erster Ansatz versuchen wir, was wir durch Faltung des x-Signals durch den folgenden k-Kernel erreichen: Der Ausgang ist genau dreimal größer als erwartet. Es ist auch ersichtlich, dass die Ausgabewerte die Zusammenfassung der drei Elemente im Fenster sind. Es ist, weil während der Faltung das Fenster entlang geschoben 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. Wird die Ausgabe durch 3 geteilt: Durch eine Formel mit der Teilung: Aber wäre es nicht optimal, die Teilung während der Konvolution zu machen Hier kommt die Idee, indem wir die Gleichung umordnen: So werden wir den folgenden k Kernel verwenden: Auf diese Weise werden wir Erhalten Sie 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 ausführt, ist: Eine Beispielnutzung ist: MATLAB verwenden, wie kann ich den dreitägigen gleitenden Durchschnitt einer bestimmten Spalte einer Matrix finden und den gleitenden Durchschnitt an diese Matrix anhängen Ich versuche, die 3-Tage gleitenden Durchschnitt von unten nach oben der Matrix zu berechnen. Ich habe meinen Code: Angesichts der folgenden Matrix a und Maske: Ich habe versucht Umsetzung der conv Befehl, aber ich erhalte einen Fehler. Hier ist der Befehl conv, den ich versucht habe, auf der 2. Spalte der Matrix a zu verwenden: Die Ausgabe, die ich wünsche, wird in der folgenden Matrix gegeben: Wenn Sie irgendwelche Vorschläge haben, würde ich es sehr schätzen. Vielen Dank für die Spalte 2 der Matrix a, ich bin die Berechnung der 3-Tage gleitenden Durchschnitt wie folgt und platziert das Ergebnis in Spalte 4 der Matrix a (Ich umbenannt Matrix a als 39desiredOutput39 nur für Abbildung). Der 3-tägige Durchschnitt von 17, 14, 11 ist 14 der dreitägige Durchschnitt von 14, 11, 8 ist 11 der 3-tägige Durchschnitt von 11, 8, 5 ist 8 und der 3-Tage-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 dreitägigen gleitenden Durchschnitt an der Unterseite beginnt. Die 39valid39 Ausgabe wird nicht angezeigt, bis mindestens 17, 14 und 11. Hoffentlich macht dies Sinn ndash Aaron 12 12 13 am 1:28 Im Allgemeinen würde es helfen, wenn Sie den Fehler anzeigen würde. In diesem Fall tun Sie zwei Dinge falsch: Zuerst muss Ihre Faltung durch drei (oder die Länge der gleitenden Durchschnitt) geteilt werden Zweitens beachten Sie die Größe von c. Sie können nicht einfach passen c in eine. Der typische Weg, um einen gleitenden Durchschnitt wäre, um die gleiche: aber das sieht nicht wie Sie wollen. Stattdessen sind Sie gezwungen, ein paar Zeilen zu verwenden: Ich bin auf der Suche nach einer kleinen Anleitung zur Verwendung von CONVN, um die gleitenden Mittelwerte in einer Dimension auf einer 3D-Matrix zu berechnen. Im bekommen ein wenig gefangen auf dem Spiegeln des Kernels unter der Haube und hoffe jemand könnte in der Lage sein, das Verhalten für mich zu klären. Eine ähnliche Post, die mich immer noch ein wenig verwirrt ist, ist hier: Ich habe tägliche Fluss - und Wetterdaten für eine Wasserscheide an verschiedenen Quellenorten. Die Matrix ist also so, dim 1 (die Zeilen) repräsentieren jeden Standort dim 2 (die Spalten) repräsentieren das Datum dim 3 (die Seiten) repräsentieren die unterschiedliche Art der Messung (Flusshöhe, Durchfluss, Niederschlag usw.) Das Ziel Ist zu versuchen und CONVN verwenden, um einen 21 Tage gleitenden Durchschnitt an jedem Standort, für jeden Beobachtungspunkt für jede Variable zu nehmen. Wie ich es verstehe, sollte ich nur in der Lage sein, einen Kernel wie: Ich habe versucht, herum zu spielen und erstellt einen anderen Kernel, der auch funktionieren sollte (glaube ich) und setzen ker2 als: Die Ergebnisse nicht ganz passen und Im fragen, ob ich die haben Abmessungen hier falsch für den Kernel. Jede Anleitung wird sehr geschätzt. BTW haben Sie einen symmetrischen Kernel, und so sollte das Spiegeln keine Auswirkungen auf die Faltungsausgabe haben. Was Sie angegeben haben, ist ein gleitender Standardkernel, und so sollte die Faltung bei der Suche nach dem gleitenden Durchschnitt funktionieren, wie Sie erwarten. Aber I39m ein wenig verwirrt, weil Sie sagte, die oben doesn39t Arbeit ndash Rayryeng Das ist völlig bis zu Ihnen :). Die Frage, die Sie haben, ist eine gültige (kein Wortspiel beabsichtigt), dass reist eine Menge Leute. Wenn Sie wollen, dass es bleibt, kann ich eine Antwort schreiben, die zusammenfasst, worüber wir gesprochen haben. Wenn Sie zurückziehen möchten, löschen Sie Ihre Antwort, that39s kein Problem überhaupt. Lassen Sie mich wissen, was Sie wollen, um ndash Rayryeng Urteil aus dem Kontext Ihrer Frage, haben Sie eine 3D-Matrix und Sie wollen den gleitenden Durchschnitt jeder Zeile unabhängig über alle 3D-Scheiben zu finden. Der obige Code sollte funktionieren (der erste Fall). Das gültige Flag gibt jedoch eine Matrix zurück, deren Größe in Bezug auf die Grenzen der Konvolution gültig ist. Werfen Sie einen Blick auf den ersten Punkt der Post, die Sie für weitere Details verbunden. Insbesondere fehlen die ersten 21 Einträge für jede Zeile aufgrund des gültigen Flags. Sein nur, wenn Sie zum 22. Eintrag jeder Reihe erhalten, wird der Faltungskernel vollständig innerhalb einer Reihe der Matrix enthalten und sein von diesem Punkt, wo Sie gültige Resultate erhalten (kein Wortspiel beabsichtigt). Wenn Sie diese Einträge an den Grenzen sehen möchten, dann müssen Sie die gleiche Flagge verwenden, wenn Sie die gleiche Größe Matrix wie die Eingabe oder die volle Flagge (die Standard ist), die Ihnen die Größe der Ausgabe ab der Sie beibehalten möchten beibehalten möchten Die extremsten äußeren Kanten, aber denken Sie daran, dass der gleitende Durchschnitt wird mit einem Bündel von Nullen getan werden und so die ersten 21 Einträge würde nicht sein, was Sie sowieso erwarten. Allerdings, wenn Im Interpretieren, was Sie fragen, dann die gültige Flagge ist, was Sie wollen, aber bedenken, dass Sie 21 Einträge fehlen, um für die Rand Fällen unterzubringen. Alles in allem sollte Ihr Code funktionieren, aber seien Sie vorsichtig, wie Sie die Ergebnisse interpretieren. BTW haben Sie einen symmetrischen Kernel, und so sollte das Spiegeln keine Auswirkungen auf die Faltungsausgabe haben. Was Sie angegeben haben, ist ein gleitender Standardkernel, und so sollte die Faltung bei der Suche nach dem gleitenden Durchschnitt funktionieren, wie Sie erwarten.
Comments
Post a Comment