Hallo @all, ich suche nach einen guten algorithmus zum Werte dämpfen. Anwendung: An einem Fahrzeug (landw. Zugmaschine) befindet sich ein Anbaugerät mit Wiegezellen (Drei Biegebalken mit Dehnungsmessstreifen). Über einen instrumentationsverstärker bekomme ich ein Analogsignal auf meinen ADC vom mega8. Die ergebnisse sind überzeugend genau. Nur während der Fahrt schwankt mein Anzeigewerte enorm. Die Drei Sensoren sind jeweils an einem mega8 angeschlossen und werden seriel abgefragt. Wenn ich mal so im halben sekundentakt alle drei über eine minute während der fahr aufzeichne und mit Excel einen Mittelwert bilde ist es auch wieder recht genau. Nur wie könnte ich jetzt mit der "Online"-Anzeige vorgehen. Wenn ich nur über wenige sekunden einen gleitenden Mittelwert bilde schwank es immer noch enorm. Bei einer Mittelwertsbildung über eine Minute(120 Werte, je 2 pro sec. mehr schaffe ich nicht, da alle drei seriell in schleife sind und die jeweils angefragten Ergebnisse als Summe vom Anzeige-Mega32 mit 16x2-Display durchgereicht werden.) bilde ist die Anzeige zwar nicht so schwankend aber eben enorm Träge. Wer kennt bessere Wege, schwankende Werte zu dämpfen? Ich wäre um jede Hilfe dankbar Also ein kurzer starker Ausschlag in eine Richtung sollte sich zunächst nicht so auswirken, aber kleine dauerhafte Veränderungen (Abgabe vom Streugut) sollte direkt erkennbar sein, damit ich die Abgabe in Kg/min sinnvoll errechnen kann. mfg MiGo
Als exponentielles Mittel ? Funktioniert identisch zu einem Tiefpass.
Grundsätzlich solltest du erst mal die Mechanik verbessern (wenn das überhaupt geht. Vielleicht Gummi (Silent) - Blöcke dazwischenbauen. ADC-Werte filtere ich so: Ich messe 64 mal. (Immer ein wenig warten dazwischen) Sortiere die Werte Lasse die 16 höchsten und die 16 niedrigsten unter den Tisch fallen. Summiere die restlichen 32 auf. Zur Quelle : tsnext und DBprintf-Zeilen einfach weglassen
also an meinen ADC-Werten an sich zweifele ich nicht, da ich ja ohne hin schon direkt an der Messstelle im 10ms/Takt werte auslese und diese schon mit gleitenden MW errechne, bevor ich sie dann wenn eine Anfrage kommt über seriellen Anschluss an den Masster weitergebe. Wie gesagt, wenn ich mit Notebook und Excell über eine gewisse Zeit werte erfrage, dann stimmt das im Mittel exakt. Nur die Stöße die durch die Fahrt entstehen. Da hilft auch kein Gummi oder so. Es geht hier um 1-2 Tonnen Gewicht. Die Zugmaschine ist gefedert. Aber wenn eine Unebenheit kommt schlägt es eben zur einen und danach zur Anderen Seite aus. Mit nem analog-Instrument würde ich vielleicht am Ende noch was erkennen. Aber ich möchte ja für weitere Berechnungen (Verbrauch etc) gedämfte, repräsentative Mittelwerte bekommen, die nicht so arch verspätet ankommen. Was würde es bringen, meine empfanenen Werte zu sammeln (für ne gewisseZeit, bei 64 Werten z.B. eine Halbe Minute und die obersten und untersten 16 auser Acht lasse). Letztendlich bekomme ich ja die gleiche Verzögerung wie bei der Mittelwertbildung. Wie berechnet man den exponentiellen Mittelwert. Viellicht hilft dies? Oder was heisst, ADC-Werte sauber aufs Display bringen? Genau das versuche ich ja..... Danke
MiGo wrote: > > Wie berechnet man den exponentiellen Mittelwert. Viellicht hilft dies? Ich schätze mal nicht. Dein Problem ist ja, dass du extreme Ausreisser drinnen hast, die klarerweise keine realen Werte sein können (zumindest nicht solche die dich interessieren). Ich würds auch mal mit der Methode probieren, diese Ausreisser zu isolieren und wegzuwerfen. > Was würde es bringen, meine empfanenen Werte zu sammeln (für ne > gewisseZeit, bei 64 Werten z.B. eine Halbe Minute und die obersten und > untersten 16 auser Acht lasse). Letztendlich bekomme ich ja die gleiche > Verzögerung wie bei der Mittelwertbildung. Dann miss halt nicht über eine halbe Minute, sondern nur über ein paar Sekunden. > also an meinen ADC-Werten an sich zweifele ich nicht, da ich ja ohne hin > schon direkt an der Messstelle im 10ms/Takt werte auslese und diese > schon mit gleitenden MW errechne Schmeiss den mal raus und ersetze den gleitenden MW durch so eine 'Miss und Filter' Strategie. Letztendlich weisst du ja, dass sich deine interessierenden Werte nicht innerhalb von ein paar Sekunden um derartige Größenordnungen verändern werden. Wenn bei dem was nach Verwerfen der größten und kleinsten Werte übrigbleibt, immer noch eine zu große Bandbreite drinnen ist, wäre es zu überlegen, ob das Display in so einem Fall nicht einfach "keine Werte möglich" oder sowas ähnliches anzeigt. Mit Standardverfahren wirst du da nicht weiterkommen. Da bleibt nur probieren und selbst eine Heuristik entwerfen. (Heuristik: Verfahren, das theoretisch nicht begründet wird oder begründet werden kann, aber in der Praxis gut funktioniert)
Bei einem ähnlichen Problem hatte ich gute Erfolge mit einer Art Integrator: Zunächst muß erstmal ein Meßwert vorliegen. Wenn der nächste Wert größer ist, wird der alte Wert (langsam) hochgezäht, ansonsten runtergezählt oder konstant gehalten. Der Wert pendelt dadurch nur wenig um einen Mittelwert. Nachteilig ist die lange Einstellzeit bei einem echten Sprung im Messwert.
> Oder was heisst, ADC-Werte sauber aufs Display bringen? Genau das > versuche ich ja..... Das ist ein Link, in dem weitere Informationen zu finden sind. Einfach mal draufklicken. Es handelt sich um eine sehr effiziente AVR-ASM-Routine zum Glätten von ADC-Messwerten, die Du in die AVR-Software einbinden kannst. ...
- große Zahl von Meßwerten im Speicher vorhalten. - wenn ein neuer kommt, den ältesten wegwerfen. - Mittelwert berechnen - wenn Du willst, bei der Mittelwertberechnung die unwahrscheinlichsten (verglichen mit dem letzten Mittelwert) wegwerfen So hast Du zu jedem Meßintervall einen Mittelwert (gewünschte Schnelligkeit). Änderungen durch Streuen gehen ins Ergebnis ein, der Mittelwert wird immer dem exacten Wert hinterherhinken, ist halt eine Art integrale messung.
Js, so ein Forum is schon ne tolle sache, Ich hab mich jetzt entschlossen, ein kombination aus Mittelwert, gleitend (vielleicht 10 Werte entspricht hier 5 sec) und dann aber mit Annäherung. Also mein letzter anzeigewert wird verglichen mit dem schwach gedämpten Mittelwert. Und davon ein zehntel der Abweichung alle sekunde nachrücken. Ich bin mal auf die Ergebnisse gespannt. Mit dem Nachrücken von 1/10 Abweichung verhoffe ich mir maximal 10 sec nach Stillstand des Fahrzeuges (also sehr stabile adc-Werte) sitmmt spätestens mein Anzeigewert. Aber extreme Schwankungen gehen nur prozentual ein. Den Teiler kann ich ja dann auch noch anpassen. Ich melde mich wieder, wenn ich nach dem Sauwetter (wir haben Schneefall) eien Praxistest durchführen kann. Danke für die tollen Vorschläge. Wer noch weitere Ideen hat ist immer willkommen.... mfg MiGo
Das wäre eigentlich ein schönes Projekt für MATLAB/SIMULINK. Auch die beschriebenen Sonderbehandlungen für Ausreißer usw. lassen sich damit simulieren. Erfordert halt ein wenig Einarbeitung, aber solange das Sauwetter noch anhält...
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.