Hallo zusammen, bei meinem aktuellen Projekt muss ich den Mittelwert einer sehr sehr langsamen (0,2 Hz bis 1 Hz) harmonischen Schwingung ermitteln. Ich lese einen Neigungssensor über den AD-Wandler ein und möchte nun wie folgt vorgehen: - Maximum der Schwingung ermitteln, - wenn Maximum gefunden Befüllen eines Arrays starten, - Array so lange befüllen, bis Minimum ermittelt, - Mittelwert ausrechnen. Dieser Alorithmus dürfte funktionieren. Jedoch mein Problem dabei ist, dass ich die Abtastrate des AD-Wandlers immer gleich lassen möchte und somit bei unterschiedlicher Schwingungsdauer immer unterschiedlich viele Werte zwischen Maximum und Minimum habe. Kann mir jemand von Anfang an erklären, wie ich ein Array deklariere und befülle, bzw. wieder auslese ohne dass ich weiß wie groß er ist/wird? Danke und Gruß
Zwei möglichkeiten. 1. Array übergroß deklarieren. Also das Array fest auf die maximal mögliche Größe festlegen. 2. Malloc, realloc, free. Damit kannst du dynamisch neuen Speicher anfordern. Malloc gibt dir einen Speicherbereich einer gewünschten größe. Realloc erweitert schon vorhandenen Speicher und free gibt diesen wieder frei. Allerdings ist die Lösung mit malloc etc. sehr langsam und sollte nur verwendet werden, wenn der Speicher knapp ist.
Wozu brauchst Du überhaupt ein Array? Maximum und Minimum finden geht auch einfach mit zwei Variablen, wobei in eine Variable immer dann der aktuelle Wert übernommen wird, wenn er größer bzw. kleiner ist als der Wert, der schon drin steht. Und für den Mittelwert brauchste auch nur zwei Variablen, eine zum Aufaddieren aller Werte und eine Zählvariable, die mitzählt, wie viele Werte aufsummiert wurden. Das Addieren der Werte kann dann jeweils direkt nach der Erfassung gemacht werden...
Timmo H. wrote:
> Vielleicht will er ja auch dir Kurve noch im Speicher behalten oder so?
Hat er zumindest nix von gesagt...
"2. Malloc, realloc, free...." Naja, prinzipiel nicht verkehrt, aber dann muss ich mir ja auch überlegen, wie groß mein Heap ist, damit das passt ;-). Und wenn ich mir schon diese Überlegung gemacht habe, kann ich das ganze doch auch lieber statisch machen. Ich denke aber auch eher, das eine mathematische Mittelwertbildung einfacher ist, wie Johannes schon sagte brauchst du für eine arithmetische Mittelwertbildung die Werte nur aufsummieren und dann durch die Anzahl der Werte dividieren.
>> Vielleicht will er ja auch dir Kurve noch im Speicher behalten oder so? >Hat er zumindest nix von gesagt... Stimmt, hatte ich jedoch angenommen, da er schon mit nem Array anfing. Wahrscheinlich hat er daran gar nicht gedacht, dass man die Mittelwertbildung auch währenddessen machen kann. Wie dem auch sei
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.