LabVIEWForum.de - mehrere Signale gleichzeitig messen

LabVIEWForum.de

Normale Version: mehrere Signale gleichzeitig messen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,
ich hab ein kleines Problem beim gleichzeitigen Messen von mehreren Signalen.
Ich muss für meine Technikerarbeit (Elektrotechnik) ein Herzsignal aufnehmen. Dieses messe ich mit einem Instrumentenverstärker und lese es über die Messbox NI-MyDAQ ein. Da ich aber die drei Ableitungen messen muss (also Strecke: linker Arm - Fuss, Rechter Arm - Fuss und Rechter Arm - Linker Arm) und nur zwei analoge eingänge hab, schalte ich diese mit Multiplexern jeweils um. Ich messe die Signale mit dem DaQ-Assistent und filtere diese dann durch einen Hochpass 0,5 Hz und einen Tiefpass 15 Hz und eine Bandsperre 50 Hz um das Herzsignal schön darzustellen. Es entstehen aber an den Stellen wo die zeitlich die anderen Ableitungen gemessen werden immer Informationslücken im Graph. Hab dann versucht diese rauszubekommen indem ich schneller Abtaste mit weniger Werten. Krieg dann aber die Fehlermeldung das die Werte die ich messe nicht mehr zur Verfügung stehen oder überschrieben wurden. Hab dann immer nur pro Schleifendurchlauf einen Wert genommen. Daraufhin konnten die Filter das Signal nicht mehr Filtern da Sie ja nur einen Wert hatten pro durchlauf (Fehlermeldung das das Abtasttheorem nicht eingehalten wird). Hab diese dann in ein Array speichern lassen und dann erst den Filtern gegeben um zu Filtern. Jedoch hatten diese dann das Problem das sie mit den Werten im Array nix anfangen konnten da ihnen die Zeitkonstante fehlt und sie so nur einen großen haufen an Werten haben. Hab die Filter zusätzlich in eine Case-Struktur gesetzt damit diese erst Filtern wenn schon 100 Werte erfasst wurden. Hab jetzt nur mal zwei Strecken zum Umschalten genommen aber das Prinzip bleibt ja das gleiche.

Meine Frage ist jetzt:
Wie bekomme ich diese Informationslücken am besten aus den Signalen raus und das alle Signale gleichzeitig gemessen werden.
Oder kann ich die Filter anders realisieren bzw. umstellen damit diese richtig Filtern wenn ich pro Schleifendurchlauf nur einen Wert hole.

Hab euch das Programm mal dabei getan damit ihr mal reinschauen könnt.

In der oberen Case Struktur entscheide ich welcher Multiplexer durchgeschaltet wird. Bzw. jeden Schleifendurchlauf der andere dann. Steuer die Mulitplexer dann über die Digitalen Ausgänge an.

Vielen Dank Schonmal im Vorraus
Hallo SebJoh,

wie ich verstehe, du hast dir zuerst ein Bandpass 0,5 ÷ 15Hz gebaut. Warum dann noch eine Bandsperre 40 ÷ 60Hz?
da der Tiefpass als Besselfilter ausgeführt ist und nicht steil genug abfällt um die 50 Hz komplett rauszufiltern. Deshalb hab ich nochmal eine Bandsperre hinzugefügt.
ok, verstehe. Könntest du ein Satz ungefilterte Daten speichern und zur Verfügung stellen? Vielleicht, könnte ich damit spielen.
ja das ist kein probkem Smile bin leider erst morgen mittag wieder zu hause. stell sie dann aber direkt rein. in eine tdms datei?
Bevor wir jetzt lange mit Filterung rummachen, erst einmal zurück zu deinem Ausgangsproblem, der Erfassung der Signale.

Der VI-Upload funktioniert schon mal gar nicht, da du überhaupt keine deterministische Abfolge zwischen der Ansteuerung deines Multiplexers und der Datenerfassung hast. Wann du welchen Kanal erfasst, das kannst du so überhaupt nicht sagen.
Für eine spätere Filterung brauchst du - wie du selber erkannt hast - eine Zeitinformation, die dir momentan durch die Einzelwerterfassung auch komplett verloren geht.

Auf den ersten Blick sehe ich bei Verwendung einer myDAQ-Karte auch keine sinnvolle Möglichkeit, wirklich eine Hardware-Synchronisation zwischen einem externen Multiplexer und den Analogeingängen hinzubekommen.

Du müsstest dich IMHO entscheiden: Musst du wirklich 3 AIs gleichzeitig erfassen? Dann wäre der Einsatz einer zweiten myDAQ oder einer anderen NI-DAQ-Karte wahrscheinlich die schnellere und somit auch günstigere Lösung. Oder kannst du doch auf einen AI verzichten?

