Frequenzgang des laufenden Mittelfilters Der Frequenzgang eines LTI-Systems ist der DTFT der Impulsantwort, Die Impulsantwort eines L-Sample-Gleitdurchschnitts ist Da der gleitende Mittelwertfilter FIR ist, reduziert sich der Frequenzgang auf die endliche Summe Wir Kann die sehr nützliche Identität verwenden, um den Frequenzgang zu schreiben, wo wir ae minus jomega gelassen haben. 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 und die abgeschwächt werden. Unten ist eine Darstellung 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. Beachten Sie, dass in allen drei Fällen der Frequenzgang eine Tiefpasscharakteristik aufweist. Eine konstante Komponente (Nullfrequenz) im Eingang geht durch den Filter ungedämpft. Bestimmte höhere Frequenzen wie pi 2 werden durch den Filter vollständig eliminiert. Allerdings, wenn die Absicht war, einen Tiefpassfilter zu entwerfen, dann haben wir nicht sehr gut gemacht. Einige der höheren Frequenzen werden nur um einen Faktor von etwa 110 (für den 16 Punkt gleitenden Durchschnitt) oder 13 (für den vier Punkt gleitenden Durchschnitt) gedämpft. Wir können viel besser machen. Die obige Auftragung wurde durch den folgenden Matlab-Code erstellt: Omega 0: pi400: pi H4 (14) (1-exp (-iomega4)) (1-exp (-iomega)) H8 (18) (1-exp (- (1-exp (-iomega)) (1-exp (-iomega)) (1-exp (-iomega)) (1-exp (-iomega)) (1-exp (-Iomega) H16)) Achse (0, pi, 0, 1) Copyright Kopie 2000- - Universität von Kalifornien, BerkeleyMoving Durchschnittlicher Filter (MA Filter) Loading. Der gleitende Durchschnittsfilter ist ein einfacher Low Pass FIR (Finite Impulse Response) Filter, der üblicherweise zum Glätten eines Arrays von abgetastetem Datensignal verwendet wird. Es nimmt M Abtastwerte der Eingabe zu einer Zeit und nehmen den Durchschnitt dieser M-Samples und erzeugt einen einzelnen Ausgangspunkt. Es ist eine sehr einfache LPF (Low Pass Filter) Struktur, die für Wissenschaftler und Ingenieure praktisch ist, um unerwünschte geräuschvolle Komponenten aus den beabsichtigten Daten zu filtern. Wenn die Filterlänge zunimmt (der Parameter M), erhöht sich die Glätte des Ausgangs, während die scharfen Übergänge in den Daten zunehmend stumpf werden. Dies impliziert, dass dieser Filter eine ausgezeichnete Zeitbereichsantwort hat, aber eine schlechte Frequenzantwort. Der MA-Filter führt drei wichtige Funktionen aus: 1) Es nimmt M Eingangspunkte, berechnet den Mittelwert dieser M-Punkte und erzeugt einen einzelnen Ausgangspunkt 2) Aufgrund der Berechnungsberechnungen. Der Filter führt eine bestimmte Verzögerung ein 3) Der Filter fungiert als Tiefpassfilter (mit schlechter Frequenzbereichsantwort und einer guten Zeitbereichsantwort). Matlab-Code: Nach dem Matlab-Code simuliert die Zeitbereichsantwort eines M-Punkt-Moving Average-Filters und zeichnet auch den Frequenzgang für verschiedene Filterlängen auf. Zeit Domain Response: Auf dem ersten Plot haben wir die Eingabe, die in den gleitenden Mittelfilter geht. Der Eingang ist laut und unser Ziel ist es, den Lärm zu reduzieren. Die nächste Abbildung ist die Ausgangsreaktion eines 3-Punkt-Moving Average-Filters. Es kann aus der Figur abgeleitet werden, dass der 3-Punkt-Moving Average-Filter nicht viel beim Ausfiltern des Rauschens getan hat. Wir erhöhen die Filterhähne auf 51 Punkte und wir können sehen, dass das Rauschen in der Ausgabe viel reduziert hat, was in der nächsten Abbildung dargestellt ist. Wir erhöhen die Hähne weiter auf 101 und 501 und wir können beobachten, dass - obwohl das Rauschen fast null ist, die Übergänge drastisch abgestumpft werden (beobachten Sie die Steigung auf beiden Seiten des Signals und vergleichen Sie sie mit dem idealen Ziegelwandübergang in Unsere Eingabe). Frequenzgang: Aus dem Frequenzgang kann behauptet werden, dass der Roll-off sehr langsam ist und die Stoppbanddämpfung nicht gut ist. Angesichts dieser Stoppbanddämpfung kann eindeutig der gleitende Durchschnittsfilter kein Frequenzband von einem anderen trennen. Da wir wissen, dass eine gute Leistung im Zeitbereich zu schlechter Leistung im Frequenzbereich führt und umgekehrt. Kurz gesagt, der gleitende Durchschnitt ist ein außergewöhnlich guter Glättungsfilter (die Aktion im Zeitbereich), aber ein außergewöhnlich schlechter Tiefpassfilter (die Aktion im Frequenzbereich) Externe Links: Empfohlene Bücher: Primäre SeitenleisteDokumentation Dieses Beispiel zeigt, wie es geht Verwenden Sie gleitende durchschnittliche Filter und Resampling, um die Wirkung von periodischen Komponenten der Tageszeit auf stündliche Temperaturablesungen zu isolieren, sowie unerwünschtes Linienrauschen aus einer offenen Spannungsmessung zu entfernen. Das Beispiel zeigt auch, wie man die Pegel eines Taktsignals glättet, während die Kanten mit einem Medianfilter erhalten bleiben. Das Beispiel zeigt auch, wie man einen Hampelfilter benutzt, um große Ausreißer zu entfernen. Motivation Glättung ist, wie wir wichtige Muster in unseren Daten entdecken, während wir Dinge entfernen, die unwichtig sind (d. h. Lärm). Wir verwenden Filterung, um diese Glättung durchzuführen. Das Ziel der Glättung ist es, langsame Wertänderungen zu erzeugen, so dass es einfacher ist, Trends in unseren Daten zu sehen. Manchmal, wenn Sie Eingabedaten untersuchen, können Sie die Daten glätten, um einen Trend im Signal zu sehen. In unserem Beispiel haben wir einen Satz von Temperaturmessungen in Celsius, die jede Stunde am Logan Airport für den ganzen Monat Januar 2011 genommen werden. Beachten Sie, dass wir visuell sehen können, dass die Tageszeit auf die Temperaturablesung hat. Wenn Sie sich nur für die tägliche Temperaturvariation über den Monat interessieren, tragen die stündlichen Schwankungen nur zu Lärm, was die täglichen Variationen schwer zu erkennen vermag. Um die Wirkung der Tageszeit zu beseitigen, möchten wir gern unsere Daten mit einem gleitenden Durchschnittsfilter verarbeiten. Ein beweglicher Durchschnittsfilter In seiner einfachsten Form nimmt ein gleitender Durchschnittsfilter der Länge N den Durchschnitt aller N aufeinanderfolgenden Abtastwerte der Wellenform an. Um einen gleitenden Durchschnittsfilter an jeden Datenpunkt anzuwenden, konstruieren wir unsere Koeffizienten unseres Filters, so dass jeder Punkt gleich gewichtet ist und 124 zum Gesamtdurchschnitt beiträgt. Dies gibt uns die durchschnittliche Temperatur über jeden 24 Stunden Zeitraum. Filterverzögerung Beachten Sie, dass der gefilterte Ausgang um etwa zwölf Stunden verzögert wird. Dies ist aufgrund der Tatsache, dass unsere gleitenden durchschnittlichen Filter hat eine Verzögerung. Jeder symmetrische Filter der Länge N hat eine Verzögerung von (N-1) 2 Proben. Wir können diese Verzögerung manuell berücksichtigen. Extrahieren von durchschnittlichen Unterschieden Alternativ können wir auch den gleitenden Durchschnittsfilter verwenden, um eine bessere Schätzung zu erhalten, wie die Tageszeit die Gesamttemperatur beeinflusst. Um dies zu tun, subtrahieren Sie zuerst die geglätteten Daten aus den stündlichen Temperaturmessungen. Dann segmentieren Sie die differenzierten Daten in Tage und nehmen den Durchschnitt über alle 31 Tage im Monat. Extrahieren von Peak-Hüllkurven Manchmal möchten wir auch gern eine abweichende Schätzung haben, wie sich die Höhen und Tiefen unseres Temperatursignals täglich ändern. Um dies zu tun, können wir die Hüllkurvenfunktion verwenden, um extreme Höhen und Tiefen zu verbinden, die über eine Teilmenge des 24-Stunden-Zeitraums erkannt werden. In diesem Beispiel stellen wir sicher, dass es mindestens 16 Stunden zwischen jedem extrem hohen und extrem niedrigen 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 gleitenden durchschnittlichen Filtern nicht Gewicht jeder Probe gleichmäßig. Ein weiterer gemeinsamer Filter folgt der Binomialexpansion von (12,12) n Diese Art von Filter nähert sich einer Normalkurve für große Werte von n an. Es ist nützlich für das Herausfiltern von Hochfrequenzrauschen für kleine n. Um die Koeffizienten für den Binomialfilter zu finden, fliegen Sie 12 12 mit sich selbst und dann iterativ die Ausgabe mit 12 12 eine vorgeschriebene Anzahl von Malen. Verwenden Sie in diesem Beispiel fünf vollständige Iterationen. Ein weiterer Filter, der dem Gaußschen Expansionsfilter etwas ähnelt, ist der exponentielle gleitende Mittelfilter. Diese Art von gewichteten gleitenden durchschnittlichen Filter ist einfach zu konstruieren und erfordert keine große Fenstergröße. Sie setzen einen exponentiell gewichteten gleitenden Durchschnittsfilter um einen Alpha-Parameter zwischen Null und Eins ein. Ein höherer Wert von Alpha wird weniger Glättung haben. Vergrößere die Lesungen für einen Tag. Wählen Sie Ihr LandAveragesSimple gleitender Durchschnitt DurchschnitteSimple gleitender Durchschnitt Sie werden ermutigt, diese Aufgabe entsprechend der Aufgabenbeschreibung zu lösen, mit jeder Sprache, die Sie vielleicht kennen. Berechnen der einfachen gleitenden Durchschnitt einer Reihe von Zahlen. Erstellen Sie eine stateful functionclassinstance, die eine Periode annimmt und gibt eine Routine zurück, die eine Zahl als Argument annimmt und gibt einen einfachen gleitenden Durchschnitt ihrer Argumente so weit zurück. Ein einfacher gleitender Durchschnitt ist ein Verfahren zum Berechnen eines Durchschnitts eines Stroms von Zahlen durch nur Mittelung der letzten 160 P 160 Zahlen aus dem Strom, 160 wobei 160 P 160 als Periode bekannt ist. Es kann implementiert werden, indem man eine Initialisierungsroutine mit 160 P 160 als Argument, 160 I (P), 160 anruft, die dann eine Routine zurückgeben sollte, die bei Aufruf mit einzelnen, aufeinanderfolgenden Mitgliedern eines Stroms von Zahlen den Mittelwert von (up To), die letzten 160 P 160 von ihnen, nennen wir diese 160 SMA (). Das Wort 160 Stateful 160 in der Aufgabenbeschreibung bezieht sich auf die Notwendigkeit von 160 SMA () 160, sich an bestimmte Informationen zwischen Anrufen zu erinnern: 160 Die Periode, 160 P 160 Ein bestellter Container von mindestens den letzten 160 P 160 Zahlen von jedem von Seine individuellen Anrufe. Stateful 160 bedeutet auch, dass sukzessive Aufrufe zu 160 I (), 160 der Initialisierer, 160 getrennte Routinen, die 160 nicht 160 teilen gespeicherten Zustand, so dass sie auf zwei unabhängige Datenströme verwendet werden könnte, Pseudocode für eine Implementierung von 160 SMA 160 ist: Diese Version verwendet eine persistente Warteschlange, um die aktuellsten p-Werte zu halten. Jede Funktion, die von init-moving-average zurückgegeben wird, hat ihren Zustand in einem Atom, das einen Warteschlangenwert hält. Diese Implementierung verwendet eine kreisförmige Liste, um die Zahlen innerhalb des Fensters am Anfang jedes Iterationszeigers zu speichern, bezieht sich auf die Listenzelle, die den Wert hält, der gerade aus dem Fenster herausgeht und durch den gerade addierten Wert ersetzt wird. Mit einem Closure bearbeiten Momentan ist dieses sma cant nogc, weil es eine Schließung auf dem Heap zuteilt. Einige Escape-Analysen könnten die Heap-Zuweisung entfernen. Verwenden einer Struct-Edit Diese Version vermeidet die Heap-Zuordnung der Schließung, die die Daten im Stack-Frame der Hauptfunktion hält. Gleiche Ausgabe: Um die Gleitkomma-Annäherungen zu vermeiden, die sich aufhäufen und wachsen, könnte der Code eine periodische Summe auf dem gesamten kreisförmigen Warteschlangen-Array ausführen. Diese Implementierung erzeugt zwei (Funktions-) Objekte, die den Status teilen. Es ist idiomatisch in E, um die Eingabe von der Ausgabe zu trennen (aus dem Schreiben lesen), anstatt sie zu einem Objekt zu kombinieren. Die Struktur ist die gleiche wie die Implementierung von Standard DeviationE. Das Elixir-Programm unten erzeugt eine anonyme Funktion mit einer eingebetteten Periode p, die als Periode des einfachen gleitenden Durchschnitts verwendet wird. Die Run-Funktion liest numerische Eingabe und übergibt sie an die neu erstellte anonyme Funktion und überprüft dann das Ergebnis auf STDOUT. Die Ausgabe wird unten gezeigt, mit dem Durchschnitt, gefolgt von der gruppierten Eingabe, die die Grundlage für jeden gleitenden Durchschnitt bildet. Erlang hat Schließungen, aber unveränderliche Variablen. Eine Lösung ist dann die Verwendung von Prozessen und eine einfache Nachricht übergeben basierte API. Matrixsprachen haben Routinen, um die Gleitende für eine gegebene Folge von Gegenständen zu berechnen. Es ist weniger effizient zu schleifen wie in den folgenden Befehlen. Kontinuierlich fordert eine Eingabe an. Die am Ende einer Liste L1 hinzugefügt wird. L1 kann durch Drücken von 2ND1 gefunden werden, und Mittelwert finden Sie in ListOPS Drücken Sie ON, um das Programm zu beenden. Funktion, die eine Liste mit den gemittelten Daten des bereitgestellten Arguments zurückgibt Programm, das bei jedem Aufruf einen einfachen Wert zurückgibt: Liste ist die Liste, die gemittelt wird: p ist die Periode: 5 gibt die gemittelte Liste zurück: Beispiel 2: Verwenden des Programms movinav2 (i , 5) - Initialisierung der gleitenden Durchschnittsberechnung und Definieren der Periode von 5 movinav2 (3, x): x - neue Daten in der Liste (Wert 3) und Ergebnis wird auf Variable x gespeichert und angezeigt movinav2 (4, x) : X - neue Daten (Wert 4), und das neue Ergebnis wird auf Variable x gespeichert und angezeigt (43) 2. Beschreibung der Funktion movinavg: Variable r - ist das Ergebnis (die gemittelte Liste), die zurückgegeben wird Variable i - ist die Indexvariable und zeigt auf das Ende der Unterliste, in der die Liste gemittelt wird. Variable z - eine Helpervariable Die Funktion verwendet die Variable i, um zu bestimmen, welche Werte der Liste in der nächsten Durchschnittsberechnung berücksichtigt werden sollen. Bei jeder Iteration zeigt die Variable i auf den letzten Wert in der Liste, der in der Durchschnittsberechnung verwendet wird. Also müssen wir nur herausfinden, welcher der erste Wert in der Liste sein wird. Normalerweise müssen wir p Elemente betrachten, also wird das erste Element dasjenige sein, das von (i-p1) indiziert wird. Bei den ersten Iterationen aber wird die Berechnung gewöhnlich negativ sein, so dass die folgende Gleichung negative Indizes vermeiden wird: max (i-p1,1) oder die Gleichung, max (i-p, 0) 1. Aber die Anzahl der Elemente auf den ersten Iterationen wird auch kleiner sein, der korrekte Wert wird sein (Endindex - Startindex 1) oder die Gleichung (i - (max (ip, 0) 1) 1) und dann , (I-max (ip, 0)). Die Variable z hält den gemeinsamen Wert (max (ip), 0), so dass der Anfangsindex (z1) und die Ziffern werden (iz) Mitte (Liste, z1, iz) die Liste der Wert, der gemittelte Summe ( .) Summiert sie Summe (.) (Iz) ri wird sie lokalisieren und das Ergebnis an der entsprechenden Stelle in der Ergebnisliste speichern fp1 erstellt eine Teilanwendung, die den (in diesem Fall) den zweiten und dritten Parameter festlegt
No comments:
Post a Comment