Ein einfach zu bedienender digitaler Filter Der exponentielle gleitende Durchschnitt (EMA) ist ein Typ des unendlichen Impulsantwortfilters (IIR), der in vielen eingebetteten DSP-Anwendungen verwendet werden kann. Es benötigt nur wenig RAM und Rechenleistung. Was ist ein Filter Filter kommen sowohl in analogen und digitalen Formen und existieren, um bestimmte Frequenzen aus einem Signal zu entfernen. Ein übliches Analogfilter ist das unten gezeigte Tiefpass-RC-Filter. Analoge Filter zeichnen sich durch ihre Frequenzantwort aus, wie viel die Frequenzen gedämpft (Amplitudengang) und verschoben (Phasengang) sind. Der Frequenzgang kann unter Verwendung einer Laplace-Transformation analysiert werden, die eine Übertragungsfunktion in der S-Domäne definiert. Für die obige Schaltung ist die Übertragungsfunktion gegeben durch: Wenn R gleich 1 Kiloohm und C gleich einem Mikrofarad ist, ist die Betragsantwort unten gezeigt. Beachten Sie, dass die x-Achse logarithmisch ist (jede Markierung ist 10 Mal größer als die letzte). Die y-Achse ist in Dezibel (das ist eine logarithmische Funktion des Ausgangs). Die Grenzfrequenz für diesen Filter beträgt 1000 rad oder 160 Hz. Dies ist der Punkt, bei dem weniger als die Hälfte der Leistung bei einer gegebenen Frequenz vom Eingang zum Ausgang des Filters übertragen wird. Bei der Abtastung eines Signals mit einem Analog-Digital-Wandler (ADC) müssen analoge Filter in eingebetteten Ausführungen verwendet werden. Der ADC erfasst nur Frequenzen, die bis zur Hälfte der Abtastfrequenz liegen. Wenn der ADC beispielsweise 320 Abtastungen pro Sekunde erfasst, wird das Filter (mit einer Grenzfrequenz von 160 Hz) zwischen dem Signal und dem ADC-Eingang platziert, um ein Aliasing zu verhindern (was ein Phänomen ist, bei dem höhere Frequenzen in dem abgetasteten Signal auftreten Niedrigere Frequenzen). Digitale Filter Digitale Filter dämpfen Frequenzen in der Software anstatt analoge Komponenten. Ihre Implementierung beinhaltet das Abtasten der analogen Signale mit einem ADC, wobei dann ein Softwarealgorithmus angewendet wird. Zwei gemeinsame Designansätze für die digitale Filterung sind FIR-Filter und IIR-Filter. FIR Filter Die Finite Impulse Response (FIR) Filter verwenden eine endliche Anzahl von Samples, um den Ausgang zu erzeugen. Ein einfacher gleitender Durchschnitt ist ein Beispiel eines Tiefpass-FIR-Filters. Höhere Frequenzen werden abgeschwächt, da die Mittelung das Signal glättet. Der Filter ist endlich, weil die Ausgabe des Filters durch eine endliche Anzahl von Eingangsabtastwerten bestimmt wird. Als Beispiel addiert ein 12-Punkt-Gleit-Mittelfilter die 12 jüngsten Abtastwerte, dividiert dann durch 12. Die Ausgabe von IIR-Filtern wird durch (bis zu) einer unendlichen Anzahl von Eingangsabtastwerten bestimmt. IIR-Filter Infinite Impulse Response (IIR) - Filter sind eine Art von Digitalfiltern, bei denen der Ausgang theoretisch in jedem Fall durch einen Eingang beeinflusst wird. Der exponentielle gleitende Durchschnitt ist ein Beispiel eines Tiefpass-IIR-Filters. Exponential Moving Average Filter Ein exponentieller gleitender Durchschnitt (EMA) wendet exponentielle Gewichte für jede Probe an, um einen Durchschnitt zu berechnen. Obwohl dies kompliziert scheint, ist die Gleichung, die in der digitalen Filterung Parlance als die Differenzgleichung zur Berechnung der Ausgabe bekannt ist, einfach. In der folgenden Gleichung ist y die Ausgabe x ist die Eingabe und alpha ist eine Konstante, die die Grenzfrequenz festlegt. Um zu analysieren, wie sich dieser Filter auf die Frequenz des Ausgangs auswirkt, wird die Z-Domänenübertragungsfunktion verwendet. Die Amplitudenantwort ist unten für Alpha gleich 0,5 gezeigt. Die y-Achse ist wiederum in Dezibel dargestellt. Die x-Achse ist logarithmisch von 0,001 bis pi. Die Real-Frequenz-Frequenz ordnet der x-Achse zu, wobei Null die Gleichspannung ist und pi gleich der Hälfte der Abtastfrequenz ist. Alle Frequenzen, die größer als die Hälfte der Abtastfrequenz sind, werden gelöscht. Wie erwähnt, kann ein analoges Filter praktisch alle Frequenzen im digitalen Signal unterhalb der halben Abtastfrequenz sicherstellen. Der EMA-Filter ist aus zwei Gründen vorteilhaft in eingebetteten Konstruktionen. Erstens ist es einfach, die Grenzfrequenz einzustellen. Eine Verringerung des Wertes von Alpha verringert die Grenzfrequenz des Filters, wie durch Vergleich der obigen Alpha-0,5-Kurve mit der unten gezeigten Kurve mit alpha 0,1 dargestellt wird. Zweitens ist die EMA einfach zu kodieren und erfordert nur eine geringe Menge an Rechenleistung und Speicher. Die Code-Implementierung des Filters verwendet die Differenzgleichung. Es gibt zwei Multiplikationsoperationen und eine Additionsoperation für jeden Ausgang, der die Operationen ignoriert, die zum Runden von Festkomma-Mathematik erforderlich sind. Nur das aktuellste Sample muss im RAM gespeichert werden. Dies ist wesentlich geringer als die Verwendung eines einfachen gleitenden Durchschnittsfilters mit N Punkten, die N Multiplikations - und Additionsoperationen sowie N Samples, die im RAM gespeichert werden sollen, erfordern. Der folgende Code implementiert den EMA-Filter mit 32-Bit-Fixpunkt-Mathematik. Der folgende Code ist ein Beispiel für die Verwendung der oben genannten Funktion. Fazit Filter, sowohl analoge als auch digitale, sind ein wesentlicher Bestandteil eingebetteter Designs. Sie ermöglichen es Entwicklern, unerwünschte Frequenzen zu befreien, wenn sie die Sensoreingänge analysieren. Damit digitale Filter nützlich sind, müssen analoge Filter alle Frequenzen über die Hälfte der Abtastfrequenz entfernen. Digitale IIR-Filter können leistungsstarke Werkzeuge in Embedded-Design, wo Ressourcen begrenzt werden. Der exponentielle gleitende Durchschnitt (EMA) ist ein Beispiel eines solchen Filters, der in eingebetteten Entwürfen wegen der niedrigen Gedächtnis - und Berechnungsenergieanforderungen gut funktioniert. Ich weiß, dass dieses mit Aufladung wie pro erreichbar ist: Aber ich möchte wirklich vermeiden, Aufstieg zu vermeiden. Ich habe gegoogelt und keine geeigneten oder lesbaren Beispiele gefunden. Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Gleitkommazahlstroms mit den letzten 1000 Zahlen als Datenprobe verfolgen. Was ist der einfachste Weg, um dies zu erreichen, experimentierte ich mit einem kreisförmigen Array, exponentiellen gleitenden Durchschnitt und einem einfacheren gleitenden Durchschnitt und festgestellt, dass die Ergebnisse aus dem kreisförmigen Array meine Bedürfnisse am besten geeignet. Wenn Ihre Bedürfnisse sind einfach, können Sie nur versuchen, mit einem exponentiellen gleitenden Durchschnitt. Setzen Sie einfach, Sie eine Akkumulator-Variable, und wie Ihr Code sieht auf jede Probe, aktualisiert der Code den Akkumulator mit dem neuen Wert. Sie wählen eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen Sie: Sie müssen nur einen Wert von Alpha zu finden, wo die Wirkung einer gegebenen Probe nur für etwa 1000 Proben dauert. Hmm, Im nicht wirklich sicher, dass dies für Sie geeignet ist, jetzt, dass Ive es hier. Das Problem ist, dass 1000 ist ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt Im nicht sicher, gibt es ein Alpha, die den Durchschnitt über die letzten 1000 Zahlen, ohne Unterlauf in der Gleitkomma Berechnung. Aber, wenn Sie einen kleineren Durchschnitt wünschen, wie 30 Zahlen oder so, dieses ist eine sehr einfache und schnelle Weise, es zu tun. Beantwortet Jun 12 12 at 4:44 1 auf Ihrem Beitrag. Der exponentielle gleitende Durchschnitt kann zulassen, dass das Alpha variabel ist. Somit kann dies dazu verwendet werden, Zeitbasisdurchschnitte (z. B. Bytes pro Sekunde) zu berechnen. Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde beträgt, lassen Sie Alpha 1.0 sein. Andernfalls können Sie Alpha zulassen (usecs seit letztem update1000000). Ndash jxh Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Gleitkommazahls mit den neuesten 1000 Zahlen als Datenbeispiel zu verfolgen. Beachten Sie, dass im Folgenden die Summe als Elemente als addiert ergänzt wird, wobei kostspielige O (N) - Transversionen vermieden werden, um die Summe zu berechnen, die für den durchschnittlichen Bedarf erforderlich ist. Insgesamt wird ein anderer Parameter von T gebildet, um z. B. Mit einer langen langen, wenn insgesamt 1000 lange s, eine int für char s, oder eine doppelte bis total float s. Dies ist ein wenig fehlerhaft, dass Nennsignale an INTMAX vorbeiziehen könnten - wenn Sie darauf achten, dass Sie ein langes langes nicht signiertes verwenden konnten. Oder verwenden Sie ein zusätzliches Bool-Datenelement, um aufzuzeichnen, wenn der Container zuerst gefüllt wird, während numsamples rund um das Array (am besten dann umbenannt etwas harmlos wie pos). Man nehme an, daß der quadratische Operator (T-Abtastwert) tatsächlich quadratischer Operator (T-Abtastwert) ist. Ndash oPless Jun 8 14 um 11:52 Uhr oPless ahhh. Gut beobachtet. Eigentlich meinte ich, dass es sich um void operator () (T sample) handelt, aber natürlich könntet ihr auch irgendeine Notation verwenden, die ihr mochtet. Wird beheben, danke. Ndash Tony D Jun 8 14 am 14: 27GIT Repositories Indexseite aller GIT Repositories, die von diesem Bediener über HTTPS kloniert werden. Bersichtsseite aller GIT-Repositories, die von diesem Server aus ber git clone (HTTPS) erreichbar sind. Ein Bündel von Diensteskripts zum Konvertieren, Analysieren und Generieren von Daten. Ein paar Dienstleistungen zum Konvertieren, Analysieren und Generieren von Daten. Swlib (PHP) Eine PHP-Bibiothek mit: Wrapperklassen fr Dateisystemfunktionen, Tracing, Sessions, Ausgabepufferung lokalisierbare Fehlermeldungen, implizit Umwandlung von Fehlern in Ausnahmen Kommandozeilen-Ausfrhungen und Abfangen von STDOUT, STDERR mit Callbacks. Kalender und Datumsfunktionalitt elaborierter FFmpeg Wrapper (Metadaten und Konvertierung von Audio Video) OpenSSH Key-Generierung und - Verwaltung automatische Erstellung von Podcast-Feeds, RSS Feed Renderer Renderer von LaTeX-Formeln. Eine kleine PHP-Bibliothek enthält: Wrapper-Klassen für Dateisystemfunktionen, Tracing, Sessions, Ausgabepufferung lokalisierbarer Fehlermeldungen, implizite Konvertierung von Fehlern in Ausnahmen CLI-Programmausführung mit STDOUT STDERR-Abruf (optional mit Callbacks) Datums - und Kalenderfunktionalität (UTC, GM) ausgearbeiteter FFMPEG-Wrapper (Metadatenformat für Audio-Video lesen und konvertieren) OpenSSH-Schlüsselpaargenerator und - organizer Automatischer Podcast-Feedgenerator, RSS2-Renderer LaTeX-Formelrenderer. GNU octave web interface Eine Webschnittstelle für GNU Octave, die es erlaubt, wissenschaftliche Berechnungen aus Netbooks, Tabellen oder Smartphones durchzuführen. Die Schnittstelle bietet einen Webformulargenerator für Octave-Skriptparameter mit Vorvalidierung, automatische Skriptlistengenerierung sowie Präsentation von Ausgabetexten, Figuren und Dateien in einer Ausgabe-HTML-Seite. Ein Webinterface von GNU-Octave, mit den wissenschaftlichen Berechnungen von Netbooks, Tablets oder Smartphones aus durchgefhrt werden knnen. Die Schnittstelle beinhaltet einen Formulargenerator fr Octave-Scriptparameter, mit Einheiten und Einfabevalidierung. Textausgabe, Abbildungen und generierte Dateien werden abgefangen und in einer HTML-Seite angezeigt. Digitale Filter in C fr Embedded-Anwendungen Digitale Filter in C für den Einsatz in eingebetteten Anwendungen IIR Tiefpass-Beispiel Hier sehen Sie einen Tiefpaß erster Ordnung. Es hat ein ähnliches Verhalten wie ein analoger RC-Tiefpass (Widerstand und Kondensator). Es ist sehr schnell berechnet und gut für Anwendungen, wo Sie Rauschen aus Ihrem Eingangssignal entfernen möchten. Er benötigt zwei Konfigurationswerte, wobei die Summe von beiden 1 sein muss. Je höher der Coeff1 ist, desto mehr Rauschen wird entfernt, desto langsamer ist die Reaktion des gefilterten Ausgangs. Je höher der coeff0 ist, desto schneller ist der Ausgang, aber mehr Rauschen kann passieren. Die Beispielimplementation verwendet Fließkommazahlen, auf einem Mikrocontroller ist es oftmals sinnvoll, diese mit ganzen Zahlen zu ersetzen. IIR Tiefpass-Beispiel Hier eine Beispielimplementierung von einem Tiefpass. Er verhält sich wie ein analoger RC-Tiefpass (aus Widerstand und Kondensator). Es ist sehr schnell und gut wenn hochfrequente Strungen aus einem Eingabesignal entfernt werden sollen. Bentigt,. Je hher coeff1. Desto strker wird auch die Ausgabe des Filters. Je hher coeffs0. Deutsch - Übersetzung - Linguee als Übersetzung von "rauschen" vorschlagen Linguee - Wörterbuch Deutsch - Englisch Andere Leute übersetzten. Die Beispiel-Implementierung nutzt Fliekommazahlen, fr Microcontroller Wird stattdessen Integer-Variablen verwendet werden. Gleitender Durchschnitt Ein gleitender Durchschnittsfilter (oder Gleitfensterfilter) ist ein spezieller FIR-Filter, der schnell berechnet werden kann. Sie erstellen einfach den Durchschnitt über die letzten N Eingabewerte. Dieser Filter hat eine bessere Reaktionszeit als der IIR-Tiefpass, der vorher gezeigt wurde, und er löscht das Rauschen ziemlich moderat. Nachteil: Sie benötigen mehr Speicher. Wir verwenden einen Ringpuffer, um die Wertehistorie und eine Variable zu speichern, in der wir die Summe dieser Werte speichern. Wenn wir einen neuen Wert erhalten, subtrahieren wir einfach den ältesten Wert in der Historie, fügen den neuen Wert hinzu und überschreiben den ältesten Wert mit dem neuen Wert. Nach der Summe müssen wir uns nur durch die Anzahl der Werte teilen, die wir haben - und es gibt unsere gefilterte Ausgabe. Zuerst die Gleitkomma-Variante: Moving Average Ein Moving Average Filter (oder Sliding Window Filter) der Mittelwert der letzten N Eingabewerte. Wie der IIR Rauschunterdrckung. Nachteil: Er braucht Speicher, war auf kleinen Mikrocontrollern ein Problem sein knnte. Der Algorithmus berechnet einfach die Summe der Vergangenheitswerte geteilt durch die Anzahl an Vergangenheitswerten (Mittelwert eben). Mit einem kleinen Trick. Mit einem kleinen Trick. Wenn ein neuer Eingabewert kommt, so subtrahieren wir den Wert und addieren den neuen. Danach mssen wir das neue Egebnis. Erstmal die Floating Point Variante: Jetzt das gleiche mit Integer-Variablen. Wenn wir nicht über eine Gleitkommaeinheit verfügen, können wir etwas Zeit sparen und durch Kräfte von zwei rechts umschalten ein paar Bits teilen. Aber dann müssen Sie darauf achten, dass Ihr Ringpuffer 2BITS-Werte hat. Nun das Selbe mit Integern. Vielen Dank für Ihre Bewertung! Ich kann es nicht glauben. Das lsst auch fr alle Puffergren von 2BITS machen. Der Ringbuffer im Beispiel hat 8 Werte, und mit summe gtgt 3 haben wir die Summe durch 8 geteilt. Gemeinsame FIR Filter FIR Filter Die folgenden Quelltexte sind implementiert ein zyklisch auf viele FIR Filter. Wie beim Moving Average Filter (der einen FIR-Filter ist) mssen auch hier die Vergangenheitswerte gespeichert werden. Zudem gibt es einen Speicherbereich mit Koeffizienten, der so groß ist wie der Wertpuffer. Alles was der Filteralgorithmus ist, muss zusammengefaßt werden, und es werden alle diese Produkte zum Endergebnis aufzuaddieren. Die Anzahl und die Werte der Koeffizienten bestimmen, war der Filter tut. Er kann Tiefpass, Hochpass, Bandpass, Bandsperre und vieles mehr sein. Deutsch - Übersetzung - Linguee als Übersetzung von "imperator" vorschlagen Linguee - Wörterbuch Deutsch - Englisch ausschließlich englische Resultate für. Vor allem in DSPs sieht man daher MAC-Operationen, Multiply und Accumulate, d. h. In einem Schritt multiplizieren sie zwei Zahlen und addieren das Ergebnis zu einer Summe hinzu. Abhngig von den Features eines Controllers sollte auch noch von C auf Assembly ausgewichen werden (z. B. gibt es auch Prozessoren, die die MAC-Operation rechnen und im selben Schritt das nchste Wert-Koeffizient-Paar anvisieren, usw. usw.). Besser lesbar ist aber dieses Beispiel in C. Die Koeffizienten habe ich so gewhlt, dass diese FIR identisch mit dem Moving Average Filter ist. Es ist auch ein leicht nachvollziehbares Beispiel: Statt zum Schluss. Da kommt das Selbe raus. Weitere Filter: Filter für Erotikinhalte Suchergebnisse für: GNU Octave. (Die Software ist kostenlos). Erstmal mit Fliekommazahlen: Der Algorithmus ist recht selbsterklrend, zwei Sachen aber noch angemerkt: Wir fllen den Ringpuffer rckwrts, denn dann sind die Vergangenheitswerte zum Rechnen schon richtig geordnet. D. h. Der vorherige Wert ist nach vorn, der davor zwei nach vorn usw. Wir rechnen in zwei Schleifen, in der Schleife erspart bleibt. Deutsch - Übersetzung - Linguee als Übersetzung von "es kommt richtig" vorschlagen Linguee - Wörterbuch Deutsch - Englisch ausschließlich englische Resultate für. Und hier das ganze nochmals mit Festkomma-Arithmetik. Wir verwenden den Filter, der auch als fnfzehnten - genannt Q15 - Zahl bezeichnet wird. Die Integerwerte gehen von -35768 bis 35767, d. h. Der Integerwert 0x0001 entspricht dann 135768. Die 8 Koeffizienten geben wir auch nicht mit 1.08 an, sondern mit 357688 oder (1ltlt15) 8. Weiterhin mssen Wir beachten, dass beim Multiplizieren sich das Komma an das 30te bit heftet (gem ein Kilometer ist nicht 1000 Quadratmeter, sondern 1000000). Das wird nach dem Multiplizieren und Aufsummieren wieder das Komma um 15 bit nach unten geschoben, von Q30 nach Q15. Die dritte Sache: Wir mssen beim Multiply-And-Accumulate auf berlauf Prfen, das passiert im MAC Makro. Vierte Sache: Wir wollen runden. Also beladen wir 0,5 in die Summenvariable (den Akkumulator) und zwar in Q30. Das entspricht 1ltlt14. Der Rest ist wie bei der Festkomma-Rechnung. Hauptprogramm für die Beispiele In Kombination mit dem Makefile wurden die obigen Beispiele in separaten ausführbaren Dateien zusammengestellt. Dies ist das Hauptprogramm für alle von ihnen. Haupt-Programm in diesem Beispiel werden alle oben genannten Beispiel-Quelltexte in separaten Ausfhrbare Programm kompiliert. Dabei enthlt diese Datei die main () Funktion, welche sich zur Eingabe und Ausgabe kmmert. Sie ruft die jeweilige Filterinit () und Filter () Funktionen auf.
No comments:
Post a Comment