LabVIEWForum.de - Ringpuffer - aber wie?

LabVIEWForum.de

Normale Version: Ringpuffer - aber wie?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Sers an alle,

ich möchte die Arrays meiner Messwerte mitteln, d.h. ich möchte beispielsweise 5 Arrays mit je 1000 Messwerten aufnehmen und diese dann elementweise addieren und durch 5 teilen, damit ich eine gemittelte Kurve bekomme. Das ganze soll als Ringpuffer fungieren, also das älteste Array immer raus, das neueste rein und dann Mittelwert elementweise für alle 5 Arrays.

Wie geht das?

Danke schonmal für die Hilfe!!!

Grüße,

Thomsen
Gibt's fertig: Signalverarbeitung -> Punkt für Punkt -> Wahrscheinlichkeit und Statistik (Punkt für Punkt) -> Mittelwert

Gruß dimitri
Hallo,

ich geh jetzt einfach davon aus das deine messung in irgend einer schleife ist.

klick auf den rechten oder linken Rahmen der schleife und wähle "schieberegister hinzufügen".
Da schliest du an der rechten seite der schleife deine messung an.

Links kannst du das schieberegister nach unten aufziehen, das du vier anschlüsse erhältst.
Da kannst du jetzt die messwerte der letzten 4 schleifendurchläufe abholen und eben mit deinem aktuellen verrechnen.

Achtung: die 4 anschlüssse solltest du initiallisieren. auserhalb der schleife was anschliessen.

Grüße
Achimedes
Danke, das mit den Schieberegistern ist ne Möglichkeit. Aber dann kann ich meine Ringpuffergröße nicht dynamisch einstellen!
Das würde ich allerdings ganz gerne!


Die Lösung von Dimitri funktioniert nur mit einzelnen Werten, nicht mir Arrays, jedenfalls soweit ichs versteh.
Hallo,

das immer die 5 neusten Arrays verarbeitet werden, kannst du mit Queues erreichen.

Bsp gibt es hier: http://www.LabVIEWforum.de/index.php?s=&am...ost&p=87814

Das Arithmetik geht dann in einer For-Schleife...

Gruß Ome
Warum sind es 5 Arrays mit je 1000 Elementen und nicht eins mit 5000 Elementen?
Warum musst du überhaupt deine Messwerte in Arrays ansammeln um danach einen Mittelwert zu bilden? Ich meine es frisst doch dein RAM?!
Wer weiß wieso er es so will... hier mal 'nen Lösungsvorschlag.

Gruß Ome
@Ome, ich hätte es auch mit Lossy Queue gemacht Wink

Übrigens, sobald ich das Wort "Ringbuffer" höre, denke ich direkt an Lossy Queue. Das Problem dabei ist, dass die Größe eines solchen Puffers nicht dynamisch einstellbar ist. Aber, ich glaube, ich habe schon eine Lösung dafür im KopfBig Grin
' schrieb:ich möchte die Arrays meiner Messwerte mitteln, d.h. ich möchte beispielsweise 5 Arrays mit je 1000 Messwerten aufnehmen und diese dann elementweise addieren und durch 5 teilen, damit ich eine gemittelte Kurve bekomme. Das ganze soll als Ringpuffer fungieren, also das älteste Array immer raus, das neueste rein und dann Mittelwert elementweise für alle 5 Arrays.
Würde gern helfen, aber da müßte ich zu sehr raten, wie Du es genau meinst...
Aber vielleicht hilft das: Den Ringpuffer gibt es auch als Funktion, und die Größe ließe sich dort dynamisch einstellen. Allerdings nur für ein einfaches Element. Wenn Du 5 Elemente hast, dann müßtest Du 5 solche Puffer verwenden (Was kein Problem wäre)
Sehr gut versteckt in: Signalverarbeitung Punkt für Punkt weitere Funktionen Daten Queue
' schrieb:@Ome, ich hätte es auch mit Lossy Queue gemacht Wink

Übrigens, sobald ich das Wort "Ringbuffer" höre, denke ich direkt an Lossy Queue. Das Problem dabei ist, dass die Größe eines solchen Puffers nicht dynamisch einstellbar ist. Aber, ich glaube, ich habe schon eine Lösung dafür im KopfBig Grin

Ja das drängt sich gerade zu aufBig Grin

Die Frage ist was er mit Dynamisch meint... mehr oder weniger ist ja die Anzahl der Elemente im Queue während der Laufzeit des Programms einstellbar nur halt nicht während der Queue verwendet wird.
Seiten: 1 2
Referenz-URLs