Skip to main content

Exponentiell Gleitender Durchschnitt Labview


Moving Average Filter w kontinuierliche Datenerfassung Im suchen, um mehrere Rauschen Signale zu filtern. Im derzeit mit einem NI9203 w eine cDAQ-9174 Probenahme bei 1000Hz. Ich benutze DAQmx vis, um die Aufgabe zu starten und das Signal zu ermitteln. Ive versucht mit Glättung Filter coefficients. vi gepaart mit IIR filter. vi (Moving Avg. png) dies scheint für simulierte Signale und für logged Daten zu arbeiten. Allerdings, wenn ich versuche, dieses Setup für Echtzeit-Mittelung verwenden es schneidet alle Signale auf Null. Ive sah in mit Schieberegistern, sondern um das Ergebnis benötigt es scheint, ich müsste Hunderte von Elementen verwenden. Letztlich Im versuchen, das Signal zu filtern, um eine konstantere Lesung für den Benutzer zu erhalten. Beispielsweise muss während des Betriebs der aktuelle Zustand der Werte in Echtzeit überprüft werden. Dies ist derzeit schwierig, wenn das Rauschen Werte zeigt - 100 Wechsel alle 100ms. Jede mögliche Hilfe oder Vorschläge würde geschätzt, Dank im Voraus. Nachricht 1 von 9 (6.045 Ansichten) Re: Beweglicher Durchschnittlicher Filter w kontinuierliche Datenerfassung 09-25-2013 12:31 PM Ohne Anbringen deines VIs, gibst du niemand genug Informationen, um dir zu helfen. Irren ist menschlich, aber um es wirklich zu verunreinigen braucht man einen Computer. Der Optimist glaubt, dass wir in der besten aller möglichen Welten sind - der Pessimist fürchtet, dass dies wahr ist. Profanity ist die eine Sprache, die alle Programmierer am besten kennen. Ein Experte ist jemand, der alle möglichen Fehler gemacht hat. Nachricht 2 von 9 (6.042 Ansichten) Re: Verschieben des durchschnittlichen Filters w kontinuierliche Datenerfassung crossRulz 09-25-2013 12:37 PM Da du bist Versucht, einen Filter während der kontinuierlichen Erfassung von Daten perfrom, möchten Sie vielleicht in die Point-To-Point-Filter-VIs zu suchen. Sie müssen Ihre Wellenform-Daten in eine FOR-Schleife, um es zu verarbeiten, aber es kann in Echtzeit für Sie ausgeführt werden. Es gibt nur zwei Möglichkeiten, jemandem Dank zu sagen: Kudos und Marked Solutions Unofficial Forum Regeln und Richtlinien Die Diskussionen aus dem Advanced User Track ist nicht vorbei. Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren «Ein Thema zurück | Ein Thema vor» Seiten (2): 1 2 3 4 5 6 7 8 Ich bin nicht sicher, wie ich eine for-Schleife implementieren würde, ohne die Verbraucher-Schleife zu stören. Aus meinem Verständnis, wenn ich eine For-Schleife eingefügt, während die while-Schleife aufhört zu funktionieren und daher keine Log-Daten, bis die for-Schleife abgeschlossen war, würde diese Pause der while-Schleife passieren jede Interaktion der while-Schleife, die inkonsistente Daten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. BB-Code ist an. Smileys sind an. [IMG] Code ist an. HTML-Code ist aus Nicht angezeigt, gibt es keine sichtbare Verbindung mit dem Case Selector für den Zustand, den Sie darstellen, Boolean 3 ist anscheinend nur in der Mitte von Nirgendwo, und das ganze Bild hat keine Verbindung mit der Filterung, die Sie sagten, dass Sie versuchen, zu tun Die ursprüngliche Post. Eine Sache, die zu mir auftritt, ist jedoch, dass IMHO Sie versuchen, viel zu viel in der Producer-Schleife zu tun. Haben Sie gesucht sine. NI für writeups auf dieser Architektur Vielleicht möchten Sie das tun und genießen Sie einige gute Erklärungen und Beispiele für P-C-Programme, dann sehen, wo Sie qualitativ anders sind. Sowieso, ohne das Senden eines VI, das zu Ihrer Frage relevant ist (und einige datapictures der Resultate für die von uns, die nicht Ihre genaue Ausrüstung haben), thats ungefähr, soweit ich hier gehen kann. Andere können in der Lage, Ihnen eine bessere Vermutung, was los ist, aber es wird immer noch nur eine Vermutung. Irren ist menschlich, aber um es wirklich zu verunreinigen braucht man einen Computer. Der Optimist glaubt, dass wir in der besten aller möglichen Welten sind - der Pessimist fürchtet, dass dies wahr ist. Profanity ist die eine Sprache, die alle Programmierer am besten kennen. Ein Experte ist jemand, der alle möglichen Fehler gemacht hat. Um ohne zusätzliche Kosten etwas über LabVIEW zu lernen, arbeite im LabVIEW-Tutorial (s): Im nicht versuchen, Ihnen einen Vortrag auf Foren-Etikette, nur darauf hin, die Informationen, die es einfacher für Sie, um Hilfe von den guten Leuten zu bekommen Hier (vielleicht sogar kann ich Ihnen helfen). Wenn Sie Ihr Programm auf das Teil, das Sie Probleme mit haben, pare, das wird helfen. Selbst wenn Sie DAQ-Daten verwenden, um Daten zu nehmen, und jemand nicht über die gleiche Ausrüstung verfügt, ist oft die Struktur des VIs erkennbar genug, dass sie helfen können. Wenn Sie einen typischen Eingangsdaten-Filestream einschließen können, der zu einer schlechten Ausgabe führt, hilft es auch. Wie für Ihr VI, würde ich wahrscheinlich teilen Sie es in drei Schleifen, die erste nur die Daten zu nehmen, zweitens, um eine Datei zu protokollieren, und dritte Filter für die Nutzer profitieren. Wie crossrulz sagte, können Sie einen Punkt-zu-Punkt-Filter in einer FOR-Schleife innerhalb der Filterschleife, dann werden Sie nicht verlieren alle Daten, weil es nicht auf diese Funktion. Irren ist menschlich, aber um es wirklich zu verunreinigen braucht man einen Computer. Der Optimist glaubt, dass wir in der besten aller möglichen Welten sind - der Pessimist fürchtet, dass dies wahr ist. Profanity ist die eine Sprache, die alle Programmierer am besten kennen. Ein Experte ist jemand, der alle möglichen Fehler gemacht hat. Ich habe ein Problem mit meinem Filter, dem exponentiellen gewichteten gleitenden Mittelwertfilter (IIR 1. Ordnung). Ich habe ein Problem mit meinem Filter. Aus dem Buch: Verständnis der digitalen Signalverarbeitung (Lyons Richard) Ich habe die folgende Formel Berechnung der 3dB-Frequenz (fc) aus alpha. Alpha ist der Parameter zur Steuerung des Filters. Differentialgleichung des Filters: ynxnalpha (1 - alpha) yn-1 Beziehung zwischen fc und alpha: alpha cos (2fcfs) - 1 sqrtcos (2fcfs) - 4cos (2fcfs) 3 Wenn ich nun eine 3dB-Frequenz von 0,0794Hz wähle (Zeit (Fs94Hz) Bei einem IIR Filter 1. Ordnung ist die Anstiegszeit (ta) der Stepresponse (von 10 bis 90): ta2,2TC, was zu ta 4,4s führt. Aber wenn ich die Schrittantwort zu simulieren, ist meine Anstiegszeit etwa 3 mal von diesem Wert bei 14s. Ich kann nicht erklären, warum die Sprungantwort meines Filters sich so sehr unterscheidet. Für mein Moving Average Filter ist die berechnete und simulierte Anstiegszeit gleich. Ich habe die vi, die auf dem angeschlossenen FPGA durchgeführt wird. Vielleicht kann jemand einen Fehler finden. (Siehe auch Alpha-Filter oder RC-Filter) Ist Ihre Sampling-Frequenz (fs) richtig Wenn die Loop-Timing nicht übereinstimmt, würde das erklären. Ihre Datentypen sehen gut aus (um Alpha innerhalb von 1 zu erhalten). Aber ich würde vorschlagen, eine kleine Änderung in der Umsetzung. Wie es aussieht, ist es ein wenig anfällig für abgerundetes Treiben, weil (1-alpha) wiederholt mit dem yn-1 multipliziert wird. Eine etwas zuverlässigere Methode heißt yn yn-1 (alpha (xn - yn-1)). Der Unterschied ist subtil, aber gibt mir bessere Ergebnisse oft. Und es eliminiert eine Multiplikation. By the way, reinterpret Zahl tut das Gleiche wie Ihre Konvertierung von FXP zu bool und dann zurück. Es ist ein wenig weniger verwirrend, though. Im ein wenig verwirrt durch die zeitgesteuerte Schleife, die nie Schleifen. Tut es inforce Timing so (ich davon ausgegangen, es wäre nicht, so dass nie verwendet es ich den Loop Timer statt.) CLD User seit rev 8.6. Missbrauch bei Moderator melden Missbrauch bei Moderator melden Missbrauch bei Moderator melden Nachricht 2 von 13 (936 Ansichten) Antworten 0 1, ich beweisen meine Sampling-Frequenz mit dem Loop-Timer. Meine Eingabe sind 425.532 Ticks, die 94 Hz entspricht. Diese Tickrate wird durch Ticks EWMA bestätigt. --gt Vielleicht kann jemand den Code testen und mir sagen, 2, fand ich Ihren Ansatz in den Tricks und Tipps Abschnitt von Lyon Buch. Ich werde einen Versuch machen, aber könnten Sie erklären, die runden abtreiben ein wenig bin ich ganz neu in diesem Bereich. Gibt es einen weiteren Vorteil aus der Beseitigung eines Multiplikators außer ressources Sind der Frequenzgang, Impulsantwort und Schrittantwort die gleichen 3, wenn ich nur bitshift, bin ich Art ein verwendet, um diese Methode nicht sicher, ob die reinterprate Funktion weniger Ressourcen verwendet. Aber danke, dass du es bemerkt hast. 4, Die zeitgesteuerte Schleife iteriert alle 425.532 Zecken einmal. So wird mit einer Frequenz von 94Hz ein Wert durch den Code berechnet, da der Code innerhalb der zeitgesteuerten Schleife nur eine Iteration benötigt. Oder bin ich missunderstanding Ihre Frage Ich bin nicht sicher, welche weiteren Informationen Sie benötigen. Ich versuche, die Sprungantwort eines gleitenden Durchschnitts mit einem exponentiellen gleitenden Durchschnitt (EWMA) zu vergleichen. Eigentlich möchte ich nur die Theorie bestätigen. Wie ich oben erwähnte, um eine Zeitkonstante von 2s bei einer Abtastrate von 94 Hz zu erhalten, muss alpha 0,00169 sein. Die Anstiegszeit der Sprungantwort von 10 bis 90 des Endwertes unterscheidet sich von der Theorie. Aufstiegzeit sollte 4,4s mit Zeitkonstante 2s sein, aber ich erhalte fast 14s, wenn ich meinen Code auf dem FPGA laufe. Ich bestätigte, dass mit dem Alpha 0,00169 mein Code 1297samples von 0,1 bis 0,9 (Endwert 1, Startwert 0) erhält. Wie Sie in meinem Code sehen können, überprüfe ich die Schleifenzeit mit dem Indikator ticks ewma, um die Abtastrate der SCTL zu bestätigen. Kann jemand anderes die 1297samples bestätigen, die bei alpha benötigt werden 0,00169 Ursache Ich denke, dass ich zu viele Samples benötige um den 0,9 Wert zu erreichen. Ich habe bereits die vorgeschlagene EWMA-Version aus der ersten Antwort. Das gleiche Problem hier. Nachricht 5 von 13 (886 Ansichten) Antworten mit Zitat Beitrag editieren / löschen Diesen Beitrag einem Moderator melden Zum Anfang der Seite springen Meine Eingabe sind 425.532 Ticks, die 94 Hz entspricht. Diese Tickrate wird durch Ticks EWMA bestätigt. --gt Vielleicht kann jemand den Code testen und mir sagen, 2, fand ich Ihren Ansatz in den Tricks und Tipps Abschnitt von Lyon Buch. Ich werde einen Versuch machen, aber könnten Sie erklären, die runden abtreiben ein wenig bin ich ganz neu in diesem Bereich. Gibt es einen weiteren Vorteil aus der Beseitigung eines Multiplikators außer ressources Sind der Frequenzgang, Impulsantwort und Schrittantwort die gleichen 3, wenn ich nur bitshift, bin ich Art ein verwendet, um diese Methode nicht sicher, ob die reinterprate Funktion weniger Ressourcen verwendet. Aber danke, dass du es bemerkt hast. 4, Die zeitgesteuerte Schleife iteriert alle 425.532 Zecken einmal. So wird mit einer Frequenz von 94Hz ein Wert durch den Code berechnet, da der Code innerhalb der zeitgesteuerten Schleife nur eine Iteration benötigt. Oder bin ich missunderstanding Ihre Frage Ich habe eine Kalkulationstabelle zu simulieren, und erhalten fast genau die gleiche Antwort (1299 Zyklen von 0,1 bis 0,9 gehen). Spreadsheets machen ein praktisches Werkzeug für Berechnungen. 1. Okay. Ich habe noch nie die Single-Cycle-Timed-Loop (SCTL) mit der T geschrieben, um die Haltestelle. Es würde dazu führen, dass die mathematischen Funktionen Single-Zyklus, aber Im nicht sicher, ob das ein Vorteil ist. Ich wollte nur sicherstellen, dass die Zeit bestätigt wurde, und es ist. 2. Die Abrundung wird wahrscheinlich nicht angezeigt, es sei denn, Ihre Eingabe ist klein (kleiner als 0,1). Ich sehe jetzt, dass Sie 40 Bits (39 rechts der Dezimalzahl) für die Rückmeldung haben. Das dauert ziemlich viel FPGA zu multiplizieren, aber nicht rund-off Fragen haben. Andere Teile hatten nur 18 Bits (17 rechts von der Dezimalzahl), so dass alpha (0.00169 - .000007) mal eine Eingabe von 0,1 wäre 0.000169 - 0,000007 oder 7 Fehler). Aber das Multiplizieren ist auch 40 Bit, also sollten Sie keine Probleme sehen. Typischerweise hat der Ausgang yn weniger Bits und runden das letzte Bit ab. Da es sich jedoch um eine Schleife handelt, die jeweils um 1 Alpha multipliziert, wird die Rundung manchmal jede Schleife akkumuliert, bis sie groß genug ist, um die addierten Ergebnisse zu beeinflussen. Es ist schwer zu erklären, aber meine allgemeine Faustregel ist, dass ich erwarten, dass ein Fehler gleich dem kleinsten Bit geteilt durch alpha, mit der ursprünglichen Methode oder etwa die Hälfte, dass usint die Ein-Multiplikation-Methode. Die Antworten werden fast identisch sein, mit Ausnahme eines kleinen Unterschieds. Der größte Vorteil ist, FPGA Platz zu sparen (und Kompilierzeit). Und Sie können Ihre Anzahl von Bits etwas reduzieren, um noch mehr zu sparen. 3. Sie sind grundsätzlich identisch. Und beide Methoden sind kostenlos in FPGA. Die Bits arent geändert, so dass keine Logik benötigt wird, sie sind einfach umbenannt. 4. Ich glaube, Sie haben es gut beantwortet. In der Regel, an diesem Punkt würde ich einstellen Alpha, bis meine Ergebnisse, was ich wollte, und weitergehen. Ich hasse es nicht verstehen ein Missverhältnis, aber dont haben in der Regel Zeit, um in sie tauchen. Aber, um der Wissenschaft willen, können wir bedenken, dass Ihre Formel fehlerhaft sein kann. Ich denke, Sie können eine Formel für einen kontinuierlichen exponentiellen Zerfall (e-ttau) verwenden, nicht für einen diskreten exponentiellen Zerfall ((1-alpha) i). Es ist einfacher, dies als eine Schrittfunktion von 1 bis 0 zu betrachten. In diesem Fall ist yn (für ngt0) yn (1-alpha) (n). Wir können n für yn 0.9, als nlog1-alpha (0.9) 62 und n für yn 0.1, als 1361, für eine Differenz von 1299 finden. CLD Benutzer seit rev 8.6. Danke für Ihre ausführliche Antwort. Hinsichtlich des Problems mit der Anstiegszeit glaube ich, dass ich den Fehler gefunden habe. Sie könnten Recht haben, dass die Formel nicht korrekt ist, oder was wohl von mir missverstanden wird und im falschen Kontext steht. Als ich von der Arbeit nach Hause fuhr, erinnerte ich mich an eine praktische Funktion von labview: Glättung von Filterkoeffizienten. vi Hier müssen Sie nur tauTC und fs setzen und Nominator und Nenner für exponentiellen gleitenden Durchschnitt und gleitenden Durchschnitt berechnen. Da der Nominator alpha ist, könnte ich das Ergebnis mit der Formel vergleichen, die ich verwendet habe, und es gab einen gewissen Unterschied. Labview verwendet die folgende Formel: alpha1-exp (-1 (fsTC)). Mit dieser Formel ist TC2s gleich alpha0,0053. Und mit diesem Alpha meine Simulation funktioniert Risetime 4,4s Zitieren Sie: In der Regel, an diesem Punkt würde ich einstellen Alpha, bis meine Ergebnisse, was ich wollte, und gehen weiter. Ich würde gerne das gleiche tun, aber da dies meine Masterarbeit ist, muss ich solche Dinge jetzt wieder auf die Rundung Fragen zu lösen. Ich verstehe, dass kleine Werte ein größeres Problem sind. Da dieser Filter in einem Lock-In verwendet wird, werden die Werte WIRKLICH klein sein. Aber ich habe es bereits auf unserem Messgerät getestet und es funktioniert, dafür werde ich deine Version auch testen, aber wenn ich keine Probleme bekomme, schätze ich es bei 40bits. Die Simulation des folgenden Setups verursachte einen Fehler von 2.3. Mit 57 Bits reduzierte den Fehler auf unter 1. Ich denke, 40bits sollte genug sein. Und in Bezug auf die Ressourcen habe ich keine Sorgen. Obwohl mit einem Myrio am Ende habe ich noch eine Menge DSP Slices für die Multiplikation und 10 gratis FlipFlops. Also ich denke, dieses Thema ist gelöst. Dank für Ihre große Hilfe und interessante Gedanken. Cool Im froh, seine Arbeit, jetzt. Ich wuchs in der Ära ohne DSP-Scheiben in FPGAs und kleinere Zellenzahlen, so immer noch dazu neigen, in diesen Begriffen zu denken. Ich bevorzuge immer noch, 25 Minuten Programmierung zu verbringen, um meine Kompilierzeiten nach unten, though. Ive hatte Fälle, in denen ich Schnitt kompilieren Zeit von 90 Minuten bis 45 Minuten durch Optimierung ziemlich viel. Mit einem leistungsfähigen Server für das Kompilieren, das ist weniger wichtig. Eine dieser Optimierungen ist, Bit-Zählungen zu reduzieren, wo ich kann, vor allem für Multiplikationen. Beispielsweise ist alpha 160 und für 0,0053 können Sie auch 12-4 (negative Integerzahl) verwenden. Sie können auch in der Lage, eine Menge von oberen Bits aus Ihrer Eingabe zu beseitigen. 5 Minuten, um die kleinste Bit-Zählung holen kann leicht zu speichern 2-10 Minuten für jedes Kompilieren. Meine zweite Optimierung ist, Multiplikationen zu reduzieren, aber mit einem DSP-Slice, das ist nicht so wichtig. Ich kippe finde gute Dokumentation über die DSP-Scheiben (wenn Sie einige haben, bitte Pfostenverbindungen), aber, wie ich es verstehe, wenn Sie größere Zahlen (Bitzählimpulse) vermehren, benötigt es mehrfache Scheiben und möglicherweise Zeit, die Resultate zu kombinieren. Und ein weiterer Trick: Wählen Sie ein Alpha mit einem einfachen binären Wert, wie 1256 (Sie ausgewählt über 1189), und ändern Sie fs, bis Sie die gewünschte Glättung erhalten. Verwenden Sie dann eine Konstante für alpha. Multiplizieren mit einer konstanten 1256 ist im FPGA frei (es verschiebt nur die Bits). Für diese Angelegenheit, die Herstellung Alpha-Konstante kann optimieren die Multiplikationen ziemlich viel. Abhängig von den Smarts des Optimierers kann es stattdessen zu einem Satz von Addierern geändert werden. Front-Panel-Eingänge sind großartig für die Dinge zu arbeiten, aber Konstanten optimieren viel besser. CLD Benutzer seit rev 8.6. Wenn Sie durchschnittlich 16 mal so viele Samples (fs 16x was es war), sollten Sie 4 weitere Bits in Ihr Feedback. Sie haben bereits pleanty, so dass möglicherweise nicht wichtig, wenn Sie viel schneller gehen. Ansonsten ist die Erhöhung fs wahrscheinlich gut. Wenn der Eingang hat Niederfrequenz-Rauschen, über Sampling nicht helfen, beseitigen, dass überhaupt. Das Hochfrequenzrauschen verringert sich jedoch bei einer Überabtastung. Wenn zum Beispiel das Rauschen über 10Hz -5dB (das ist das 10- .5-fache der Amplitude des Signals, das Sie mögen), und Sie Probe bei 20Ss, werden Sie wahrscheinlich abholen -5dB in Ihrem ersten Lesungen. Wenn Ihr -3dB (fc) ist auch 10Hz, dann youll am Ende mit rund -8dB Rauschen in Ihrem Signal links. Wenn Sie stattdessen 200S nehmen, durchschnittliche Gruppen von 10, dann diese Durchschnitte an den Filter weitergeben, werden Sie nicht helfen, Rauschen bei 10Hz (Sie wurden 10Hz Rauschen ohne Sampling-Effekte), sondern reduziert Rauschen über 100Hz um etwa einen Faktor der Nähe (Aber nicht wirklich) 10. Es gibt ganze Semester-lange Klassen, die diskutieren, warum, wie, etc. Die kurze Version ist dies: Jedes Sample ist die Summe des Signals Sie wollen und Rauschen. Wenn Sie 10 Samples hinzufügen, erhalten Sie 10x das gewünschte Signal und die Summe von 10 Rauschen. Die Art des Rauschens bestimmt, was Sie erhalten, wenn Sie die 10 Samples von Rauschen hinzufügen. Gauss-Rauschen fügt einen Weg hinzu (so etwa: Wenn 83 von Proben unter X liegen, hat die Summe 83 Summen unter 1.1X oder so ähnlich). Lineares Rauschen fügt einen anderen Weg. Und wiederholen Muster hinzufügen einen anderen Weg. Also, ohne genau zu wissen, was der Lärm ist, kann niemand Sie mit Sicherheit beantworten, außer dass Mittelung mehrere Proben wahrscheinlich hilft, und fast nie weh tut. Es gibt auch die Frage des Aliasing. Wenn Sie eine Sinus-Interferenz von 60Hz haben, bei -3dB, und Sie Probe bei 10.001Ss (immer davon ausgehen, die Uhren passt nicht genau), erhalten Sie etwas wie 0.006Hz bei -3dB hinzugefügt, um Ihr Signal, und Ihr Filter wird es nicht entfernen . Aber stoßen Sie Ihre Sample-Rate auf 100.001Ss, wird die Interferenz auf etwa 40Hz, so dass Ihr Filter sollte es zu beseitigen. Mittelung von 10 Proben zu einem Zeitpunkt ist eine Art von Filter (Feld). Wenn Sie es in einem Frequenzbereich betrachten, können Sie sehen, dass einige höhere Frequenzen zu niedrigeren Frequenzen auf eine ungerade Weise verschoben werden, und nicht alle werden reduziert. Wenn Sie durchschnittlich 4000 Ss, 100 zu einer Zeit, youll erhalten eine durchschnittliche 40 Mal pro Sekunde. Mit 60Hz Interferenz, erhalten Sie etwa 13 so viel Rauschen, verschoben auf 20Hz, die nicht Filter sowie 60Hz haben würde. So wäre es besser, den EWMA-Filter mit der höheren Abtastrate zu verwenden. Als zu durchschnittlichen Blöcken von Eingängen, dann filtern. Und die Mittelung ist (wahrscheinlich) besser als nur eine langsamere Abtastrate. Wenn Sie einen Eingangsadapter mit eingebauten elektronischen Filtern haben, ist das sogar besser, und es gibt keine Notwendigkeit, mehr als 2x die Filterfrequenz zu probieren. CLD User seit rev 8.6.Exponential Filter Diese Seite beschreibt exponentielle Filterung, die einfachste und beliebteste Filter. Dies ist Teil des Abschnitts Filterung, der Teil des Leitfadens zur Fehlerdetektion und - diagnose ist. Überblick, Zeitkonstante und Analogäquivalent Der einfachste Filter ist der Exponentialfilter. Es hat nur einen Abstimmungsparameter (außer dem Probenintervall). Es erfordert die Speicherung nur einer Variablen - der vorherigen Ausgabe. Es ist ein IIR (autoregressive) Filter - die Auswirkungen einer Eingangsveränderung Zerfall exponentiell, bis die Grenzen der Displays oder Computer Arithmetik verstecken. In verschiedenen Disziplinen wird die Verwendung dieses Filters auch als 8220exponentielle Glättung8221 bezeichnet. In einigen Disziplinen wie der Investitionsanalyse wird der exponentielle Filter als 8220Exponential Weighted Moving Average8221 (EWMA) oder nur 8220Exponential Moving Average8221 (EMA) bezeichnet. Dies missbräuchlich die traditionelle ARMA 8220moving average8221 Terminologie der Zeitreihenanalyse, da es keinen Eingabehistorie gibt, der verwendet wird - nur die aktuelle Eingabe. Es ist das diskrete Zeit-Äquivalent der 8220 erster Ordnung lag8221, die üblicherweise in der analogen Modellierung von kontinuierlichen Zeitsteuerungssystemen verwendet wird. In elektrischen Schaltkreisen ist ein RC-Filter (Filter mit einem Widerstand und einem Kondensator) eine Verzögerung erster Ordnung. Bei der Betonung der Analogie zu analogen Schaltungen, ist der einzige Tuning-Parameter die 8220time constant8221, in der Regel als klein geschriebenen griechischen Buchstaben Tau () geschrieben. Tatsächlich entsprechen die Werte bei den diskreten Abtastzeiten genau der äquivalenten kontinuierlichen Zeitverzögerung mit der gleichen Zeitkonstante. Die Beziehung zwischen der digitalen Implementierung und der Zeitkonstante wird in den folgenden Gleichungen gezeigt. Exponentielle Filtergleichungen und Initialisierung Das Exponentialfilter ist eine gewichtete Kombination der vorherigen Schätzung (Ausgabe) mit den neuesten Eingangsdaten, wobei die Summe der Gewichtungen gleich 1 ist, so dass die Ausgabe mit dem Eingang im stationären Zustand übereinstimmt. Nach der bereits eingeführten Filternotation ist y (k) ay (k - 1) (1 - a) x (k) wobei x (k) die Roheingabe zum Zeitschritt ky (k) die gefilterte Ausgabe zum Zeitschritt ka ist Ist eine Konstante zwischen 0 und 1, normalerweise zwischen 0,8 und 0,99. (A-1) oder a wird manchmal die 8220-Glättungskonstante8221 genannt. Für Systeme mit einem festen Zeitschritt T zwischen Abtastwerten wird die Konstante 8220a8221 nur dann berechnet und gespeichert, wenn der Anwendungsentwickler einen neuen Wert der gewünschten Zeitkonstante angibt. Bei Systemen mit Datenabtastung in unregelmäßigen Abständen muss bei jedem Zeitschritt die exponentielle Funktion verwendet werden, wobei T die Zeit seit dem vorhergehenden Abtastwert ist. Der Filterausgang wird normalerweise initialisiert, um dem ersten Eingang zu entsprechen. Wenn die Zeitkonstante 0 nähert, geht a auf Null, so dass keine Filterung 8211 der Ausgang dem neuen Eingang entspricht. Da die Zeitkonstante sehr groß wird, werden Ansätze 1, so dass neue Eingabe fast ignoriert wird 8211 sehr starkes Filtern. Die obige Filtergleichung kann in folgendes Vorhersagekorrektor-Äquivalent umgeordnet werden: Diese Form macht deutlich, dass die variable Schätzung (Ausgabe des Filters) unverändert von der vorherigen Schätzung y (k-1) plus einem Korrekturterm basiert wird Auf die unerwartete 8220innovation8221 - die Differenz zwischen dem neuen Eingang x (k) und der Vorhersage y (k-1). Diese Form ist auch das Ergebnis des Ableitens des Exponentialfilters als einfacher Spezialfall eines Kalman-Filters. Die die optimale Lösung für ein Schätzproblem mit einem bestimmten Satz von Annahmen ist. Schrittantwort Eine Möglichkeit, den Betrieb des Exponentialfilters zu visualisieren, besteht darin, sein Ansprechen über die Zeit auf eine Stufeneingabe aufzuzeichnen. Das heißt, beginnend mit dem Filtereingang und dem Ausgang bei 0 wird der Eingangswert plötzlich auf 1 geändert. Die resultierenden Werte sind nachstehend aufgetragen: In dem obigen Diagramm wird die Zeit durch die Filterzeitkonstante tau geteilt, so daß man leichter prognostizieren kann Die Ergebnisse für einen beliebigen Zeitraum, für jeden Wert der Filterzeitkonstante. Nach einer Zeit gleich der Zeitkonstante steigt der Filterausgang auf 63,21 seines Endwertes an. Nach einer Zeit gleich 2 Zeitkonstanten steigt der Wert auf 86,47 seines Endwertes an. Die Ausgänge nach Zeiten gleich 3,4 und 5 Zeitkonstanten sind jeweils 95,02, 98,17 bzw. 99,33 des Endwerts. Da der Filter linear ist, bedeutet dies, dass diese Prozentsätze für jede Größenordnung der Schrittänderung verwendet werden können, nicht nur für den hier verwendeten Wert 1. Obwohl die Stufenantwort in der Theorie aus praktischer Sicht eine unendliche Zeit in Anspruch nimmt, sollte man an den exponentiellen Filter 98 bis 99 8220done8221 denken, der nach einer Zeit gleich 4 bis 5 Filterzeitkonstanten reagiert. Variationen des Exponentialfilters Es gibt eine Variation des exponentiellen Filters, der so genannte 8220nonlineare Exponentialfilter8221 Weber, 1980. Es ist beabsichtigt, Rauschen innerhalb einer bestimmten 8220 typischen Amplitude stark zu filtern, reagiert aber schneller auf größere Änderungen. Copyright 2010 - 2013, Greg Stanley Teilen Sie diese Seite:

Comments