Moving Average Filter (MA Filter) Wird geladen. Der gleitende Mittelwertfilter ist ein einfaches Tiefpassfilter (Finite Impulse Response), das üblicherweise zum Glätten eines Arrays von abgetastetem Datensignal verwendet wird. Es nimmt M Abtastwerte von Eingang zu einem Zeitpunkt und nimmt den Durchschnitt dieser M-Abtastwerte und erzeugt einen einzigen Ausgangspunkt. Es ist eine sehr einfache LPF (Low Pass Filter) Struktur, die praktisch für Wissenschaftler und Ingenieure, um unerwünschte laute Komponente aus den beabsichtigten Daten zu filtern kommt. Mit zunehmender Filterlänge (Parameter M) nimmt die Glätte des Ausgangs zu, während die scharfen Übergänge in den Daten zunehmend stumpf werden. Dies impliziert, dass dieses Filter eine ausgezeichnete Zeitbereichsantwort, aber einen schlechten Frequenzgang aufweist. Das MA-Filter erfüllt drei wichtige Funktionen: 1) Es benötigt M Eingangspunkte, berechnet den Mittelwert dieser M-Punkte und erzeugt einen einzelnen Ausgangspunkt 2) Aufgrund der Berechnungsberechnungen. Führt das Filter eine bestimmte Verzögerung ein 3) Das Filter wirkt als ein Tiefpaßfilter (mit einer schlechten Frequenzbereichsantwort und einer guten Zeitbereichsantwort). Matlab-Code: Der folgende Matlab-Code simuliert die Zeitbereichsantwort eines M-Point Moving Average Filters und zeigt auch den Frequenzgang für verschiedene Filterlängen. Time Domain Response: Auf dem ersten Plot haben wir die Eingabe, die in den gleitenden Durchschnitt Filter geht. Der Eingang ist laut und unser Ziel ist es, den Lärm zu reduzieren. Die nächste Abbildung ist die Ausgangsantwort eines 3-Punkt Moving Average Filters. Es kann aus der Figur abgeleitet werden, daß der 3-Punkt-Moving-Average-Filter nicht viel getan hat, um das Rauschen herauszufiltern. Wir erhöhen die Filterabgriffe auf 51 Punkte und wir können sehen, dass sich das Rauschen im Ausgang stark reduziert hat, was in der nächsten Abbildung dargestellt ist. Wir erhöhen die Anzapfungen weiter auf 101 und 501, und wir können beobachten, dass auch wenn das Rauschen fast Null ist, die Übergänge drastisch abgebaut werden (beobachten Sie die Steilheit auf beiden Seiten des Signals und vergleichen Sie sie mit dem idealen Ziegelwandübergang Unser Eingang). Frequenzgang: Aus dem Frequenzgang kann behauptet werden, dass der Roll-off sehr langsam ist und die Stopbanddämpfung nicht gut ist. Bei dieser Stoppbanddämpfung kann klar sein, daß der gleitende Mittelfilter nicht ein Frequenzband von einem anderen trennen kann. Wie wir wissen, führt eine gute Leistung im Zeitbereich zu einer schlechten Leistung im Frequenzbereich und umgekehrt. Kurz gesagt, ist der gleitende Durchschnitt ein außergewöhnlich guter Glättungsfilter (die Aktion im Zeitbereich), aber ein außergewöhnlich schlechtes Tiefpaßfilter (die Aktion im Frequenzbereich) Externe Links: Empfohlene Bücher: Primäre SeitenleisteVerwendung von MATLAB, Finden Sie die 3-Tage gleitenden Durchschnitt einer bestimmten Spalte einer Matrix und hängen Sie den gleitenden Durchschnitt, dass die Matrix 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-Tage-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 am unteren Ende beginnt. Die 39valid39 Ausgabe wird nicht angezeigt, bis mindestens 17, 14 und 11. Hoffentlich macht dies Sinn ndash Aaron 12 Juni 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 habe eine Matrix-Zeitreihen-Daten für 8 Variablen mit etwa 2500 Punkten (10 Jahre mon-fri) und möchte die Mittelwerte, Varianz, Schiefe und Kurtosis bei einem Bewegen berechnen Durchschnittliche Basis. Lets sagen Frames 100 252 504 756 - Ich möchte die vier Funktionen oben auf über jedem der (Zeit-) Frames, auf einer täglichen Basis zu berechnen, so dass die Rückkehr für Tag 300 in dem Fall mit 100 Tag Frame, wäre Mittelwert Varianz Schiefe Kurtosis aus dem Zeitraum day201-day300 (100 Tage insgesamt). und so weiter. Ich weiß, das bedeutet, ich würde ein Array-Ausgang, und die erste Frame-Anzahl von Tagen wäre NaNs, aber ich kann nicht herausfinden, die erforderliche Indizierung, um dies zu erledigen. Jul 23, 2010, 10:31:25 pm »Dies ist eine interessante Frage, weil ich denke, die optimale Lösung ist anders für den Mittelwert, als es für die anderen Beispiel Statistiken ist. Ive lieferte ein Simulationsbeispiel unten, dass Sie durcharbeiten können. Zuerst wählen Sie einige beliebige Parameter und simulieren einige Daten: Für den Mittelwert verwenden Sie Filter, um einen gleitenden Durchschnitt zu erhalten: Ich hatte ursprünglich gedacht, dieses Problem mit conv wie folgt zu lösen: Aber wie PhilGoddard in den Kommentaren darauf hinwies, vermeidet der Filteransatz die Notwendigkeit für die Schleife. Beachten Sie auch, dass Ive gewählt, um die Termine in der Ausgangsmatrix entsprechen die Daten in X so in späteren Arbeit können Sie die gleichen Indizes für beide verwenden. Somit werden die ersten WindowLength-1-Beobachtungen in MeanMA nan sein. Für die Varianz, kann ich nicht sehen, wie man entweder Filter oder conv oder sogar eine laufende Summe verwenden, um die Dinge effizienter zu machen, so dass ich stattdessen die Berechnung manuell bei jeder Iteration: Wir könnten etwas beschleunigen, indem wir die Tatsache, dass wir bereits haben Berechnet den durchschnittlichen gleitenden Durchschnitt. Ersetzen Sie einfach die innerhalb der Schleife Linie in der oben mit: Allerdings bezweifle ich, dies wird viel Unterschied machen. Wenn jemand eine schlaue Weise sehen kann, um Filter oder conv zu verwenden, um die sich bewegende Fensterabweichung zu erhalten, ist sehr interessiert, sie zu sehen. Ich lasse den Fall der Schiefe und Kurtosis auf die OP, da sie im Wesentlichen genau das gleiche wie das Varianzbeispiel sind, aber mit der entsprechenden Funktion. Ein letzter Punkt: Wenn Sie die oben in eine allgemeine Funktion konvertiert wurden, könnten Sie in eine anonyme Funktion als eines der Argumente übergeben, dann hätten Sie eine gleitende durchschnittliche Routine, die für willkürliche Auswahl von Transformationen funktioniert. Endpunkt, Endpunkt: Für eine Sequenz von Fensterlängen, einfach Schleife über den gesamten Code-Block für jede Fensterlänge. Ja, die Filterfunktion ist zwar besser für den Mittelwert - aber das wollte ich für mehrere verschiedene Funktionen tun, nicht nur für den Mittelwert. Nur meine Antwort geschrieben, weil es für mich gearbeitet und ich dachte, es könnte jemand anderem zu helfen. Ndash Dexter Morgan Apr 15 14 am 12:40
Comments
Post a Comment