Tuesday 14 February 2017

Wie Zu Berechnen Einfach Moving Average In Matlab

Mit MATLAB, wie finde ich die 3-Tage gleitenden Durchschnitt einer bestimmten Spalte einer Matrix und hängen Sie den gleitenden Durchschnitt zu dieser 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 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: Ive erhielt einen Vektor und ich möchte den gleitenden Durchschnitt von ihm berechnen (unter Verwendung eines Fensters 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) 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 Zugriffe: 41209 Moving Average In Matlab Oft finde ich die Notwendigkeit, die Daten zu berechnen, die ich haben muss Reduzieren das Rauschen ein wenig. Ich schrieb paar Funktionen, um genau das tun, was ich will, aber Matlabs in Filter-Funktion gebaut funktioniert auch ziemlich gut. Hier schreibe ich über 1D und 2D Mittelung von Daten. 1D-Filter kann mit der Filterfunktion realisiert werden. Die Filterfunktion erfordert mindestens drei Eingangsparameter: den Zählerkoeffizienten für den Filter (b), den Nennerkoeffizienten für den Filter (a) und natürlich die Daten (X). Ein laufender Mittelwertfilter kann einfach definiert werden: Für 2D-Daten können wir die Funktion Matlabs filter2 verwenden. Für weitere Informationen, wie der Filter funktioniert, können Sie eingeben: Hier ist eine schnelle und schmutzige Implementierung eines 16 von 16 gleitenden durchschnittlichen Filters. Zuerst müssen wir den Filter definieren. Da alles, was wir wollen, gleicher Beitrag aller Nachbarn ist, können wir einfach die Funktion verwenden. Wir teilen alles mit 256 (1616), da wir nicht den allgemeinen Pegel (Amplitude) des Signals ändern wollen. Zur Anwendung des Filters können wir einfach sagen, die folgenden Unten sind die Ergebnisse für die Phase eines SAR-Interferogramms. In diesem Fall ist der Bereich in der Y-Achse und der Azimut auf der X-Achse abgebildet. Der Filter war 4 Pixel breit im Bereich und 16 Pixel breit im Azimut.


No comments:

Post a Comment