LabVIEWForum.de - Beschleunigungsmessung über Soundkarte (ICP-Sensor)

LabVIEWForum.de

Normale Version: Beschleunigungsmessung über Soundkarte (ICP-Sensor)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen!
Ich bin ein relativ blutiger LabVIEW-Anfänger und habe mich bei folgendem Problem festgefressen: :-)

Szenario:
Ich möchte für einen Versuch eine Messung erstellen, bei der ich Position und Beschleunigung miteinander in Beziehung setze. Im Klartext bekommt jemand die Aufgabe sich mit einem Stift o.ä. einem bestimmten Punkt zu nähern bzw. ihn zu treffen. Während der Aktion will ich den Weg grafisch aufzeichnen und parallel dazu die Beschleunigung bzw. das Zittern der Person.
Die Wegaufzeichnung ist kein Problem, dazu benutze ich ein Positionsmesssystem, das mir fortlaufend die Position eines Markers im Raum liefert, dass ich auch nach belieben umrechnen oder grafisch darstellen kann (ich zeichne zum Beispiel den zurückgelegten Weg in der Draufsicht in einen Graphen).

Problem:
Mein Problem ist jetzt die Beschleunigungsmessung. Ich benutze einen ICP-Beschleunigungsmesser von PCB, der mir normalerweise eine zur Beschleunigung proportionale Spannung liefert. Ich habe allerdings keine Möglichkeit, Spannungen zu messen, mit Ausnahme der Soundkarte. Ich weiß, dass ich damit nicht die tatsächlichen Werte des Sensors erhalte (es sei denn, ich könnte die Messung eichen, aber relative Werte tuns auch erstmal).
Ich bin inzwischen soweit, dass ich das Signal der Soundkarte auslesen kann, Filtern und die letzten Grundschwinungen entferne.

Ich lese die Daten der Soundkarte mit 44.1kHz, 16bit/Sample, mono aus. Das sind natürlich relativ viele Werte, und dementsprechend "flitzen" die Amplituden-Peaks (wenn ich den Sensor bewege) sehr schnell durch den Graphen und sind wieder wech :-). Wenn ich alle Daten in nem Array speichere wird das natürlich ziemlich schnell ziemlich groß und das Programm sehr langsam.. Da die Messung aber durchaus mal länger sein kann, kommt das also nicht in Frage.. Ich habe mir gedacht, ich "stauche" den Beschleunigungsverlauf, in dem ich beispielsweise nur 10 Werte pro Sekunde speichere, und diese Werte dann den Mittelwert der "rausgeworfenen" Samples enthalten.
Und das kriege ich nicht hin. Ich lese seit Tagen hier im Forum und sonstwo alles, was ich zu dem Thema finden konnte, aber es klappt nix.

Allerdings habe ich auch noch ein paar Verständnisschwierigkeiten dabei:
Momentan benutze ich eine große while-Schleife in der ich direkt die Daten der Soundkarte lese und verarbeite. Diese Schleife hat eine Verzögerungszeit von 0,01s. Wieviele Samples pro Sekunde habe ich denn dann immer vorliegen? Oder kommen die trotzdem quasi konstant? Ich hatte mal probiert, eine Verzögerungszeit von 250ms zunehmen, da dachte ich mir, ich habe in jedem Durchlauf 11.025 Samples (1/4 von den 44.1kHz) vorliegen. Aber wenn ich dann irgendwelche VIs benutzt habe, wo ich die Samplezahl angeben sollte, dann hab ich da immer Fehler gekriegt..ich musste die dann so auf 100 Samples runterschrauben. Oder hätte ich nach den 250ms die while-Schleife verlassen müssen und in einer neuen dann die Werte verarbeiten?

Ich habe mal mein VI angehängt. Das is nich ganz so sauber, ist auch mein erstes :-)
Im unteren Teil werden einfach die Samples von der Soundkarte eingelesen (die SoundAPI benutzt auch nur das SI-Read zum auslesen, ich fand das nur übersichtlicher, ich weiß nich, ob das bei allen LabVIEW-Versionen dabei is). Die Daten "Zeitsignal Kanal 1" sind dann meine Samples (allerdings weiß ich eben nich, in welcher Form und wieviele, siehe Verständnisschwierigkeiten). Der mittlere Teil dient zum filtern, das hab ich aus irgendnem anderen VI geklaut und angepasst, funktioniert ganz gut. Der obere Teil sorgt nur dafür, das zu kleine Amplituden ausgeblendet werden, ich benutze dazu die Hüllkurve und leite das Signal nur weiter, wenns nich in der Hüllkurve is (also invertiert quasi, ich hab nix besseres gefunden als das so zu machen), in dem Fall, dass das Signal in der Hüllkurve ist, wird einfach ein Nullsignal (im True-Case) gesendet.
Das zu bearbeitende Signal ist also das ganz oben rechts. Davon möchte ich jetzt eine Kurve haben, die mir zb. mit 10 Werten pro Sekunde einen Verlauf der gemittelten Werte zeigt und mir sozusagen den Beschleunigungsverlauf anzeigt.
Ach so, wo ich gerade dabei bin, diese Werte möchte ich dann noch Zeitsynchron mit den Positionsdaten in eine Datei schreiben (Positionsdaten schreib ich schon raus), aber ich glaube, das führt dann hier erstmal zu weit.

So, das war ne Menge Text, ich hoffe, ich konnte mich verständlich ausdrücken und ihr habt noch Lust, soviel durchzulesen :-)

Schönen Feierabend & Gruß aus Oldenburg,
Melvin
:offtopic:Wie genau und wie schnell brauchst du die Signale deines Beschleunigungssensors? Dann wären vielleicht die Einstiegskarten USB 6008/6009 eine Alternative?

MfG, Jens
Referenz-URLs