Monday, November 14, 2016

Moving Durchschnitt Filter Javascript

Vorhersage von Smoothing Techniques Diese Seite ist ein Teil der JavaScript E-Labs Lernobjekte für die Entscheidungsfindung. Andere JavaScript in dieser Serie sind unter verschiedenen Bereichen von Anwendungen im Abschnitt MENU auf dieser Seite kategorisiert. Eine Zeitreihe ist eine Folge von Beobachtungen, die zeitlich geordnet sind. Inhärent in der Sammlung von Daten über die Zeit genommen, ist eine Form der zufälligen Variation. Es gibt Methoden zur Verringerung der Annullierung der Wirkung aufgrund zufälliger Variation. Weit verbreitete Techniken sind Glättung. Diese Techniken, wenn richtig angewandt, zeigt deutlicher die zugrunde liegenden Trends. Geben Sie die Zeitreihe Row-weise in der Reihenfolge beginnend mit der linken oberen Ecke und den Parametern ein, und klicken Sie dann auf die Schaltfläche Berechnen, um eine Prognose für eine Periode zu erhalten. Blank Boxen sind nicht in den Berechnungen, sondern Nullen enthalten. Wenn Sie Ihre Daten eingeben, um von Zelle zu Zelle in der Daten-Matrix zu bewegen, verwenden Sie die Tabulatortaste nicht Pfeil oder geben Sie die Tasten ein. Merkmale der Zeitreihen, die durch die Untersuchung seines Graphen aufgezeigt werden könnten. Mit den prognostizierten Werten und dem Residualverhalten, Condition Prognose Modellierung. Moving Averages: Gleitende Durchschnitte zählen zu den beliebtesten Techniken für die Vorverarbeitung von Zeitreihen. Sie werden verwendet, um zufälliges weißes Rauschen aus den Daten zu filtern, um die Zeitreihe glatter zu machen oder sogar bestimmte in der Zeitreihe enthaltene Informationskomponenten zu betonen. Exponentialglättung: Dies ist ein sehr populäres Schema, um eine geglättete Zeitreihe zu erzeugen. Während in den gleitenden Durchschnitten die früheren Beobachtungen gleich gewichtet werden, weist Exponentialglättung exponentiell abnehmende Gewichte zu, wenn die Beobachtung älter wird. Mit anderen Worten, die jüngsten Beobachtungen sind relativ mehr Gewicht in der Prognose gegeben als die älteren Beobachtungen. Double Exponential Smoothing ist besser im Umgang mit Trends. Triple Exponential Smoothing ist besser im Umgang mit Parabeltrends. Ein exponentiell gewichteter gleitender Durchschnitt mit einer Glättungskonstanten a. Entspricht in etwa einem einfachen gleitenden Durchschnitt der Länge (d. h. Periode) n, wobei a und n durch a 2 / (n1) OR n (2 - a) / a verknüpft sind. So würde beispielsweise ein exponentiell gewichteter gleitender Durchschnitt mit einer Glättungskonstante gleich 0,1 etwa einem 19 Tage gleitenden Durchschnitt entsprechen. Und ein 40 Tage einfacher gleitender Durchschnitt würde etwa einem exponentiell gewichteten gleitenden Durchschnitt mit einer Glättungskonstanten gleich 0,04878 entsprechen. Holts Lineare Exponentialglättung: Angenommen, die Zeitreihe ist nicht saisonal, sondern zeigt Trend. Holts-Methode schätzt sowohl das aktuelle Niveau als auch den aktuellen Trend. Beachten Sie, dass der einfache gleitende Durchschnitt ein Spezialfall der exponentiellen Glättung ist, indem die Periode des gleitenden Mittelwertes auf den ganzzahligen Teil von (2-Alpha) / Alpha gesetzt wird. Für die meisten Geschäftsdaten ist ein Alpha-Parameter kleiner als 0,40 oft effektiv. Man kann jedoch eine Gittersuche des Parameterraums mit 0,1 bis 0,9 mit Inkrementen von 0,1 durchführen. Dann hat das beste Alpha den kleinsten mittleren Absolutfehler (MA Error). Wie man mehrere Glättungsmethoden miteinander vergleicht: Obwohl es numerische Indikatoren für die Beurteilung der Genauigkeit der Prognosetechnik gibt, besteht der am weitesten verbreitete Ansatz darin, einen visuellen Vergleich mehrerer Prognosen zu verwenden, um deren Genauigkeit zu beurteilen und zwischen den verschiedenen Prognosemethoden zu wählen. Bei diesem Ansatz muss man auf demselben Graphen die ursprünglichen Werte einer Zeitreihenvariablen und die vorhergesagten Werte aus verschiedenen Prognoseverfahren aufzeichnen und damit einen visuellen Vergleich erleichtern. Sie können die Vergangenheitsvorhersage von Smoothing Techniques JavaScript verwenden, um die letzten Prognosewerte basierend auf Glättungstechniken zu erhalten, die nur einen einzigen Parameter verwenden. Holt - und Winters-Methoden zwei bzw. drei Parameter, daher ist es keine leichte Aufgabe, die optimalen oder sogar nahezu optimalen Werte durch Versuch und Fehler für die Parameter auszuwählen. Die einzelne exponentielle Glättung betont die kurzreichweite Perspektive, die sie den Pegel auf die letzte Beobachtung setzt und basiert auf der Bedingung, dass es keinen Trend gibt. Die lineare Regression, die auf eine Linie der kleinsten Quadrate zu den historischen Daten (oder transformierten historischen Daten) passt, repräsentiert die lange Reichweite, die auf dem Grundtrend konditioniert ist. Holts lineare exponentielle Glättung erfasst Informationen über die jüngsten Trend. Die Parameter im Holts-Modell sind Ebenenparameter, die verringert werden sollten, wenn die Menge der Datenvariation groß ist, und der Trends-Parameter sollte erhöht werden, wenn die jüngste Trendrichtung durch das Kausale beeinflusst wird. Kurzfristige Prognose: Beachten Sie, dass jeder JavaScript auf dieser Seite eine einstufige Prognose zur Verfügung stellt. Um eine zweistufige Prognose zu erhalten. Fügen Sie einfach den prognostizierten Wert an das Ende der Zeitreihendaten und klicken Sie dann auf die Schaltfläche Berechnen. Sie können diesen Vorgang für ein paar Mal wiederholen, um die benötigten kurzfristigen Prognosen zu erhalten. Ich habe im Wesentlichen ein Array von Werten wie folgt: Das obige Array ist vereinfacht, Im sammeln 1 Wert pro Millisekunde in meinem realen Code und ich muss Verarbeiten die Ausgabe auf einem Algorithmus, den ich schrieb, um den nächsten Peak vor einem Zeitpunkt zu finden. Meine Logik schlägt fehl, weil in meinem Beispiel oben 0.36 die wahre Spitze ist, aber mein Algorithmus würde rückwärts schauen und sehen die sehr letzte Zahl 0.25 als die Spitze, als theres eine Abnahme zu 0.24 vor ihm. Das Ziel ist, diese Werte zu nehmen und einen Algorithmus auf sie, die glätten sie ein wenig, so dass ich mehr lineare Werte. (Dh: Id wie meine Ergebnisse curvy, nicht jaggedy) Ive wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter auf meine Werte anzuwenden. Wie kann ich dies tun Es ist wirklich schwer für mich, mathematische Gleichungen zu lesen, gehe ich viel besser mit Code. Wie verarbeite ich Werte in meinem Array, die Anwendung einer exponentiellen gleitenden Durchschnittsberechnung, um sie herauszufordern, um einen exponentiellen gleitenden Durchschnitt zu berechnen. Müssen Sie einige Zustand zu halten und Sie benötigen einen Tuning-Parameter. Dies erfordert eine kleine Klasse (vorausgesetzt, Sie verwenden Java 5 oder höher): Instantiate mit dem Decay-Parameter, die Sie wollen (kann Abstimmung sollte zwischen 0 und 1) und dann mit Average () zu filtern. Beim Lesen einer Seite auf einige mathematische Rekursion, alles, was Sie wirklich wissen müssen, wenn Sie es in Code ist, dass Mathematiker gerne Indizes in Arrays und Sequenzen mit Indizes schreiben. (Theyve einige andere Anmerkungen außerdem, die nicht helfen.) Jedoch ist die EMA ziemlich einfach, da Sie nur an einen alten Wert erinnern müssen, der keine komplizierten Zustandarrays erfordert. Beantwortet Feb 8 12 at 20:42 TKKocheran: Ziemlich viel. Isn39t es schön, wenn die Dinge einfach sein können (Wenn Sie mit einer neuen Sequenz beginnen, erhalten Sie einen neuen Mittelwert.) Beachten Sie, dass die ersten paar Begriffe in der gemittelten Sequenz um ein bisschen durch Randeffekte springen, aber Sie erhalten diese mit anderen gleitenden Durchschnitten auch. Allerdings ist ein guter Vorteil, dass Sie die gleitende durchschnittliche Logik in die Mittelung einwickeln und experimentieren können, ohne den Rest des Programms zu viel zu stören. Ndash Donal Fellows Ich habe eine harte Zeit, Ihre Fragen zu verstehen, aber ich werde versuchen, trotzdem zu beantworten. 1) Wenn Ihr Algorithmus 0,25 statt 0,36 gefunden hat, dann ist es falsch. Es ist falsch, weil es eine monotone Zunahme oder Abnahme (das ist immer nach oben oder immer nach unten). Wenn Sie ALLE Ihre Daten nicht klassifizieren, sind Ihre Datenpunkte - wie Sie sie darstellen - nichtlinear. Wenn Sie wirklich den maximalen Wert zwischen zwei Zeitpunkten finden wollen, dann schneiden Sie Ihr Array von tmin zu tmax und finden Sie das Maximum dieses Unterarrays. 2) Nun ist das Konzept der gleitenden Durchschnitte sehr einfach: vorstellen, dass ich die folgende Liste haben: 1.4, 1.5, 1.4, 1.5, 1.5. Ich kann es glätten, indem ich den Durchschnitt von zwei Zahlen: 1.45, 1.45, 1.45, 1.5. Beachten Sie, dass die erste Zahl ist der Durchschnitt von 1,5 und 1,4 (zweite und erste Zahlen) die zweite (neue Liste) ist der Durchschnitt von 1,4 und 1,5 (dritte und zweite alte Liste) die dritte (neue Liste) der Durchschnitt von 1,5 und 1,4 (Vierte und dritte), und so weiter. Ich könnte es Zeitraum drei oder vier gemacht haben, oder n. Beachten Sie, wie die Daten viel glatter sind. Ein guter Weg, um zu sehen, gleitende Durchschnitte bei der Arbeit ist, gehen Sie zu Google Finance, wählen Sie eine Aktie (versuchen Tesla Motors ziemlich volatil (TSLA)) und klicken Sie auf Technische Daten am unteren Rand des Diagramms. Wählen Sie Moving Average mit einer bestimmten Periode und Exponential gleitenden Durchschnitt, um ihre Differenzen zu vergleichen. Exponentielle gleitende Durchschnitt ist nur eine weitere Ausarbeitung dieser, aber gewichtet die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung nach hinten auszugleichen. Bitte lesen Sie den Wikipedia-Eintrag. Also, dies ist eher ein Kommentar als eine Antwort, aber die kleine Kommentar-Box war nur zu klein. Viel Glück. Wenn Sie Probleme mit der Mathematik haben, könnten Sie mit einem einfachen gleitenden Durchschnitt statt exponentiell gehen. Also die Ausgabe erhalten Sie die letzten x-Terme durch x geteilt werden. Ungetestetes Pseudocode: Beachten Sie, dass Sie die Anfangs - und Endteile der Daten behandeln müssen, da deutlich, dass Sie die letzten 5 Ausdrücke nicht durchschnittlich sind, wenn Sie auf Ihrem 2. Datenpunkt sind. Außerdem gibt es effizientere Methoden, diesen gleitenden Durchschnitt zu berechnen (Summe - älteste neueste), aber dies ist, um das Konzept von dem, was passiert ist zu bekommen. Wenn Sie möchten, dass ein rahmenunabhängiger Tiefpaßfilter (eine unendliche Impulsantwort oder IIR) auf einen Datenstrom anwenden, verwenden Sie diese Formel: filteredValue OldValue (newValue - oldValue) / (smoothing / timeSinceLastUpdate) Hintergrund Stellen Sie sich vor, Sie haben einen Datenstrom, der in das Rauschen kommt. Dies könnte die Bildrate eines Spiels sein, wobei die Mausbewegung des Benutzers eine Linie zeichnet, wobei die Spannung über einen Widerstand gemessen wird. Punkte, die eine laute Linie von Tausenden von Punkten zeichnen. Das Rauschen hat eine normale Verteilung um einen weich variierenden Wert mit zwei scharfen Wertsprüngen. Sie möchten diesen Wert grafisch darstellen, aber Sie möchten das Rauschen ausblenden. Eine Lösung ist ein Tiefpassfilter. Ein einfaches Tiefpassfilter Ähnlich wie bei einem Audio-Grafik-Equalizer mit nach oben gewählter Höhenmessung muffelt ein Tiefpaßfilter hochfrequente (schnelle) Änderungen des Signals. Anders als ein gleitender Durchschnitt. Es erfordert nur drei Zahlen, um das gesamte Spektrum der Wirkung, von No-Change-to-the-Eingang bis unnachgiebig-Schnecke-paced-Grafik zu decken. Ein Beispiel für die Verwendung eines Tiefpaßfilters zur Änderung von Werten eines Arrays mit JavaScript: Die gesamte Leistung des Filters liegt im Zeilenwert (currentValue - value) / Glättung. Dabei wird die Differenz zwischen dem neuen Wert und dem aktuellen (geglätteten) Wert gefunden, auf der Basis der Stärke des Filters schrumpft und dann dem geglätteten Wert hinzugefügt. Sie sehen, dass, wenn Glättung auf 1 gesetzt ist, der geglättete Wert immer der nächste Wert ist. Wenn die Glättung auf 2 eingestellt ist, bewegt sich der geglättete Wert jeweils auf halbem Weg zu jedem neuen Punkt auf jedem neuen Rahmen. Je größer der Glättungswert ist, desto weniger wird die geglättete Linie durch neue Änderungen gestört. Versuch es selber. Die grüne Linie ist der geglättete Wert unseres blauen Rauschens. Passen Sie die Glättung unten an und sehen Sie die Auswirkungen auf die Linie. Finden Sie einen Wert, den Sie denken, sieht glatt und schön, während immer noch eine gute Darstellung von was ist in den blauen Himmel. Eine einzelne Zeile, deren Anpassung auf dem Glättungswert basiert. Der Einfluss von niedrigeren Frameraten Wenn Sie wie ich sind, könnten Sie einen Glättungswert irgendwo zwischen 20 und 60 gewählt haben. Die höheren Werte glätten das Rauschen schön, auf Kosten einer leichten Verzögerung bei der Darstellung der beiden augenblicklichen, scharfen Signalsprünge. Allerdings waren nicht an einem guten Ort (noch). Wenn unsere Bildrate die Geschwindigkeit ändert, bei der der Vorgang abgetastet wurde, kann der Effekt unserer sorgfältig gewählten Glättung drastisch unterschiedliche Effekte haben. Die folgende Grafik zeigt die Effekte von 2x verringerter Bildrate (Magenta), 5facher Absenkung (rot) und variierender Abtastrate (gelb). Eine Glättung, die gut funktioniert mit einer hohen Abtastrate ist viel zu stark, wenn die Rate sinkt. (Wenn Sie die Unterschiede zwischen den Linien nicht sehen können, versuchen Sie, oben die Glättung oben zu drehen.) Drei Linien, die über der ursprünglichen Linie gezeichnet werden. Was wir brauchen, ist eine Formel, die Änderungen der Framerate berücksichtigt. Erreichen der Bildfrequenzunabhängigkeit Sie haben vielleicht bemerkt, dass es einen ähnlichen Effekt zwischen dem Erhöhen des Glättungswerts und der Senkung der Abtastrate gibt. In der Tat, es stellt sich heraus, dass sie mehr als ähnlich sind, sind sie gleichwertig. Eine Verdopplung der Glättung ist die gleiche wie eine Halbierung der Geschwindigkeit. Als solches wird nur eine kleine Tweak zu unserer Glättungsformel benötigt: value (currentValue - value) / (Glättung / timeSinceLastSample) Nachfolgend werden die verschiedenen Abtastraten mit Glättung basierend auf der Rate eingestellt. Obwohl sie leicht voneinander unterscheiden (auf der Grundlage der horrend lautesten Samples, auf die sie verriegeln) können Sie sehen, dass sie im Allgemeinen übereinstimmen, unabhängig von der Glättungseinstellung oben: Drei Linien, die über der ursprünglichen Linie aufgetragen werden. Schließlich ist hier ein Codeblock, der dem ähnlich ist, was ich benutze: Ich muss einen gleitenden durchschnittlichen Filter entwerfen, der eine Grenzfrequenz von 7,8 Hz hat. Ich habe gleitende durchschnittliche Filter vor verwendet, aber soweit ich weiß, ist der einzige Parameter, der eingegeben werden kann, die Anzahl der zu durchschnittlichen Punkte. Wie kann sich dies auf eine Grenzfrequenz beziehen Die Inverse von 7,8 Hz beträgt 130 ms und Im arbeiten mit Daten, die bei 1000 Hz abgetastet werden. Bedeutet dies implizieren, dass ich sollte eine gleitende durchschnittliche Filter-Fenstergröße von 130 Proben verwenden, oder gibt es etwas anderes, das ich hier fehlte, ist der Filter, der in der Zeitdomäne zu entfernen verwendet wird Das Rauschen hinzugefügt und auch für Glättung Zweck, aber wenn Sie die gleiche gleitende durchschnittliche Filter im Frequenzbereich für Frequenztrennung dann Leistung wird am schlimmsten. So dass in diesem Fall verwenden Frequenzbereich Filter ndash user19373 Feb 3 at 5:53 Der gleitende Durchschnitt Filter (manchmal auch umgangssprachlich als Boxcar-Filter) hat eine rechteckige Impulsantwort: Oder anders ausgedrückt: Denken Sie daran, dass eine diskrete Zeit Frequenz Frequenzgang ist Gleich der diskreten Zeit-Fourier-Transformation ihrer Impulsantwort, können wir sie wie folgt berechnen: Was am meisten für Ihren Fall interessiert ist, ist die Größenreaktion des Filters H (Omega). Mit ein paar einfachen Handgriffen können wir, dass in einer leichter zu begreifen Form erhalten: Das ist nicht aussehen kann leichter zu verstehen. Allerdings wegen Eulers Identität. Erinnern, dass: Daher können wir schreiben, die oben als: Wie ich schon sagte, was Sie wirklich besorgt ist die Größe der Frequenzgang. So können wir die Größenordnung der oben genannten zu vereinfachen, um es weiter zu vereinfachen: Hinweis: Wir sind in der Lage, die exponentiellen Begriffe aus, weil sie nicht beeinflussen die Größe des Ergebnisses e 1 für alle Werte von Omega. Da xy xy für irgendwelche zwei endlichen komplexen Zahlen x und y ist, können wir schließen, daß die Anwesenheit der exponentiellen Terme die Gesamtgrößenreaktion nicht beeinflußt (sie beeinflussen die Systemphasenreaktion). Die resultierende Funktion innerhalb der Größenklammern ist eine Form eines Dirichlet-Kerns. Sie wird manchmal als periodische sinc-Funktion bezeichnet, weil sie der sinc-Funktion etwas im Aussehen ähnelt, aber stattdessen periodisch ist. Wie auch immer, da die Definition der Cutoff-Frequenz etwas unterspezifiziert ist (-3 dB Punkt -6 dB Punkt erste sidelobe Null), können Sie die obige Gleichung, um für was auch immer Sie brauchen, zu lösen. Im Einzelnen können Sie Folgendes tun: Stellen Sie H (omega) auf den Wert ein, der der Filterantwort entspricht, die Sie bei der Cutoff-Frequenz wünschen. Set Omega gleich der Cutoff-Frequenz. Um eine kontinuierliche Frequenz auf den diskreten Zeitbereich abzubilden, denken Sie daran, dass osga 2pi frac, wobei fs Ihre Abtastrate ist. Finden Sie den Wert von N, der Ihnen die beste Übereinstimmung zwischen der linken und der rechten Seite der Gleichung gibt. Das sollte die Länge des gleitenden Durchschnitts sein. Wenn N die Länge des gleitenden Mittelwerts ist, dann ist eine angenäherte Grenzfrequenz F (gültig für N gt 2) bei der normalisierten Frequenz Ff / fs: Der umgekehrte Wert dieser Formel ist für große N asymptotisch korrekt und hat ungefähr 2-Fehler für N2 und weniger als 0,5 für N4. P. S. Nach zwei Jahren, hier schließlich, was war der Ansatz folgte. Das Ergebnis beruht auf der Annäherung des MA-Amplitudenspektrums um f0 als Parabel (2. Ordnung) nach MA (Omega) ca. 1 (frac - frac) Omega2, die in der Nähe des Nulldurchgangs von MA (Omega) Frac durch Multiplikation von Omega mit einem Koeffizienten, der MA (Omega), ca. 10.907523 (frac-frac) Omega2 ergibt. Die Lösung von MA (Omega) - frac 0 liefert die obigen Ergebnisse, wobei 2pi F Omega. Alle der oben genannten bezieht sich auf die -3dB abgeschnitten Frequenz, das Thema dieser Post. Manchmal ist es zwar interessant, ein Dämpfungsprofil im Stoppband zu erhalten, das vergleichbar ist mit dem eines 1. Ordnung IIR-Tiefpassfilters (Einpol-LPF) mit einer gegebenen -3dB-Grenzfrequenz (ein solcher LPF wird auch Leaky-Integrator genannt, Mit einem Pol nicht genau an DC, aber nah an ihm). Tatsächlich haben sowohl der MA und der 1. Ordnung IIR LPF -20dB / Dekade Slope im Stop-Band (man braucht ein größeres N als das, das in der Figur verwendet wird, N32, um dies zu sehen), während aber MA spektrale Nullen bei Fk hat / N und einer 1 / f-Evelope hat das IIR-Filter nur ein 1 / f-Profil. Wenn man ein MA-Filter mit ähnlichen Rauschfilterungs-Fähigkeiten wie dieses IIR-Filter erhalten möchte und die gleichgeschnittenen 3dB-Grenzfrequenzen anpaßt, würde er beim Vergleich der beiden Spektren erkennen, daß die Stoppbandwelligkeit des MA-Filters endet 3dB unter dem des IIR-Filters. Um die gleiche Stoppbandwelligkeit (d. h. dieselbe Rauschleistungsdämpfung) wie das IIR-Filter zu erhalten, können die Formeln wie folgt modifiziert werden: Ich fand das Mathematica-Skript zurück, wo ich die Unterbrechung für mehrere Filter einschließlich des MA-Werts berechnete. Das Ergebnis basiert auf der Annäherung des MA-Spektrums um f0 als Parabel nach MA (Omega) Sin (OmegaN / 2) / Sin (Omega / 2) Omega 2piF MA (F) ca. N1 / 6F2 (N-N3) pi2. Und Ableitung der Kreuzung mit 1 / sqrt von dort. Ndash Es ist möglich, einen gleitenden Durchschnitt in C ohne die Notwendigkeit für ein Fenster von Proben Ive gefunden, dass ich ein bisschen optimieren kann, indem Sie eine Fenstergröße, die eine Macht von zwei, um Bit-Verschiebung zu ermöglichen Anstatt zu teilen, aber nicht brauchen einen Puffer wäre schön. Gibt es eine Möglichkeit, ein neues gleitendes Durchschnittsergebnis nur als Funktion des alten Ergebnisses und des neuen Beispiels auszudrücken, definieren Sie einen beispielhaften gleitenden Durchschnitt in einem Fenster von 4 Proben: Add new sample e: Ein gleitender Durchschnitt kann rekursiv implementiert werden , Aber für eine exakte Berechnung des gleitenden Durchschnitts müssen Sie sich an die älteste Eingangsabfrage in der Summe (dh die a in Ihrem Beispiel) erinnern. Für einen N-gleitenden Durchschnitt berechnen Sie: wobei yn das Ausgangssignal und xn das Eingangssignal ist. Gl. (1) können rekursiv geschrieben werden, also müssen Sie sich stets an die Stichprobe xn-N erinnern, um (2) zu berechnen. Wie von Conrad Turner angemerkt, können Sie stattdessen ein (unendlich langes) exponentielles Fenster verwenden, mit dem Sie die Ausgabe nur aus dem vergangenen Ausgang und dem aktuellen Eingang berechnen können. Dies ist jedoch kein normaler (ungewichteter) gleitender Durchschnitt, sondern ein exponentieller Wert Gewogenen gleitenden Durchschnitt, wo die Proben in der Vergangenheit ein geringeres Gewicht erhalten, aber (zumindest in der Theorie) man nie etwas vergessen (die Gewichte nur kleiner und kleiner für Proben weit in der Vergangenheit). Initialize total 0, count0 (jedes Mal, wenn ein neuer Wert angezeigt wird) Dann ein Eingang (scanf), ein add totalnewValue, ein Inkrement (count), ein Divide Average (total / count) Dies wäre ein gleitender Durchschnitt über alle Eingänge Als nur die letzten 4 Eingänge, würde 4 Inputvariablen, vielleicht kopieren Sie jeden Eingang zu einer älteren inputvariable, dann die Berechnung der neuen gleitenden Durchschnitt als Summe der 4 Inputvariablen, geteilt durch 4 (rechte Verschiebung 2 wäre gut, wenn alle Eingänge waren Positiv, um die Durchschnittsberechnung durchzuführen


No comments:

Post a Comment