Eine weiterer wichtiger Eckpunkt: Mit welcher Taktrate willst du im Idealfall deine Analog-In erfassen? Geht es um 10 Hz, dann lässt sich das mit dem externen Multiplexer per Software-Takt lösen, oder sprechen wir eher von 10 kHz?

Gruß, Jens
wenn ich aber die Messwerte in der sequenz nach dem Umschalten der Multiplexer messe dann würde die Abfolge doch stimmen oder?
Hab leider keinen analogen Input frei da ich neben der Herzspannung auch noch 4 andere Sachen messen muss(Körpertemp., Körperwiderstand, Muskelspannungen am Auge und die atmungsaktivität)
hab deshalb auch schon eine zweite messbox benutzt.
Ein weiteres Problem ist das ich die Herzsignale auf jedenfall umschalten lassen muss, da diese dann in einen Instrumentenverstärker geschoben werden um sie zu verstärken. Dieser ist dann erst an die Messbox angeschlossen.

Ich muss die Signale so schnell wie möglich abtasten, da ich auch eine schnelle Herzfrequenz aufgenommen bekomme(also bei hohem Herzschlag). Hatte grob ausgerechnet das ich mind alle 100ms wechseln muss damit keine Herzspannungsspitze verloren geht.
Das Problem bei einer Abtastung mit 100kHz und z.B. 100000 Werten war, dass trotzdem diese Informationslücken in jedem Signal entstanden. Deshalb habe ich dann versucht das ganze über Einzelwerterfassung zu machen
Hallo SebJoh,

Zitat:grob ausgerechnet das ich mind alle 100ms wechseln muss damit keine Herzspannungsspitze verloren geht.
Das sollte mit den softwaregetimeten DIOs des MyDAQ funktionieren. Es würde helfen, wenn du nicht dauernd die DO-Tasks neu anlegen und gleich wieder löschen würdest...

Zitat:wenn ich aber die Messwerte in der sequenz nach dem Umschalten der Multiplexer messe dann würde die Abfolge doch stimmen oder?
Abhängig von der Schaltdauer deiner "Multiplexer" prinzipiell ja.

Zitat:Das Problem bei einer Abtastung mit 100kHz und z.B. 100000 Werten war, dass trotzdem diese Informationslücken in jedem Signal entstanden. Deshalb habe ich dann versucht das ganze über Einzelwerterfassung zu machen
- Die "Lücken" könnten durch das unkoordinierte Umschalten der "Multiplexer" zustande kommen.
- Bei Einzelwerterfassung landest du bei genau einem Messwert pro Schleifendurchlauf - und der beinhaltet auch das (immer noch unkoordinierte) Schalten etc. Ich glaube kaum, dass du dann noch vernünftige Signalverläufe messen wirst...

Der in deinem VI skizzierte Ablauf sieht aus, als wenn er sich prima mit einer Statemachine erledigen lassen würde. Immer schön der Reihe nach "Multiplexer schalten", "Messwerte aufnehmen", "Multiplexer zurückschalten", und wieder von vorn...
Die digitalen outputs muss ich leider immer wieder löschen da sonst die spannung am ausgang immer noch ansteht. deshalb leg ich sie auch immer wieder neu an. Eigentlich schalte sie deshalb auch nicht unkoordiniert. ich schalte immer die alten noch anstehenden ausgänge ab und dann die die ich dem schleifendirchlauf messen will wieder zu in der sequenz. die multiplexer können laut datenblatt in 1ms schalten. das müsste ja für meine zwecke auf jedenfall reichen. gibt es diese funktion ,,statemaschine'' denn in labview und wo find ich sie?
gruss sepp
Hallo sepp,

Zitat:Die digitalen outputs muss ich leider immer wieder löschen da sonst die spannung am ausgang immer noch ansteht.
???
Warum musst du den Task jedesmal neu anlegen, starten, stoppen und löschen? Es sollte doch ausreichen, einfach den gewünschten Wert auszugeben. Wenn du keine Spannung am Ausgang haben willst, musst du ein FALSE ausgeben...

Zitat:gibt es diese funktion ,,statemaschine'' denn in labview und wo find ich sie?
Das ist keine Funktion, sondern ein Programmierschema. Du findest ein vorbereitetes Beispiel, wenn du ein neues VI im LabVIEW-Startfenster mittels "Neues VI aus Vorlage" anlegen willst. Dort dann "VI aus Vorlage"->Entwurfsmuster->... wählen:
[attachment=43979]
Ansonsten findest du sehr viele Threads zum Thema Statemachine hier im Forum. Wikipedia liefert auch gute Erläuterungen...

P.S.: Repariere mal deine Tastatur, die Umschalttasten sind anscheinend defekt...
Referenz-URLs