Wednesday 18 October 2017

Moving Average Filterausführung Matlab


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: 38927 Moving Average In Matlab Oft finde ich mich in der Notwendigkeit der Mittelung der Daten habe ich, um das Rauschen 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 im Bereich und 16 Pixel breit im Azimut. MATLAB, wie finde ich den dreitägigen gleitenden Durchschnitt einer bestimmten Spalte einer Matrix und füge den gleitenden Durchschnitt zu dieser Matrix ein Ich versuche, den dreitägigen 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 am unteren Ende beginnt. Die 39valid39 Ausgabe wird nicht angezeigt werden, bis mindestens 17, 14 und 11. Hoffentlich macht dies Sinn ndash Aaron 12 August, 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: FIR-Filter, IIR-Filter und die lineare Konstanten-Koeffizienten-Differenzengleichung Causal Moving Average (FIR) Filter Weve diskutierte Systeme, bei denen jedes Sample des Outputs eine gewichtete Summe ist Die) Proben der Eingabe. Nehmen wir ein kausal gewichtetes Summensystem, wobei Kausal bedeutet, dass ein gegebenes Ausgangssample nur von dem aktuellen Eingangssample und anderen Eingängen früher in der Sequenz abhängt. Weder lineare Systeme überhaupt noch endliche Impulsantwortsysteme müssen kausal sein. Jedoch ist Kausalität bequem für eine Art Analyse, die bald erforschen würde. Wenn wir die Eingaben als Werte eines Vektors x symbolisieren. Und die Ausgänge als entsprechende Werte eines Vektors y. Dann kann ein solches System beschrieben werden, bei dem die b-Werte ein Gewicht sind, das auf die aktuellen und früheren Eingangsabtastwerte angewendet wird, um die aktuelle Ausgangsabtastung zu erhalten. Wir können uns den Ausdruck als Gleichung vorstellen, wobei das Gleichheitszeichen gleich ist oder als Verfahrensanweisung mit dem Gleichheitszeichen Bedeutung Zuordnung. Schreiben wir den Ausdruck für jeden Ausgangsprobe als MATLAB-Schleife von Zuweisungsanweisungen, wobei x ein N-Längenvektor von Eingangsabtastwerten ist und b ein M-Längenvektor von Gewichten ist. Um mit dem Spezialfall am Anfang umzugehen, werden wir x in einen längeren Vektor xhat einbetten, dessen erste M-1 Abtastwerte Null sind. Wir werden die gewichtete Summe für jedes y (n) als inneres Produkt schreiben und einige Manipulationen der Eingänge (wie Reversieren b) zu diesem Zweck durchführen. Diese Art von System wird oft als ein gleitender Durchschnitt Filter, aus offensichtlichen Gründen. Aus unseren früheren Diskussionen sollte klar sein, dass ein solches System linear und verschiebungsinvariant ist. Natürlich wäre es viel schneller, die MATLAB-Convolution-Funktion conv () anstelle unseres mafilt () zu verwenden. Anstatt die ersten M-1 Abtastwerte des Eingangs null zu betrachten, könnten wir sie als dieselben wie die letzten M-1 Abtastwerte betrachten. Dies ist die gleiche wie die Behandlung der Eingabe als periodisch. Nun verwenden Sie cmafilt () als den Namen der Funktion, eine kleine Änderung der früheren mafilt () - Funktion. Bei der Bestimmung der Impulsantwort eines Systems gibt es gewöhnlich keinen Unterschied zwischen diesen beiden, da alle nicht initialen Abtastungen der Eingabe Null sind: Da ein System dieser Art linear und schichtinvariant ist, wissen wir, dass seine Wirkung auf irgendwelche Sinusoid wird nur zu skalieren und verschieben. Hier ist es wichtig, dass wir die kreisförmige Version verwenden. Die kreisförmig gefaltete Version wird verschoben und skaliert, während die Version mit gewöhnlicher Faltung zu Beginn verzerrt ist. Lets sehen, was die exakte Skalierung und Verschiebung ist mit einem fft: Beide Eingang und Ausgang haben Amplitude nur bei Frequenzen 1 und -1, wie es sein sollte, da der Eingang war ein Sinus und das System war linear. Die Ausgangswerte sind um ein Verhältnis von 10,6251 / 8 1,3281 größer. Das ist der Gewinn des Systems. Was ist mit der Phase Wir müssen nur schauen, wo die Amplitude ungleich Null ist: Der Eingang hat eine Phase von pi / 2, wie wir wollten. Die Ausgangsphase wird um eine zusätzliche 1,0594 (mit umgekehrtem Vorzeichen für die negative Frequenz) oder etwa 1/6 eines Zyklus nach rechts verschoben, wie wir im Diagramm sehen können. Nun können wir eine Sinuskurve mit der gleichen Frequenz (1) ausprobieren, aber statt der Amplitude 1 und der Phase pi / 2 versuchen wir die Amplitude 1.5 und die Phase 0. Wir wissen, dass nur Frequenz 1 und -1 Amplitude ungleich Null haben (15.9377 / 12.0000) ist 1.3281 - und für die Phase ist es wieder um 1.0594 verschoben. Wenn diese Beispiele typisch sind, können wir die Wirkung unseres Systems vorhersagen (Impulsantwort .1 .2 .3 .4 .5) auf jedem Sinus mit der Frequenz 1 - wird die Amplitude um den Faktor 1,3281 erhöht und die (positive Frequenz) Phase um 1,0594 verschoben. Wir können die Wirkung dieses Systems auf Sinusoide anderer Frequenzen mit denselben Methoden berechnen. Aber es gibt einen viel einfacheren Weg, und eine, die den allgemeinen Punkt. Da die (zirkuläre) Faltung im Zeitbereich eine Multiplikation im Frequenzbereich bedeutet, folgt daraus, daß mit anderen Worten die DFT der Impulsantwort das Verhältnis der DFT des Ausgangs zu der DFT des Eingangs ist. In dieser Beziehung sind die DFT-Koeffizienten komplexe Zahlen. Wegen der abs (c1 / c2) abs (c1) / abs (c2) für alle komplexen Zahlen c1, c2 gibt diese Gleichung an, dass das Amplitudenspektrum der Impulsantwort immer das Verhältnis des Amplitudenspektrums der Ausgabe zu diesem ist Des Eingangs. Im Falle des Phasenspektrums ist der Winkel (c1 / c2) - Winkel (c1) - Winkel (c2) für alle c1, c2 (mit der Maßgabe, dass sich um n2pi unterschiedliche Phasen unterscheiden). Daher wird das Phasenspektrum der Impulsantwort immer die Differenz zwischen den Phasenspektren des Ausgangs und dem Eingang sein (mit welchen Korrekturen um 2pi benötigt werden, um das Ergebnis zwischen - pi und pi zu halten). Wir können die Phaseneffekte deutlicher sehen, wenn wir die Darstellung der Phase entpacken, d. H. Wenn wir verschiedene Vielfache von 2pi hinzufügen, um die Sprünge zu minimieren, die durch die periodische Natur der Funktion angle () erzeugt werden. Obwohl die Amplitude und die Phase üblicherweise für grafische und sogar tabellarische Darstellungen verwendet werden, sind die komplexen Fourier-Koeffizienten algebraisch nützlicher, da sie eine intuitive Möglichkeit sind, über die Auswirkungen eines Systems auf die verschiedenen Frequenzkomponenten seiner Eingabe nachzudenken Der einfache Ausdruck der Beziehung Der allgemeine Ansatz, den wir soeben gesehen haben, wird mit beliebigen Filtern des skizzierten Typs arbeiten, wobei jeder Ausgangssample eine gewichtete Summe eines Satzes von Eingangsabtastwerten ist. Wie bereits erwähnt, werden diese oft als Finite-Impulse-Response-Filter bezeichnet, da die Impulsantwort von Finite-Size - oder manchmal Moving-Average-Filtern ist. Wir können die Frequenzantwortcharakteristiken eines solchen Filters aus der FFT seiner Impulsantwort bestimmen, und wir können auch neue Filter mit gewünschten Eigenschaften durch IFFT aus einer Spezifikation des Frequenzgangs entwerfen. Autoregressive (IIR) - Filter Es wäre wenig Sinn, mit Namen für FIR-Filter, es sei denn, es gab eine andere Art von ihnen zu unterscheiden, und so diejenigen, die Pragmatik studiert haben, werden nicht überrascht sein, zu erfahren, dass es tatsächlich eine andere große Art Des linearen zeitinvarianten Filters. Diese Filter werden manchmal rekursiv genannt, weil der Wert der vorherigen Ausgaben (sowie vorhergehende Eingaben) von Bedeutung ist, obwohl die Algorithmen im Allgemeinen unter Verwendung von iterativen Konstrukten geschrieben werden. Sie werden auch als Infinite Impulse Response (IIR) - Filter bezeichnet, weil im Allgemeinen ihre Reaktion auf einen Impuls für immer weitergeht. Sie werden auch manchmal als autoregressive Filter bezeichnet, da man die Koeffizienten als das Ergebnis einer linearen Regression verstehen kann, um Signalwerte als Funktion früherer Signalwerte auszudrücken. Die Beziehung von FIR - und IIR-Filtern ist klar in einer linearen konstanten Koeffizienten-Differenzengleichung zu sehen, d. h. eine gewichtete Summe von Ausgaben gleich einer gewichteten Summe von Eingängen zu setzen. Dies ist wie die Gleichung, die wir früher für das kausale FIR-Filter angegeben haben, außer dass wir neben der gewichteten Summe von Eingängen auch eine gewichtete Summe von Ausgängen haben. Wenn wir dies als eine Vorgehensweise zur Erzeugung von Ausgangssamples betrachten wollen, müssen wir die Gleichung neu anordnen, um einen Ausdruck für den aktuellen Ausgabeprobe y (n) zu erhalten, wobei die Konvention angenommen wird, dass a (1) 1 (z Und bs) können wir den 1 / a (1) Term loswerden: y (n) b (1) x (n) b (2) x (n-1). B (Nb1) x (n-nb) - a (2) y (n-1) -. - a (Na1) y (n-na) Wenn alle anderen a (n) als a (1) Null sind, reduziert dies auf unseren alten Freund das kausale FIR-Filter. Dies ist der allgemeine Fall eines (kausalen) LTI-Filters und wird durch den MATLAB-Funktionsfilter implementiert. Es sei der Fall betrachtet, bei dem die b Koeffizienten außer b (1) null sind (anstelle des FIR-Falles, bei dem a (n) null ist): In diesem Fall wird der aktuelle Ausgabeprobe y (n) als a berechnet Gewichtete Kombination der aktuellen Eingangsabtastung x (n) und der vorhergehenden Ausgangsabtastwerte y (n - 1), y (n - 2) usw. Um eine Vorstellung davon zu erhalten, was mit solchen Filtern geschieht, Das heißt, der Stromausgangsabtastwert ist die Summe der aktuellen Eingangsabtastung und der Hälfte der vorhergehenden Ausgangsabtastung. Nun nehmen einen Eingangsimpuls durch ein paar Zeitschritte, eine zu einer Zeit. Es sollte an diesem Punkt klar sein, daß wir leicht einen Ausdruck für den n-ten Ausgabe-Abtastwert schreiben können: er ist nur (Wenn MATLAB von 0 gezählt wird, wäre dies einfach 0,5 n). Da das, was wir berechnen, die Impulsantwort des Systems ist, haben wir durch Beispiel gezeigt, daß die Impulsantwort tatsächlich unendlich viele Proben ungleich Null haben kann. Um diesen trivialen Filter erster Ordnung in MATLAB zu implementieren, könnten wir Filter verwenden. Der Aufruf sieht folgendermaßen aus: und das Ergebnis ist: Ist dieses Geschäft wirklich noch linear? Wir können dies empirisch betrachten: Für einen allgemeineren Ansatz betrachten wir den Wert eines Ausgabebeispiels y (n). Durch sukzessives Ersetzen können wir dies so schreiben: Dies ist genau wie unser alter Freund die Faltungssummenform eines FIR-Filters mit der Impulsantwort, die durch den Ausdruck .5k geliefert wird. Und die Länge der Impulsantwort ist unendlich. Es gelten also die gleichen Argumente, die wir zeigen, dass FIR-Filter linear waren. Bisher scheint dies viel Aufhebens um nicht viel zu sein. Was ist diese ganze Untersuchung gut für gut beantworten diese Frage in Stufen, beginnend mit einem Beispiel. Es ist nicht eine große Überraschung, dass wir berechnen können eine Stichprobe Exponential durch rekursive Multiplikation. Betrachten wir einen rekursiven Filter, der etwas weniger offensichtlich macht. Dieses Mal machen wir es zu einem Filter zweiter Ordnung, so daß der Aufruf zum Filter die Form Lets hat, die den zweiten Ausgangskoeffizienten a2 auf -2cos (2pi / 40) und den dritten Ausgangskoeffizienten a3 auf 1 setzen und anschauen Die Impulsantwort. Nicht sehr nützlich als Filter tatsächlich, aber es erzeugt eine abgetastete Sinuswelle (aus einem Impuls) mit drei Multiplikations-Additionen pro Probe Um zu verstehen, wie und warum es das tut und wie rekursive Filter entworfen und analysiert werden können in Der allgemeinere Fall, müssen wir zurückgehen und einen Blick auf einige andere Eigenschaften von komplexen Zahlen auf dem Weg zum Verständnis der z-Transformation. Dokumentation Filter y Filter (b, a, x) filtert die Eingabedaten x mit einem rationalen Die durch die Zähler - und Nennerkoeffizienten b und a definiert ist. Wenn a (1) nicht gleich 1 ist, dann filtert der Filter die Filterkoeffizienten um a (1). Daher muss a (1) ungleich Null sein. Wenn x ein Vektor ist, gibt der Filter die gefilterten Daten als Vektor mit der gleichen Größe wie x zurück. Wenn x eine Matrix ist, wirkt das Filter entlang der ersten Dimension und gibt die gefilterten Daten für jede Spalte zurück. Wenn x ein mehrdimensionales Array ist, wirkt das Filter entlang der ersten Array-Dimension, deren Größe nicht gleich 1 ist. Y-Filter (b, a, x, zi) verwendet Anfangsbedingungen zi für die Filterverzögerungen. Die Länge von zi muss max (Länge (a), Länge (b)) - 1 sein. Y-Filter (b, a, x, zi, dim) entlang der Dimension dim. Wenn z. B. x eine Matrix ist, gibt das Filter (b, a, x, zi, 2) die gefilterten Daten für jede Zeile zurück. Y, zf filter () liefert auch die endgültigen Bedingungen zf der Filterverzögerungen mit einer der vorherigen Syntaxen zurück. Rationale Übertragungsfunktion Die Input-Output-Beschreibung der Filteroperation an einem Vektor in der Z-Transformationsdomäne ist eine rationale Übertragungsfunktion. Eine rationale Übertragungsfunktion hat die Form Y (z) b (1) b (2) z x2212 1. B (n b 1) z x 2212 n b 1 a (2) z x2212 1. A (n a 1) z x 2212 n a X (z). Die sowohl FIR - als auch IIR-Filter behandelt. N a ist die Rückkopplungsfilterreihenfolge und n b die Vorwärtsfilterordnung. Sie können auch die rationale Übertragungsfunktion als die folgende Differenzengleichung ausdrücken: a (1) y (n) b (1) x (n) b (2) x (n × 2212 1). B (n b 1) x (n × 2212 n b) x 2212 a (2) y (n × 2212 1) × 2212. X2212 a (n a 1) y (n × 2212 n a). Darüber hinaus können Sie die rationale Übertragungsfunktion mit ihrer direkten Form II-transponierten Implementierung darstellen, wie im folgenden Diagramm dargestellt. Wegen der Normalisierung wird ein (1) 1 angenommen. Der Betrieb des Filters am Abtastwert m wird durch die Zeitdomänendifferenzgleichungen y (m) b (1) x (m) z 1 (m x 2212 1) z 1 (m) b (2) x (m) z 2 (M x2212 1) x2212 a (n x 2212 1) x2212 a (2) y (m) x00A0x00A0 x22EE x00A0x00A0x00A0x00A0x00A0 x00A0x00A0x00A0x00A0x00A0 x22EE x00A0x00A0x00A0x00A0x00A0x00A0x00A0x00A0x00A0x00A0x00A0x00A0 x22EE zn x2212 2 (m) ) Y (m) zn x2212 1 (m) b (n) x (m) x 2212 a (n) y (m). Tipps Wenn Sie die Signalverarbeitung Toolboxx2122 haben, können Sie einen Filter entwerfen, d. Mit designfilt. Anschließend können Sie mit Y Filter (d, X) Ihre Daten filtern. Wählen Sie Ihr LandDer Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Wie der Name andeutet, arbeitet das gleitende Mittelfilter durch Mittelung einer Anzahl von Punkten von dem Eingangssignal, um jeden Punkt im Ausgangssignal zu erzeugen. In Gleichung ist dies geschrieben: Wo ist das Eingangssignal, ist das Ausgangssignal und M ist die Anzahl der Punkte im Mittelwert. Beispielsweise ist bei einem 5-Punkt-Gleitmittelfilter Punkt 80 im Ausgangssignal gegeben durch: Alternativ kann die Gruppe von Punkten aus dem Eingangssignal symmetrisch um den Ausgangspunkt gewählt werden: Dies entspricht der Änderung der Summation in Gl . 15-1 von: j 0 bis M -1, bis: j - (M -1) / 2 bis (M -1) / 2. Zum Beispiel wird in einem 10-Punkt-gleitenden Durchschnittsfilter der Index j. Kann von 0 bis 11 (einseitige Mittelung) oder -5 bis 5 (symmetrische Mittelung) laufen. Symmetrische Mittelung erfordert, dass M eine ungerade Zahl ist. Die Programmierung ist etwas einfacher mit den Punkten auf nur einer Seite, jedoch ergibt sich eine relative Verschiebung zwischen den Eingangs - und Ausgangssignalen. Sie sollten erkennen, dass das gleitende Durchschnittsfilter eine Faltung mit einem sehr einfachen Filterkern ist. Zum Beispiel hat ein 5-Punkt-Filter den Filterkern: 82300, 0, 1/5, 1/5, 1/5, 1/5, 1/5, 0, 08230. Das heißt, das gleitende Mittelfilter ist eine Faltung Des Eingangssignals mit einem Rechteckimpuls mit einer Fläche von Eins. Tabelle 15-1 zeigt ein Programm zum Implementieren des gleitenden Durchschnittsfilters.

No comments:

Post a Comment