Hallo Leute, ich habe eine Variable die derzeit sekündlich als Mittelwert aus neuem Wert und vorigem aktualisiert wird. Das wird aber nur stumpf auf einem LCD angezeigt und ist dafür auch erstmal geeignet. Nun hätte ich aber gern einen Wert der den Durschnitt der letzten 24 Stunden umfasst. Also müsste ich ja irgendwie immer den Wert von vor 24Stunden abziehen vom aktuellen Durschnittswert der letzten 24Stunden usw!?! Aber irgendwie hab ich da zur Zeit wohl ein wenig Leim im Hirn, denn ich komm einfach auf keinen Zweig wie ich das Ablauftechnisch mache. Könntet ihr mir da helfen? Ich möchte hier kein fertiges Programm sondern bitte nur um Denkanregungen in Bezug auf den "Algorithmus" der nötig wäre.
tja, ganz stumpf, 3600 Werte sammeln, addieren, durch 3600 teilen. Aber es gibt verschiedene Mittelwerte und dementsprechend verschiedene Methoden, diesen zu ermitteln.
so ähnlich dachte ich mir das auch, das wären in meinem fall aber 3600 byte werte und das dann noch 4 mal ggg wenn ich mich nicht vertue also rund 3,5MB + sonstiges variablen die ich noch so brauche hehe, doch etwas übel. also müsste ich wohl irgendwie immer den mittelwert je rechnung "weiterführen" aus "(aktueller wert + alt-durchschnittswert) / 2" wie halt bisher auch und dann müsste ich irgendwie noch den ersten der 3600 werte immer "mitführen" und daraus rückrechnen. klar ist mir natürlich, dass die ersten laufenden 24stunden dieses berechnung wenig sinn macht, das ist aber gar nicht schlimm.
Also falls eine iterative Formel für die Berechnung des Mittelwerts mit dieser Frage gemeint war, dann hier: s[n]=( (n-1)*s[n-1]+1*x[n] )/n (wobei s[n] Mittelwert von den vorherigen n Werten ist) Man kann es auch so bekommen s[n]=s[n-1]+(x[n]-s[n-1])/n Aber im Prinzip ist das relativ ineffektiv...
Ne andere Variante wäre ja ein laufender Mittelwert. Also den alten Mittelwert + den neuen Wert.. Da das aber nur bedingt Sinn macht, könnte man den alten Mittelwert ja auch mit 3599 gewichten und den neuen dazu addieren. Das ganze dann durch 3600 und fertig. Sollte auch gar nicht so weit von dem korrekten Mittelwert entfernt sein. Edit: also das was Henning im 2ten Post mit "mitführen" meinte..
Warum eigentlich 3600? 60Sekunden/Minute, 60 Minuten/Stunde, 24 Stunden Beobachtungszeitraum macht doch 60*60*24=86400, oder etwa nicht? :-)
Daniel Dyla wrote: > Ne andere Variante wäre ja ein laufender Mittelwert. Also den alten > Mittelwert + den neuen Wert.. > > Da das aber nur bedingt Sinn macht, könnte man den alten Mittelwert ja > auch mit 3599 gewichten und den neuen dazu addieren. Das ganze dann > durch 3600 und fertig. Sollte auch gar nicht so weit von dem korrekten > Mittelwert entfernt sein. > Edit: also das was Henning im 2ten Post mit "mitführen" meinte.. Also ich sage nur: ab und zu die Beiträge der anderen lesen...
man speichert erstmal nur jeweils 24 Werte und bildet daraus den Mittelwert. Diesen wiederum in den 3600er-Buffer, passt exakt. Die 24 ergeben sich aus der Verknispung der Antibinoxe - kurz, du hast natürlich Recht.
Speichere 60 Sekunden und berechne damit den minuten Schnitt, danach benutzte den Speicher für die nächtse Minute. Speicher diesen minuten Schnitt, und wennn 60 Minuten zusammen sind berechnest du den Stunden Schnitt=> speichern .......... So benötigst du für diese Berechnug 60 * Sekunden Variable + 60 * Minuten Variable + 24 mal Stunden Variable.
Hallo, ich würde die Mittelwerte stündlich "gleitend" wie folgt ermitteln: Summe(n) = Summe(n-1) + x(n) Mittel(n) = Summe(n) / n Die 24 Stundenwerte würde ich speichern und daraus das 24-Stunden-Mittel rechnen. Das ist meiner Meinung sogar genau für die Werte zur ganzen Stunde. Gruß
M = (3600*Summe(Mi)(i=1-23) + ((3600-n)*M24 + n * Ma)(n=1-3600))/(24*3600) mit Mi ... Mittelwerte aus den Stunden (-1h ... -24h) Ma ... Mittelwert aus der aktuellen Stunde n ... Sekunde der aktuellen Stunde (1-3600) Gruss
ich bin in mathe ganz ehrlich einfach eine totalniete. g könnte ich die werte vielleicht gewichten?! also wenn ein neues wert dazukommt rechne ich halt (bei sekunden) 86399 teile des alten durschnitts + 1 teil des neuen durschnitts = NEUDURSCHNITT aber dann wird ja die nachpegelung des wertes je nachdem wie lange die schaltung lief immer flacher?! ich will ja nur die letzten 24h als bezug nehmen!
Hallo, wenn Du nur den 24 Stundenmittelwert haben willst, musst Du ältere Werte rauswerfen. Da Du aber nicht genug Speicher investieren willst, musst Du die Daten verdichten. Meine obige Formel rechnet mit den 24 Mittelwerten der letzten 24 Stunden. Der Mittelwert einer Stunde ergibt sich aus der Summe aller Messwerte einer Stunde dividiert durch deren Anzahl: Summe = Summe + Messwert (pro Messung) Stundenmittel = Summe / 3600 (am Ende der Stunde) Der 24 Stundenmittelwert ist: M24 = [Mittel(1) + ... + Mittel(24)] / 24 (Formel 1) Nach jeder abgelaufenen Stunde musst Du den neuen Stundenmittelwert speichern und den 24 Stunden alten wegschmeißen. Die Werte rutschen also eins durch: M(24) <= M(23) M(23) <= M(22) ... M(2) <= M(1) M(1) <= M(abgelaufene Stunde) Nun liefert Formel 1 den neuen 24 Stundenmittelwert. Während der Stunde kannst Du auch einen Mittelwert bilden, den Mittelwert seit Stundenbeginn: Stundenmittel(n Sekunden) = Summe(n Sekunden) / n Damit kannst Du auch während der Stunde einen 24 Stundenmittelwert berechnen. Wichtig ist hierbei die Gewichtung. Da Du nur 24 Stunden einbeziehen willst, musst Du soviele alte Werte rausschmeißen, wie neue Werte dazukommen. Also: Während der aktuellen Stunde kommen n neue Werte dazu: Summe(n) = Summe(n-1) + Messwert(n) der aktuelle Mittelwert: M(a) = Summe(n) / n Wie kombiniert man das nun mit den letzten 24 Stunden? Vorschlag: n neue Werte ersetzen n alte Werte so, dass n mal der Mittelwert vor 24 Stunden entfern wird: n*M(a) + (3600-n)*M(24) Die anderen 23 Stundenmittelwerte haben je das Gewicht von 3600 Messungen: 3600 * [M(1) + ... + M(23)] Alle Messungen zusammen ergeben den 24 Stundenmittelwert: M24 = {3600 * [M(1) + ... + M(23)] + n*M(a) + (3600-n)*M(24)} / (24 * 3600) Das ist der in jeder Sekunde beste Mittelwert aus 24 Stunden Messung mit stündlicher Messwerteverdichtung. Gruß
ja genau das war der hakpunkt in meiner überlegung. das mit dem verdichten immer auf stündliche werte war mir klar, jedoch war mir nicht klar wie ich dann den "durchlaufend stabilen mittelwert" erreiche. würd ich die minus 24ste stunde komplett killen dann würde mein mittelwert ja total aus dem konzept kommen da ihm dann ja 3799 sekundenwerte auf einmal fehlen täten! ;)
Schau dir mal die seite an : http://www.ibrtses.com/embedded/exponential.html Fuer eine Zeitkonstante von 87600 samples kann man 65656 als 2^16 nehmen und ist sehr nahe. Also output:=input * 1/65536 + output -( output * 1/65536) oder output:=input shr 16 + output - output shr 16 Ist doch einfach...
Hallo, das ist ein Tiefpass 1. Ordnung kein Mittelwertbildner! Das ist nicht das selbe! Die Gewichtung eines Messwertes fällt exponentiell mit dem alter. Ein Mittelwertbildner gewichtet konstant im Auswertungszeitraum! Gruß
Das ist korrekt. Ein kleiner akademischer Unterschied. Und deswegen lohnt sich der ganze Aufwand ?
Was soll man dazu sagen: 1. Versuch Der Unterschied zwischen Mittelwert und Tiefpass ist nicht nur akademisch! Der Unterschied ist Mathematik und Systemtheorie. Manchmal stürzen Raumschiffe wegen solcher Unterschiede ab. 2. Versuch Meine Wetterstation kann das machen wie sie will. Das ist mir egal. 3. Versuch Die Frage war nach dem Mittelwert. Die nächste Frage könnte nach einer Vereinfachung sein. Die nächste aber eben! Gruß
naja da die rechenleistung sicherlich nicht an ihre grenzen stößt sondern eben nur der arbeitsspeicher möchte ich das eigentlich schon recht genau haben, ob der unterschied auffällt ist wieder eine andere geschichte, aber ich hätte es halt gern so...
Der Unterschied zwischen Tiefpass und Mittelwert isr sicher da. Zum einen ist der Tiefpass kontinuierlich, der Mittelwert nicht. Es kommt auf die Aussage an, was den sinnvoller ist. Ich wuerd mal beides probieren, Der Tiefpass sind ein paar Register, der Mittelwert braucht etwas mehr.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.