Ist es möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Samples zu implementieren. Ich habe festgestellt, dass ich ein bisschen optimieren kann, indem ich eine Fenstergröße, die eine Kraft von zwei, um Bit-Verschiebung statt zu teilen, aber Nicht brauchen einen Puffer wäre nett Gibt es eine Möglichkeit, ein neues gleitendes durchschnittliches Ergebnis nur als eine Funktion des alten Ergebnisses und der neuen Probe auszudrücken. Define ein Beispiel gleitenden Durchschnitt, über ein Fenster von 4 Samples zu sein. Add neue Probe eA Gleitender Durchschnitt kann rekursiv umgesetzt werden, aber für eine genaue Berechnung des gleitenden Mittelpunktes musst du dich an den ältesten Input-Sample in der Summe erinnern, dh der a in deinem Beispiel Für eine Länge N gleitenden Durchschnitt berechnen sie. wobei ist das Ausgangssignal und xn Ist das Eingangssignal Eq 1 kann rekursiv geschrieben werden. So müssen Sie sich immer an die Probe x nN erinnern, um zu berechnen 2.As, die von Conrad Turner angezeigt werden, können Sie ein unendlich langes exponentielles Fenster verwenden, das Ihnen erlaubt, zu berechnen Die Ausgabe nur aus der Vergangenheit Ausgang und die aktuelle input. but dies ist nicht ein Standard ungewichtet gleitenden Durchschnitt, sondern ein exponentiell gewichtet gleitenden Durchschnitt, wo Proben weiter in der Vergangenheit erhalten ein kleineres Gewicht, aber zumindest in der Theorie Sie nie vergessen, die Gewichte Nur kleiner und kleiner für Proben weit in der Vergangenheit. Ich habe einen gleitenden Durchschnitt ohne individuellen Element Speicher für ein GPS-Tracking-Programm, das ich schrieb. Ich beginne mit 1 Probe und teilen durch 1, um die aktuelle avg. I dann fügen Sie anothe Probe und Teilen sich mit 2 auf die aktuelle avg. Dies geht weiter, bis ich auf die Länge des durchschnittlichen. Jede Zeit später, füge ich in die neue Probe, bekomm den Durchschnitt und entfernen Sie diesen Durchschnitt aus der total. Ich bin kein Mathematiker aber das Schien wie ein guter Weg, um es zu tun Ich dachte, es würde den Magen eines echten Mathe-Kerl drehen, aber es stellt sich heraus, es ist eine der akzeptierten Möglichkeiten, es zu tun Und es funktioniert gut Nur daran erinnern, dass je höher Ihre Länge, je langsamer es ist Nach dem, was du dir folgen möchtest, das kann die meiste Zeit nicht ausmachen, aber wenn du Satelliten verfolgst, wenn du langsam bist, könnte der Weg weit von der tatsächlichen Position entfernt sein und es wird schlecht aussehen Du könntest eine Lücke zwischen dem Sat und den hinteren Punkten haben Ich wählte eine Länge von 15 aktualisiert 6 mal pro Minute, um ausreichende Glättung und nicht zu weit von der tatsächlichen Sat-Position mit dem geglätteten Pfad dots. answered 16. November 16 um 23 03.initialize insgesamt 0, zählen 0 jedes Mal sehen ein neues Value. Then eine Eingabe scanf, man add add total newValue, eine Inkrementzählung, eine geteilte durchschnittliche Gesamtzählung. Dies wäre ein gleitender Durchschnitt über allen inputs. To, um den Durchschnitt über nur die letzten 4 Eingänge zu berechnen, würde 4 Eingabevariablen erfordern, vielleicht kopieren Jeder Eingang zu einem älteren Eingang variabel, dann die Berechnung der neuen gleitenden Durchschnitt als Summe der 4 inputvariables, geteilt durch 4 richtige Verschiebung 2 wäre gut, wenn alle Eingänge waren positiv, um die durchschnittliche Berechnung. Erwerben 3. Februar 15 um 4 06.That Wird tatsächlich den Gesamtdurchschnitt berechnen und NICHT der gleitende Durchschnitt Wenn der Zählwert größer wird, wird der Einfluss einer neuen Eingabeprobe verschwindend klein Hilmar 3. Februar 15 um 13 53. Ihre Antwort.2017 Stack Exchange, Inc. Der Moving Average als Filter Gleitender Durchschnitt wird oft zum Glätten von Daten in Gegenwart von Rauschen verwendet Der einfache gleitende Durchschnitt wird nicht immer als der Finite Impulse Response FIR Filter erkannt, der es ist, während er tatsächlich einer der häufigsten Filter in der Signalverarbeitung ist. Behandeln ihn als Filter Erlaubt es, zum Beispiel mit Fenster-Sinc-Filtern zu vergleichen, siehe die Artikel auf Tiefpass-Hochpass - und Bandpass - und Bandsperrfiltern für Beispiele für diejenigen Der Hauptunterschied zu diesen Filtern besteht darin, dass der gleitende Durchschnitt für Signale geeignet ist Für die die nützlichen Informationen in dem Zeitbereich enthalten sind, von denen Glättungsmessungen durch Mittelung ein erstklassiges Beispiel sind. Window-Sinc-Filter sind dagegen starke Performer im Frequenzbereich mit Entzerrung in der Audioverarbeitung als typisches Beispiel Detaillierterer Vergleich beider Filtertypen in der Zeitdomäne vs Frequency Domain Performance von Filtern Wenn Sie Daten haben, für die sowohl die Zeit als auch die Frequenzdomäne wichtig sind, dann möchten Sie vielleicht einen Blick auf Variationen über den Moving Average, die eine präsentiert Anzahl der gewichteten Versionen des gleitenden Durchschnitts, die besser sind. Der gleitende Durchschnitt der Länge N kann definiert werden, wie geschrieben, wie es typischerweise implementiert wird, mit dem aktuellen Ausgangssample als Durchschnitt der vorherigen N Samples Als Filter gesehen, Der gleitende Durchschnitt führt eine Faltung der Eingangsfolge xn mit einem rechteckigen Puls der Länge N und der Höhe 1 N durch, um den Bereich des Pulses und damit die Verstärkung des Filters zu machen. In der Praxis ist es am besten, N zu nehmen Ungerade Obwohl ein gleitender Durchschnitt auch mit einer geraden Anzahl von Samples berechnet werden kann, hat der Einsatz eines ungeraden Wertes für N den Vorteil, dass die Verzögerung des Filters eine ganzzahlige Anzahl von Samples ist, da die Verzögerung eines Filters mit N Samples genau ist N-1 2 Der gleitende Durchschnitt kann dann exakt mit den ursprünglichen Daten ausgerichtet werden, indem er sie durch eine ganzzahlige Anzahl von Samples verschoben wird. Time Domain. Seit der gleitende Durchschnitt ist eine Faltung mit einem rechteckigen Puls, seine Frequenzantwort ist eine Sinc-Funktion Dies macht Es ist so etwas wie das Dual des Fenster-Sinc-Filters, da das eine Faltung mit einem Sinc-Puls ist, der zu einer rechtwinkligen Frequenzantwort führt. Es ist diese Sinc-Frequenzantwort, die den gleitenden Durchschnitt zu einem schlechten Performer im Frequenzbereich macht Sehr gut im Zeitbereich ausläuft Daher ist es perfekt, um Daten zu sperren, um Rauschen zu entfernen, während gleichzeitig noch eine schnelle Schrittantwort beibehalten wird. Abbildung 1.Figur 1 Glättung mit einem gleitenden Durchschnittsfilter. Für das typische Additive White Gaussian Noise AWGN das Wird oft angenommen, dass die Mittelung von N Abtastwerten die Wirkung hat, das SNR um einen Faktor von sqrt N zu erhöhen. Da das Rauschen für die einzelnen Proben unkorreliert ist, gibt es keinen Grund, jede Probe unterschiedlich zu behandeln. Daher ist der gleitende Durchschnitt, der jedem Sample die Das gleiche Gewicht, wird die maximale Menge an Rauschen für eine gegebene Schritt Antwort Schärfe loszuwerden. Weil es ein FIR-Filter ist, kann der gleitende Durchschnitt durch Faltung implementiert werden Es wird dann die gleiche Effizienz oder Mangel an es wie jeder andere FIR-Filter Allerdings kann es auch rekursiv in einer sehr effizienten Weise implementiert werden. Es folgt direkt aus der Definition, dass diese Formel das Ergebnis der Ausdrücke für yn und yn 1 ist, wo wir uns bemerken, dass die Änderung zwischen yn 1 und yn Ist, dass am Ende ein zusätzlicher Term xn 1 N erscheint, während der Term x nN 1 N von Anfang an entfernt wird. In praktischen Anwendungen ist es oft möglich, die Division durch N für jeden Term zu verlassen, indem die resultierende Verstärkung von kompensiert wird N an einem anderen Ort Diese rekursive Umsetzung wird viel schneller als die Faltung sein Jeder neue Wert von y kann mit nur zwei Hinzufügungen berechnet werden, anstatt der N Ergänzungen, die für eine einfache Implementierung der Definition notwendig wäre. Eine Sache, mit der man achten kann Rekursive Umsetzung ist, dass Rundungsfehler akkumulieren Dies kann oder auch kein Problem für Ihre Anwendung sein, aber es bedeutet auch, dass diese rekursive Umsetzung tatsächlich besser funktionieren mit einer Integer-Implementierung als mit Gleitkommazahlen Dies ist ziemlich ungewöhnlich, da eine schwimmende Punkt-Implementierung ist in der Regel einfacher. Die Schlussfolgerung von all dies muss sein, dass Sie nie unterschätzen die Nützlichkeit der einfachen gleitenden durchschnittlichen Filter in Signalverarbeitung Anwendungen. Filter Design Tool. Dieser Artikel wird mit einem Filter Design-Tool Experiment mit verschiedenen Werten für N ergänzt Und visualisiere die resultierenden Filter Versuche es jetzt. Ich weiß, das ist erreichbar mit Boost wie pro. But ich wirklich gerne vermeiden, Boost Ich habe gegoogelt und nicht gefunden, alle geeigneten oder lesbaren Beispiele. Basically Ich möchte den gleitenden Durchschnitt eines Laufenden Stream von einem Strom von Gleitkommazahlen mit den neuesten 1000 Zahlen als Datenbeispiel. Was ist der einfachste Weg, dies zu erreichen. Ich experimentierte mit der Verwendung eines kreisförmigen Arrays, exponentiell gleitenden Durchschnitt und ein einfacher gleitender Durchschnitt und fand, dass die Ergebnisse aus dem kreisförmigen Array passte meine Bedürfnisse best. asked Jun 12 12 bei 4 38.Wenn Ihre Bedürfnisse einfach sind, können Sie nur versuchen, mit einem exponentiellen gleitenden Durchschnitt. Sie einfach, Sie machen eine Akkumulator-Variable, und wie Ihr Code sieht bei jedem Beispiel, der Code aktualisiert den Akkumulator mit dem neuen Wert Du wählst eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen dies. Sie müssen nur einen Wert von Alpha finden, wo die Wirkung einer bestimmten Probe nur für etwa 1000 Proben dauert. Hmm, ich bin nicht wirklich sicher, dass dies für dich passiert ist, jetzt da ich es hier anhabe Das Problem ist, dass 1000 ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt ist Ich bin mir nicht sicher, dass es ein Alpha gibt, das den Durchschnitt über die Die letzten 1000 Nummern, ohne Unterlauf in der Gleitkomma-Berechnung Aber wenn man einen kleineren Durchschnitt wünscht, wie 30 Zahlen oder so, ist dies eine sehr einfache und schnelle Art und Weise zu tun it. answered Jun 12 12 bei 4 44. 1 auf deinem Post The Exponentieller gleitender Durchschnitt kann es ermöglichen, dass das Alpha variabel ist. So kann es verwendet werden, um Zeitbasis-Mittelwerte zu berechnen, z. B. Bytes pro Sekunde Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde beträgt, lassen Sie alpha 1 1 sein. Andernfalls können Sie es zulassen Alpha be usecs seit letzter Aktualisierung 1000000 jxh Jun 12 12 at 6 21.Basically Ich möchte den gleitenden Durchschnitt eines laufenden Streams von einem Strom von Gleitkommazahlen mit den neuesten 1000 Zahlen als Datenbeispiel verfolgen. Hinweis, dass die unten aktualisiert Die Summe als Elemente als addiert ersetzt, vermeiden kostspielige ON-Traversal, um die Summe zu berechnen - benötigt für den Durchschnitt - auf Nachfrage. Total ist ein anderer Parameter von T zu unterstützen, zB mit einer langen langen, wenn insgesamt 1000 lange s, ein int für char S, oder ein doppeltes bis total float s. This ist ein bisschen fehlerhaft, dass Numsamples an INTMAX vorbeikommen könnten - wenn es Ihnen egal ist, dass Sie eine vorzeichenlose lange lange benutzen oder ein zusätzliches bool Datenelement verwenden können, um aufzuzeichnen, wenn der Container zum ersten Mal beim Radfahren gefüllt wird Numsamples um das Array am besten dann umbenannt etwas Unschuldiges wie pos. answered Jun 12 12 bei 5 19.on geht davon aus, dass void Operator T Probe ist eigentlich void Operator T Probe oPless Jun 8 14 bei 11 52. oPless ahhh gut gesichtet tatsächlich habe ich für sie gemeint Zu leeren Betreiber T Probe aber natürlich könnten Sie verwenden, was Notation Sie mochten, beheben, danke Tony D Juni 8 14 um 14 27.
No comments:
Post a Comment