In der Statistik ist ein einfacher gleitender Durchschnitt ein Algorithmus, der den ungewichteten Mittelwert der letzten n Samples berechnet. Der Parameter n wird oft als Fenstergröße bezeichnet, da der Algorithmus als ein Fenster betrachtet werden kann, das über die Datenpunkte gleitet. Durch die Verwendung einer rekursiven Formulierung des Algorithmus wird die Anzahl der pro Probe benötigten Operationen auf eine Addition, eine Subtraktion und eine Division reduziert. Da die Formulierung unabhängig von der Fenstergröße n ist. Die Laufzeitkomplexität ist O (1). D. h. konstant. Die rekursive Formel des ungewichteten gleitenden Durchschnitts ist, wo avg der rollende Durchschnitt ist und x einen Datenpunkt darstellt. Also, wenn das Fenster nach rechts schiebt, fällt ein Datenpunkt, der Schwanz, und ein Datenpunkt, der Kopf, bewegt sich ein. Implementierung Eine Implementierung des einfachen gleitenden Durchschnitts muss die folgenden berücksichtigen: Algorithmeninitialisierung Solange Das Fenster ist nicht vollständig mit Werten belegt, die rekursive Formel scheitert. Speicher Der Zugriff auf das Schwanz-Element ist erforderlich, was je nach Ausführung eine Speicherung von n Elementen erfordert. Meine Implementierung verwendet die vorgestellte Formel, wenn das Fenster vollständig mit Werten belegt ist und wechselt ansonsten auf die Formel, die den Mittelwert durch Neuberechnung der Summe der vorherigen Elemente aktualisiert. Beachten Sie, dass dies aufgrund der Gleitkomma-Arithmetik zu numerischen Instabilitäten führen kann. Soweit Speicherverbrauch betroffen ist, verwendet die Implementierung Iteratoren, um Kopf - und Schwanzelemente zu verfolgen. Dies führt zu einer Implementierung mit konstantem Speicherbedarf unabhängig von der Fenstergröße. Hier ist das Update-Verfahren, das das Fenster nach rechts schiebt. In den meisten Sammlungen werden ihre Enumeratoren ungültig, wenn die zugrunde liegende Sammlung geändert wird. Die Implementierung beruht jedoch auf gültigen Enumeratoren. Vor allem in Streaming-basierten Anwendungen muss die zugrunde liegende Sammlung modifiziert werden, wenn ein neues Element eintrifft. Ein Weg, um damit umzugehen ist eine einfache kreisförmige feste Größe Sammlung der Größe n1, die nie ungültig macht seine Iteratoren und abwechselnd fügen Sie ein Element und rufen Shift. Ich wünschte, ich könnte herausfinden, wie man das tatsächlich umsetzen kann, da die Test-Funktion sehr verwirrend für mich ist8230 Muss ich Daten in Array umwandeln, dann laufe SMA sma neue SMA (20, Array) für eine 20-Periode SMA Wie gehe ich damit um Shift () - Funktion Ist es notwendig, Konstruktoren zu implementieren. (Entschuldigen Sie das Durcheinander). Nein, du musst deine Daten nicht in ein Array konvertieren, solange deine Daten IEnumerable1 implementieren und der aufgelistete Typ doppelt ist. Soweit Ihr privates Messaging betroffen ist, müssen Sie das DataRow auf etwas umwandeln, das auf doppelte Werte zählt. Ihr Ansatz funktioniert. Shift, schiebt das Fenster eine Position nach links. Für einen Datensatz von etwa 40 Werten und einer 20 Periode SMA haben Sie 21 Positionen das Fenster passt in (40 8211 20 1). Bei jedem Aufruf von Shift () wird das Fenster um eine Position nach links verschoben und Average () gibt die SMA für die aktuelle Fensterposition zurück. Das ist der ungewichtete Durchschnitt aller Werte im Fenster. Zusätzlich erlaubt meine Implementierung, die SMA zu berechnen, auch wenn das Fenster am Anfang nicht vollständig gefüllt ist. Also im Grunde hoffe das hilft. Weitere Fragen COPYRIGHT NOTICE Christoph Heindl und cheind. wordpress, 2009-2012. Unerlaubte Verwendung und Vervielfältigung dieses Materials ohne ausdrückliche und schriftliche Erlaubnis von diesem Blogs Autor und Besitzer ist streng verboten. Auszüge und Links können verwendet werden, vorausgesetzt, dass ein vollständiger und klarer Kredit an Christoph Heindl und cheind. wordpress mit entsprechender und spezifischer Richtung zum ursprünglichen Inhalt gegeben wird. Aktuelle BeiträgeDie Wissenschaftler und Ingenieure Leitfaden zur digitalen Signalverarbeitung Von Steven W. Smith, Ph. D. Ein enormer Vorteil des gleitenden Durchschnittsfilters ist, dass er mit einem sehr schnell umgesetzten Algorithmus implementiert werden kann. Um diesen Algorithmus zu verstehen, stellen Sie sich vor, ein Eingangssignal x durch einen siebenpunkt gleitenden Durchschnittsfilter zu führen, um ein Ausgangssignal y zu bilden. Schauen wir nun an, wie zwei benachbarte Ausgangspunkte y 50 und y 51 berechnet werden: Diese sind für y 50 und für y 51 genau die gleichen Berechnungspunkte x 48 bis x 53 addiert. Ist y 50 bereits berechnet worden Ist der effizienteste Weg zur Berechnung von y 51: Sobald y 51 mit y 50 gefunden worden ist, dann kann y 52 aus der Probe y 51 berechnet werden, und so weiter. Nachdem der erste Punkt in y berechnet wurde, können alle anderen Punkte mit nur einer Addition und Subtraktion pro Punkt gefunden werden. Dies kann in der Gleichung ausgedrückt werden: Beachten Sie, dass diese Gleichung zwei Datenquellen verwendet, um jeden Punkt in der Ausgabe zu berechnen: Punkte von den eingegebenen und vorher berechneten Punkten aus dem Ausgang. Dies wird als rekursive Gleichung bezeichnet, was bedeutet, dass das Ergebnis einer Berechnung in zukünftigen Berechnungen verwendet wird. (Der Begriff rekursiv hat auch andere Bedeutungen, vor allem in der Informatik). Kapitel 19 diskutiert eine Vielzahl von rekursiven Filtern im Detail. Seien Sie sich bewusst, dass der gleitende durchschnittliche rekursive Filter sehr unterschiedlich ist von typischen rekursiven Filtern. Insbesondere haben die meisten rekursiven Filter eine unendlich lange Impulsantwort (IIR), die aus Sinusoiden und Exponentialen besteht. Die Impulsantwort des gleitenden Durchschnitts ist ein Rechteckimpuls (endliche Impulsantwort oder FIR). Dieser Algorithmus ist aus mehreren Gründen schneller als andere digitale Filter. Zuerst gibt es nur zwei Berechnungen pro Punkt, unabhängig von der Länge des Filterkerns. Zweitens sind Addition und Subtraktion die einzigen mathematischen Operationen erforderlich, während die meisten digitalen Filter eine zeitaufwändige Multiplikation benötigen. Drittens ist das Indexierungsschema sehr einfach. Jeder Index in Gl. 15-3 wird durch Addition oder Subtraktion von ganzzahligen Konstanten gefunden, die berechnet werden können, bevor die Filterung beginnt (d. h. p und q). Weiterhin kann der gesamte Algorithmus mit ganzzahliger Darstellung durchgeführt werden. Abhängig von der verwendeten Hardware können ganze Zahlen mehr als eine Größenordnung schneller als Gleitkomma sein. Überraschenderweise arbeitet die Integer-Darstellung besser als der Gleitpunkt mit diesem Algorithmus, zusätzlich zu schneller. Der Rundungsfehler von Gleitkomma-Arithmetik kann zu unerwarteten Ergebnissen führen, wenn man nicht vorsichtig ist. Stellen Sie sich zum Beispiel ein 10.000-Sample-Signal vor, das mit dieser Methode gefiltert wird. Die letzte Probe im gefilterten Signal enthält den akkumulierten Fehler von 10.000 Additionen und 10.000 Subtraktionen. Dies erscheint im Ausgangssignal als Driftversatz. Integers haben dieses Problem nicht, weil es keinen Rundungsfehler in der Arithmetik gibt. Wenn Sie mit diesem Algorithmus Gleitkomma verwenden müssen, zeigt das Programm in Tabelle 15-2 an, wie man einen doppelten Präzisionsakkumulator benutzt, um diesen Drift zu eliminieren. Recursive Moving Average Filter bull quot (0) 0 bull 2 160160160160 Der gleitende durchschnittliche Filter ist ein FIR-Filter der Länge N mit allen Hähnen gleich (1N) .160 Sein bekannt für lausige Frequenz Trennung, aber ausgezeichnete Zeitreaktion - in diesem Sinne, es out-Bessels ein Bessel-Filter.160 Sie können es mit SigmaStudios FIR Block implementieren Wie es hier beschrieben wird: Je länger der Filter, desto mehr Glättung - aber der Standard-FIR-Filteralgorithmus verwendet viele Instruktionen für riesige Filter, da er Koeffizienten für jeden Hahn multiplizieren muss.160 Dies ist ein Abfall, wenn alle Koeffizienten gleich sind .160 Wie Kapitel 15 von Steven W. Smiths Buch zeigt, können Sie einen gleitenden Durchschnitt Filter mit einer rekursiven Technik, die einen Hahn vor und nach einer (N-1) Größe verzögern hat.160 Ein solcher Filter erscheint unten als Teil von Eine Testschaltung mit Signalquelle und ein Bessel-Filter zum Vergleich: 160160160160 Koeffizienten werden am Eingang an den Einzelverstärkungsblock gezogen.160 Das vorliegende Sample fügt dem Ausgang bei der Verzögerung den Ausgang hinzu, die verzögerte Probe subtrahiert vom Ausgang Exits.160 Der Addierer mit dem Feedback sammelt diese Additionen und Subtraktionen, um die Ausgabe zu bilden - das tut etwas, das in C trivial ist, aber ansonsten ein Schmerz in der GUI ist.160 Obwohl eine rekursive Technik verwendet wird, bleibt der Filter ein echter FIR-Filter - die Länge der Impulsantwort wird nur durch Ihre Verzögerung eingestellt. 160160160160 Meine Testeingabe ist eine Rechteckwelle mit zusätzlichem Rauschen.160 Gefilterte Ergebnisse erscheinen als obere Spur in beiden Fotos - Zuerst der gleitende Mittelwertfilter: Der Bessel-Filter: 160160160160 Der gleitende Mittelwertfilter ermöglicht mehr Rauschen, aber besser bewahrt es Quadratische Wellenform - es ist nicht um die Ecken herum, und die Auf - und Absteigungen sind symmetrisch (seine lineare Phase) .160 Das Hören der beiden Wellenformen mit Kopfhörern zeigt ein ähnliches Ergebnis - mehr Lärm mit dem gleitenden Durchschnittsfilter, aber das Merkmal Klang einer quadratischen Welle kommt durch. Question. 1. Ein rekursiver Filter kann am besten beschrieben werden. 1. Ein rekursiver Filter kann am besten beschrieben werden. Ein Filter, dessen Stromausgang von vergangenen und vorhandenen Eingängen abhängt und einen Filter ausgibt, dessen Stromausgang von vergangenen und vorhandenen Eingängen abhängig ist, dessen Stromausgang von früheren und vorhandenen Ausgängen abhängig ist, dessen Stromausgang von vergangenen und vorhandenen Eingängen und nur dem Strom abhängt Ausgabe Frage 2. Welche der folgenden Aussagen beschreibt keinen gleitenden Durchschnittsfilter. Seine ak-Koeffizienten sind alle gleichwertig. Es ist ein Tiefpassfilter. Es ist nicht rekursiv Seine b k Koeffizienten sind alle gleich im Wert.
No comments:
Post a Comment