Hallo,
ich habe mir nach den Anleitungen der OpenEEG-community ein EEG-Gerät gebaut.
Da ich mich in Labview einarbeiten möchte, versuche ich nun die Daten, welche das Gerät über die serielle
Schnittstelle an den Computer sendet, aufzubereiten und grafisch zu visualisieren.
Mein Ziel ist die Darstellung der gemessenen Gehirnpotentiale als:
1. Oszilloskopbild
2. FFT der Gehirnströme (4Hz bis 30Hz)
3. Balken, der sich auf und abbewegt, nach Ausfilterung einer bestimmten Frequenz durch einen Bandpass
Nun habe ich folgende Probleme:
-Störfrequenzen im FFT
-Bei Einfügen von neuen Filtern oder neuen Strukturen (z.B. Casestruktur)
schafft es Labview nicht mehr alle Daten von der RS232 abzuholen und verpasst einige Pakete.
Zur Erklärung:
Das EEG-Gerät sendet periodisch 17 Bytes an den PC.
Davon interessant sind:
Byte1/Byte2: Synchronisationsbytes (A5 5A)
Byte3:Versionsnummer
Byte4:Rahmennummer (Zähler)
Byte5:Kanal1 Low Byte
Byte6:Kanal1 High Byte
Byte7 - Byte16:enthalten von mir nicht genutzte Kanäle
Byte17:nicht relevant
Also nach jeweils 17 Bytes erhalte ich einen digitalen 10Bit-Messwert (8Bit und 2 Bit von Byte5 und Byte6 zusammengesetzt).
Das VI habe ich folgendermassen aufgebaut:
Über VISA lese ich kontinuierlich die Daten von der RS232 ein.
Diese werden in der Haupt-Whileschleife am Ausgang in ein Schieberegister geschoben und
erscheinen somit am Eingang der Whileschleife sequentiell nacheinander.
Dort warte ich dann auf die SyncBytes A5 5A (Startkennung).
Sobald diese aufgetreten sind, was die SyncBit LED signalisiert, wird die
Case-Struktur "True" und nimmt den 10Bit-breiten Messwert auf.
Dieser Messwert wird vorher aus Byte5 und Byte6 zusammengesetzt.
In der Case-Struktur verwende ich wieder ein Schieberegister.
Das Oszilloskop ist direkt am ersten Eingang des Schieberegisters angeschlossen und
scheint gut zu funktionieren.
Über "Build Array" fasse ich 64 Messwerte zusammen und übergebe sie "Build Waveform".
Danach erfolgt eine Filterung, um z.B. das 50Hz Brummen auszufiltern und dann folgt das FFT-Modul.
Selbst wenn ich kein Signal vom EEG-Gerät bekomme (Messelektroden auf Masse gelegt), erscheinen im FFT-Diagramm Frequenzen.
In meinem Fall bei 0Hz, 4Hz, 8Hz.
Wenn ich ein 20Hz Sinussignal vom EEG einspeise,
bekomme ich 16Hz, 20Hz, 24Hz angezeigt, also die Summe und Differenz dazu.
Bei Einspeisung von 30Hz fehlt diese Frequenz komplett und es erscheinen 28Hz und 32Hz
Ich gehe davon aus, dass, wenn ich die 4 Hz beseitigen könnte,
auch die Summen- und Differenzenfrequenzen verschwinden werden, oder?
Woher könnten die 0Hz und 4 Hz Störfrequenzen kommen?
Nutze ich zu wenig Daten für das "Build Array" oder ist mein Ansatz falsch?
Ich habe es noch nicht geschafft, das VI mit einer Textdatei anstatt Daten von der RS232 zu speisen,
damit man das Verhalten unabhängig von dem EEG-Gerät ausprobieren kann.
Logisch erschien mir, anstelle des VISA Read Elementes ein Datei Read Element zu setzen, aber
ohne Daten von der RS232 läuft die While-Schleife nicht an. Oder sollte ich besser das komplette VI kopieren,
von allen VISA-Elementen befreien und dann mittels Case-Struktur, mal das Datei-Lese und mal das VISA Blockdiagramm aufrufen?
Vielleicht habt Ihr auch da einen Tip.
Da dies mein allererstes VI ist vermute ich auch noch generelle Fehler,
welche die Performance so verschlechtern, dass es zu den verlorenen Paketen kommt.
Das merke ich vor allem daran, dass nach Ausschalten des EEG-Gerätes Labview noch 2-3sec
weiter Daten im Oszilloskop anzeigt, also noch Daten irgendwo im Puffer liegen.
Damit das VI übersichtlich bleibt, habe ich es auf das Wesentliche reduziert und z.B. die
Paketfehlererkennung rausgenommen.
Danke für Eure Hilfe.
EEG.vi (Größe: 66,79 KB / Downloads: 296)