LabVIEWForum.de
Shift register Initialisieren - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Shift register Initialisieren (/Thread-Shift-register-Initialisieren)



Shift register Initialisieren - jak888 - 01.12.2010 16:29

Hallo,

ich Werte gerade einen Beshcleunigungssensor aus. Da die Messwerte recht starken Schwankungen unterliegen bilde ich jeweils den Mittelwert der letzten zehn Werte. Das Ganze soll in folgendem VI realisiert werden.

[attachment=30983]

Nun zum Problem. Damit ich wirklich den Mittelwert der letzten 10 Werte berechnen kann, kann ich die Shiftregister nicht initialisieren, da sonst bei jeden neuen Aufruf des VI Nullen übergeben werden würden.
Wenn ich jetzt das Programm mehrmals hintereinander starte, werden allerdings die Werte aus den vorhergehenden Programmdurchläufen übernommen.
Gibt es eine einfache Möglichkeit die Register bei erstmaligen Aufruf zu initialisieren? Ich habe mir überlegt das VI 10 Mal durchlaufen zu lassen uns jeweils nullen zu übergeben, aber das wär doch etwas kompliziert.

Wenn jemand eine einfacher Möglichkeit hat den Mittelwert zu bilden wäre ich daran interessiert.


Shift register Initialisieren - unicorn - 01.12.2010 16:51

Auf der Palette Synchronisation gibt es ein VI First Call?, das nur beim ersten Aufruf den Wert "True" liefert, das kann man bei der erstmaligen Initalisierung von Shift-Registern nutzen.


Shift register Initialisieren - unicorn - 01.12.2010 16:56

Auf der Palette Signalverarbeitung sollte es noch ein VI für einen gleitenden Mittelwert geben, ich finde es aber nicht auf die Schnelle.


Shift register Initialisieren - oenk - 01.12.2010 17:11

Zum "running average" gab es hier schon mal was.


Shift register Initialisieren - Lucki - 01.12.2010 18:50

Das schon erwähnte Initialisieren würde dann so aussehen (im Case fehlt unten ein Ausgang):

[attachment=30985]

Hier werden alle Speicherstellen mit dem Wert des ersten Messwertes initialisiert. Das ist sicher besser als mit Null, aber ideal ist es auch nicht.
Wenn man Wert auf exakte Mitteswertbildung auch bei weniger als 10 Werte legt, dann muß der Aufwand etwas erhöht werden. Z.B. so:

[attachment=30986]

Und die Mittelwertbildung mit FIR-Filter sähe für Deinen Fall so aus (Wobei bei der Initialisierung die internen Register mit Null belegt werden, so daß man erst 10 Werte nach der Initialisierung einen richtigen Mittelwert bekommt):
[attachment=30987]


Shift register Initialisieren - jak888 - 01.12.2010 19:20

Danke für den Ganzen Input.

@ Lucki:

Die VIs sind wirklich gut. So leuchtet es ein. Was ich mich noch frage: im 2 Bild. der obere Teil. Ist der Wert den ich dort berechne nicht gleich "i"?


Shift register Initialisieren - Lucki - 01.12.2010 19:30

Probiers am besten mal selbst aus. Der Code muß natürlich in einer Haupschleife sein, oder man macht ein SubVI draus. Bei Aufruf als Main würde es sonst bei jedem Aufruf initialisiert.
Edit: Fehlerkorrektur im VI, die Shift-Reg dürfen natürlich nicht initialisiert werden. Der Fehler ist oben im Bild noch drin

[attachment=30989]


Shift register Initialisieren - BMTstudent - 02.12.2010 10:17

@ jak888

Um auf den ersten Beitrag und damit auf das grundsätzliche Problem der 10 Schieberegister zurückzukommen, wieso versuchst du es nicht mal mit einem Daten-Queue??? (unter "Signalverarbeitung", "Punkt für Punkt", "Weitere Funktionen")

Das würde jeweils die letzten 10 (einstellbar) Messwerte aufnehmen, ohne dass du auch nur ein einziges Schieberegister brauchst. Und es ist initialisierbar. Vielleicht kommst du damit weiter, ohne mich jetzt genauer mit der Thematik befassen zu wollen.

Viele Grüße