Monday, 23 October 2017

N Point Moving Durchschnittliche Filter Matlab


Frequenzgang des laufenden Mittelfilters Der Frequenzgang eines LTI-Systems ist die DTFT der Impulsantwort, Die Impulsantwort eines L-Sample-gleitenden Mittelwerts Da der gleitende Mittelwert FIR ist, reduziert sich der Frequenzgang auf die endliche Summe We Kann die sehr nützliche Identität verwenden, um den Frequenzgang zu schreiben, wo wir ae minus jomega haben lassen. N 0 und M L minus 1. Wir können an der Größe dieser Funktion interessiert sein, um zu bestimmen, welche Frequenzen durch den Filter ungedämpft werden und welche gedämpft werden. Unten ist ein Diagramm der Größe dieser Funktion für L 4 (rot), 8 (grün) und 16 (blau). Die horizontale Achse reicht von Null bis pi Radiant pro Probe. Man beachte, daß der Frequenzgang in allen drei Fällen eine Tiefpaßcharakteristik aufweist. Eine konstante Komponente (Nullfrequenz) im Eingang durchläuft das Filter ungedämpft. Bestimmte höhere Frequenzen, wie z. B. pi / 2, werden durch das Filter vollständig eliminiert. Wenn es aber die Absicht war, ein Tiefpassfilter zu entwerfen, dann haben wir das nicht sehr gut gemacht. Einige der höheren Frequenzen sind nur um einen Faktor von etwa 1/10 (für den 16-Punkt-Bewegungsdurchschnitt) oder 1/3 (für die Vierpunkt-gleitender Durchschnitt) gedämpft. Wir können viel besser als das. Der oben genannte Plot wurde durch den folgenden Matlab-Code erzeugt: omega 0: pi / 400: pi H4 (1/4) (1-exp (-iomega4)) ./ (1-exp (-Iomega)) H8 (1/8 ) (1-exp (-iomega)) - (1-exp (-iomega)) - Geispiel (Omega , Abs (H4) abs (H8) abs (H16) Achse (0, pi, 0, 1) Copyright-Kopie 2000- Universität von Kalifornien, Berkeley Die Berechnung eines laufenden Mittels eines einfachen 1D-Datenvektors scheint einfach genug. In der Tat behauptet die MATLAB-Dokumentation für FILTER etwas wie: Sie können Filter verwenden, um einen laufenden Durchschnitt zu finden, ohne eine for-Schleife zu verwenden. Dieses Beispiel findet den laufenden Durchschnitt eines 16-Element-Vektors unter Verwendung einer Fenstergröße von 3: Für meine Zwecke gibt es zwei ärgerliche Dinge über dieses Ergebnis: Ausgangspunkt n ist der Durchschnitt der Eingangspunkte n - (windowSize-1)..n (dh nicht zentriert, wie durch die horizontale Verschiebung belegt) und nach links von den verfügbaren Daten werden als Nullen behandelt. FILTFILT befasst sich mit beiden Fragen, hat aber andere Nachteile. Sein Teil des Signal Processing Toolbox, und es tut sich gut mit NaNs (die Id wie aus dem Mittelwert ausgeschlossen). Einige Leute auf FEX offensichtlich hatte die gleichen Frustrationen, aber es scheint seltsam, dass etwas, das diese einfache erfordert benutzerdefinierten Code. Anything Im fehlt hier gefragt Aug 10 10 at 21:39 Hmm. Gibt es sogar einen Weg, um die Polsterung zu tun und bekommen die durchschnittliche scheint, dass wenn sagen, 3 Bins fallen von der Kante im Vergleich zu 1, müssten Sie mit anderen Werten, um den richtigen Durchschnitt für die erste bin. Insbesondere müssen Sie mit dem Durchschnitt der gültigen Bins, die abhängig von dem Punkt unter Berücksichtigung pad. Also I39m nicht sicher, dass dies sogar mit padding ndash möglich ist. Mdmi; Ich muss den gleitenden Durchschnitt über N9 Tage bekommen. Das Array Im-Berechnen ist 4 Reihe von 365 Werten (M), die selbst Mittelwerte eines anderen Satzes von Daten sind. Ich möchte die Mittelwerte meiner Daten mit dem gleitenden Durchschnitt in einem Diagramm darstellen. Ich googeln ein wenig über gleitende Durchschnitte und den conv Befehl und fand etwas, das ich versuchte, in meinem Code umzusetzen: So grundsätzlich berechne ich meinen Durchschnitt und plot ihn mit einem (falschen) gleitenden Durchschnitt. Ich wählte die wts Wert direkt an der Mathworks-Website, so dass ist falsch. (Quelle: www. mathworks. nl/help/econ/moving-average-trend-estimation) Mein Problem aber ist, dass ich nicht verstehe, was dieses wts ist. Könnte jemand erklären, wenn es etwas mit den Gewichten der Werte zu tun hat: das ist in diesem Fall ungültig. Alle Werte werden gleich gewichtet. Und wenn ich das völlig falsch mache, könnte ich etwas Hilfe dabei haben Mein aufrichtigster Dank. Die Verwendung von conv ist eine hervorragende Möglichkeit, einen gleitenden Durchschnitt zu implementieren. In dem Code, den Sie verwenden, ist wts, wie viel Sie jeden Wert wiegen (wie Sie ahnen). Die Summe dieses Vektors sollte immer gleich Eins sein. Wenn Sie jeden Wert gleichmäßig gewichten und eine Größe N bewegten Filter dann tun möchten, würden Sie tun möchten Mit dem gültigen Argument in conv wird mit weniger Werten in Ms, als Sie in M ​​haben. Verwenden Sie diese, wenn Sie dont die Auswirkungen von Nullpolsterung. Wenn Sie die Signalverarbeitung Toolbox haben, können Sie cconv verwenden, wenn Sie einen kreisförmigen gleitenden Durchschnitt ausprobieren möchten. Etwas wie Sie sollten die conv und cconv Dokumentation für weitere Informationen lesen, wenn Sie havent bereits. Sie können Filter verwenden, um einen laufenden Durchschnitt zu finden, ohne eine for-Schleife zu verwenden. Dieses Beispiel findet den laufenden Durchschnitt eines 16-Element-Vektors unter Verwendung einer Fenstergröße von 5. 2) glatt als Teil der Curve Fitting Toolbox (die in den meisten Fällen verfügbar ist) yy glatt (y) glättet die Daten in dem Spaltenvektor Y unter Verwendung eines gleitenden Durchschnittsfilters. Die Ergebnisse werden im Spaltenvektor yy zurückgegeben. Die Standardspanne für den gleitenden Durchschnitt ist 5.Documentation Dieses Beispiel zeigt, wie gleitende Durchschnittsfilter und Resampling verwendet werden, um die Auswirkungen von periodischen Komponenten der Tageszeit auf die stündliche Temperaturablesung zu isolieren sowie unerwünschte Zeilenrauschen aus einem Open - Schleifenspannung. Das Beispiel zeigt auch, wie die Pegel eines Taktsignals zu glätten sind, während die Kanten durch Verwendung eines Medianfilters bewahrt werden. Das Beispiel zeigt auch, wie ein Hampel-Filter verwendet wird, um große Ausreißer zu entfernen. Motivation Glättung ist, wie wir wichtige Muster in unseren Daten zu entdecken, während Sie Dinge, die unwichtig sind (d. H. Rauschen). Wir verwenden Filter, um diese Glättung durchzuführen. Das Ziel der Glättung ist es, langsame Änderungen im Wert zu produzieren, so dass seine einfacher zu sehen, Trends in unseren Daten. Manchmal, wenn Sie Eingangsdaten untersuchen, können Sie die Daten glatt machen, um einen Trend im Signal zu sehen. In unserem Beispiel haben wir eine Reihe von Temperaturmessungen in Celsius genommen jede Stunde am Logan Flughafen für den gesamten Monat Januar 2011. Beachten Sie, dass wir visuell sehen können, die Wirkung, die die Tageszeit auf die Temperaturwerte hat. Wenn Sie sich nur für die tägliche Temperaturschwankung im Laufe des Monats interessieren, tragen die stündlichen Fluktuationen nur zu Lärm bei, was die täglichen Variationen schwer unterscheiden kann. Um den Effekt der Tageszeit zu entfernen, möchten wir nun unsere Daten mit einem gleitenden Mittelfilter glätten. Ein Moving Average Filter In seiner einfachsten Form nimmt ein gleitender Durchschnittsfilter der Länge N den Durchschnitt jeder N aufeinanderfolgenden Samples der Wellenform an. Um einen gleitenden Mittelwertfilter auf jeden Datenpunkt anzuwenden, konstruieren wir unsere Koeffizienten unseres Filters so, dass jeder Punkt gleich gewichtet wird und 1/24 zum Gesamtdurchschnitt beiträgt. Dies gibt uns die durchschnittliche Temperatur über jeden Zeitraum von 24 Stunden. Filterverzögerung Beachten Sie, dass der gefilterte Ausgang um etwa zwölf Stunden verzögert wird. Dies ist auf die Tatsache zurückzuführen, dass unser gleitender Durchschnittsfilter eine Verzögerung hat. Jedes symmetrische Filter der Länge N hat eine Verzögerung von (N-1) / 2 Abtastungen. Wir können diese Verzögerung manuell berücksichtigen. Extrahieren von Durchschnittsdifferenzen Alternativ können wir auch das gleitende Mittelfilter verwenden, um eine bessere Schätzung zu erhalten, wie die Tageszeit die Gesamttemperatur beeinflusst. Dazu werden zuerst die geglätteten Daten von den stündlichen Temperaturmessungen subtrahiert. Dann segmentieren Sie die differenzierten Daten in Tage und nehmen Sie den Durchschnitt über alle 31 Tage im Monat. Extrahieren von Peak Envelope Manchmal möchten wir auch eine glatt variierende Schätzung haben, wie sich die Höhen und Tiefen unseres Temperatursignals täglich ändern. Um dies zu erreichen, können wir die Hüllkurvenfunktion verwenden, um extreme Höhen und Tiefen zu verbinden, die über eine Untermenge der 24-Stundenperiode erkannt werden. In diesem Beispiel stellen wir sicher, dass es mindestens 16 Stunden zwischen jedem extrem hohen und extrem niedrigen Niveau gibt. Wir können auch ein Gefühl dafür, wie die Höhen und Tiefen sind Trends, indem sie den Durchschnitt zwischen den beiden Extremen. Weighted Moving Average Filter Andere Arten von Moving Average Filtern gewichten nicht jede Probe gleichermaßen. Ein weiterer gemeinsamer Filter folgt der Binomialexpansion von (1 / 2,1 / 2) n Dieser Filtertyp approximiert eine Normalkurve für große Werte von n. Es ist nützlich zum Herausfiltern von Hochfrequenzrauschen für kleine n. Um die Koeffizienten für das Binomial-Filter zu finden, falten Sie 1/2 1/2 mit sich selbst und konvergieren dann iterativ den Ausgang mit 1/2 1/2 a vorgeschriebener Anzahl von Malen. Verwenden Sie in diesem Beispiel fünf Gesamt-Iterationen. Ein anderer Filter, der dem Gaußschen Expansionsfilter ähnlich ist, ist der exponentiell gleitende Durchschnittsfilter. Diese Art des gewichteten gleitenden Durchschnittsfilters ist einfach zu konstruieren und erfordert keine große Fenstergröße. Sie passen einen exponentiell gewichteten gleitenden Durchschnittsfilter durch einen Alpha-Parameter zwischen null und eins an. Ein höherer Wert von alpha wird weniger Glättung haben. Untersuche die Messwerte für einen Tag. Wählen Sie Ihre CountryFIR-Filter, IIR-Filter und die lineare Konstante-Koeffizienten-Differenzengleichung Causal Moving Average (FIR) Filter Weve diskutierte Systeme, bei denen jeder Sample des Outputs eine gewichtete Summe der Samples des Inputs ist. 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.

No comments:

Post a Comment