Moving Average Filter 2d

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: 40788 Moving Average In Matlab Häufig finde ich mich in der Notwendigkeit der Mittelung der Daten, die ich habe, um den Lärm ein wenig zu reduzieren Bit. 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 in Reichweite und 16 Pixel breit in Azimuth. Ich habe ein Array, wo diskrete Sinuswerte Werte gespeichert und gespeichert werden. Ich möchte die max und min der Wellenform zu finden. Da die Sinus-Daten werden aufgezeichnet Spannungen mit einem DAQ, wird es einige Rauschen, so möchte ich einen gewichteten Durchschnitt zu tun. Angenommen, self. yArray enthält meine sinewave-Werte, hier ist mein Code so weit: Mein Problem scheint in der zweiten für die Schleife zu sein, wo abhängig von meiner durchschnittlichen Fenstergröße (filterize), möchte ich zusammenfassen, die Werte in dem Fenster zu nehmen Der Durchschnitt von ihnen. Ich bekomme eine Fehlermeldung: Ich bin ein EE mit sehr wenig Erfahrung in der Programmierung, so dass jede Hilfe wäre sehr dankbar gefragt, Paul, danke für die Empfehlung. Es sollte jedoch beachtet werden, dass, obwohl x: y doesn39t einen Fehler erzeugen, es win39t geben das erwartete Ergebnis im OP39s-Code. Entweder OP müsste Ihre Korrektur verwenden, aber mit yxfiltersize und aus der Schleife genommen oder die Summe entfernt werden sollte, mit dem XY-Indexierung an Ort und Stelle. Ndash tom10 Mai 30 13 um 17:18 tom10, I39m sicher, Sie haben Recht. Meine Antwort war meistens gehen einige Intuition über das, was das Problem wahrscheinlich war, ich bin nicht knowledgable über die Problem-Domäne, um die Genauigkeit des aktuellen Algorithmus zu kennen. Aus diesem Grund habe ich das OP auf Ihre Antwort verwiesen. Ndash Paul Woolcock Die anderen Antworten korrekt beschreiben Sie Ihren Fehler, aber diese Art von Problem wirklich ruft für die Verwendung von numpy. Numpy läuft schneller, ist mehr Speicher effizient und ist ausdrucksstarker und bequemer für diese Art von Problem. Heres ein Beispiel: Wenn Sie nicht möchten, numpy verwenden, sollte es auch darauf hingewiesen werden, dass theres ein logischer Fehler in Ihrem Programm, die Ergebnisse in der TypeError. Das Problem ist, dass in der Zeile youre mit Summe innerhalb der Schleife, wo Sie auch die Berechnung der Summe. Also entweder müssen Sie die Summe ohne die Schleife verwenden, oder Schleife durch das Array und addieren Sie alle Elemente, aber nicht beide (und ihre beides, dh das Anlegen von Summe an das indizierte Array-Element, das führt zu dem Fehler in der ersten Ort). Das heißt, hier sind zwei Lösungen:


Comments