PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : brauch hilfe bei datenerfassung/speicherung/verarbeitung



Ceos
17.03.2009, 10:06
situation:
mehere winkelwerte von 0-360 grad mit 1-2 nachkommastellen (wollt sie in integer verpacken 36000 = 360,00) müssten als ein boxplot ausgegeben werden .... im moment werden es wohl nicht mehr als 20 werte pro boxplot werden ....

problem:
erfassung des median und der quartilgrenzen

derzeitige lösung:

ist sehr grob und unschön ... array von 360 bytes, für jeden winkelwert (dabei ignorier ich einfach die nachkommastellen) den ich messe erhöh ich den countwert an der indexposition

also wert = 185.91 -> array[185] += 1;

anschliessend steppe ich durch das array und mithilfe der anzahl der erfassten werte kann cih median und quartilgrenzen zügig ermitteln ... problem dabei der speicherverbrauch ... das ganze soll auf nem Atmega8 laufen der hat nur2k ram und ich ignorier hier sträflich die nachkommastelle!!!

hat jemand vielleicht noch anreize wie ich die daten effektiver speichern kann ?!

ne verkette liste und Qsort fallen wahrscheinlich flach ... das wird bestimmt nicht unerheblich groß im speicher !

PS: beim boxplot werden median (mittlerer wert einer datenreihe != mittelwert) und die quartilgrenzen (also die grenzwerte der 4 viertel aller messwerte ausgegeben) sehr aussagekräftig im bezug auf quantität von werten und fehlern und qualität der messreihe bzw. extremwerte/fehlern

Besserwessi
17.03.2009, 16:52
Die Idee wird sein, die werte zu sortieren. Im zweifelsfall auch mit Qsort. Bei allerdings nur etwa 20 Werten kann man auch noch bulbblesort nehmen. Da braucht man praktisch keinen extra Speicher und bei so wenig elementen ist auch Bubblesort noch recht effektiv. Wenn man die daten als Messwerte nacheinander kreigt, kann man die neuen Werte auch direkt an der passenden Stelle in die Liste einfügen. Mit einer Binären Suche könnte das sogar etwas effektiver sein als Bubblesort.

In die 2 K Speicher passen immerhin rund 1000 Werte, das ist gar nicht so wenig, und wenn man mehr Werte, wäre der erste Schritt wohl einfach mehr Speicher (Mega168 statt Mega 8). Wenn man laufend einsortiert könnte man eventuell ein ganz paar der größten und kleinsten Werte verwerfen. Man riskiert dann aber, das man bei sehr ungleich verteilten Werten auch ein paar werte verwirft, die man Später tatsächlich noch braucht. Bei wirklich zufälligen Werten sollte die Gefahr bei über 500 Werten doch ziehmlich gering sein. Dieser Fall wäre dann ein starkes Indiez dafür das die Werte einen eindeutigen Trend haben.

Ceos
17.03.2009, 17:35
in 2k speicher bekomme ich NIE 1000 werte unter ... variablen für andere operationen, mind. 2 pointer pro wert wenn ich ne liste nehmen sollte gleitkomma berechnungen ........

die rechenzeit ein array zu sortieren wäre irrwitzig

ich habs jetzt so gelöst, dass ich 20-50 werte sammle, erwartungswert und vertrauensbereich berechne, dann ein array von 100 bytes nehme, die mitte des array ist der erwartungswert, die grenzen stellen den vertrauensbereich dar, alle werte die ausserhalb liegen werden nur gezählt und der maximalwert gespeichert, so bekomm ich ne gute aussage über fehler und einen gut aufgelösten boxplot ... der vertrauensbereich und erwartungswert werden immer neu berechnet

n anderer mega wird schon kompliziert, ich brauch auf jeden fall die 24PDIP größer auf keinen fall und kleiner kann ich demjenigen der die platine bauen muss nicht zumuten ...

ich hab für n array mit 360 werten ne ermittlungszeit von ~290µS gemessen, morgen werd ich mal schauen was ne einfach bzw. doppelt verkette liste an zeit und speicher braucht

PS: es geht um nen lebensdauertest, da wird immer zwischen 2 zuständen gewechselt und dann das ergebnis gemessen, hin und wieder können totalfehler entstehen bei dem kein wertewechsel entsteht und sonst sind nur gewisse schwankungen zu erwarten ... später dann ein trend und abschliessend die zerstörung ^_^ ... zur laufzeit soll man trends schon erkennen können, anhand steigender streuung oder fallender erwartungswerte
aber dabei soll eben auch sowas wie totalfehler den mittelwert nicht beeinflussen aber sie sollen auch nicht von der statistik verschluckt werden

problem ist eben die kommunikationsschnittstelle, also wenn ich mehr als 5 werte (ohne ausreisser oder totalfehler) gemessen habe werde ich sie als boxplot darstellen, so kann mein datenpaket maximal 16bytes groß werden aber bis zu 100 messwerte beinhalten, wenn ich schneller messen sollte als ich abrufen kann