INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

FFT-Analyse von EEG-Daten via RS232



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

21.03.2011, 23:51 (Dieser Beitrag wurde zuletzt bearbeitet: 21.03.2011 23:54 von Frank37.)
Beitrag #11

Frank37 Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2011

Labview 2009
2011
EN

01277
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
(11.03.2011 09:11 )GerdW schrieb:  Hallo Frank,

ein Fehler von mir: SerialInit versteht nur U8-Werte als Terminierungszeichen, du kannst also nicht "A55A" dort vorgeben. (Es wird wohl stattdessen "FF" verwendet, da der Wert angepasst wird.) Vielleicht kommen deine PacketErrors dort her...
.


Hallo Gerd,

ja, leider kommen die Errors daher und das macht mir seit Tagen Kopfzerbrechen.
Das alleinige Prüfen auf A5 reicht nicht aus, da A5 sowohl als Messwert wie auch als Framecounter vorkommt.
Also nahm ich das Terminierungszeichen ganz raus und las immer 1 Byte nacheinander ein.
Dadurch liegt nur bei jedem 17. Whileschleifendurchlauf ein gültiger Messwert in der Whileschleife vor.
Somit füllt sich das Array nicht ausschliesslich mit Messwerten sondern auch mit vielen 0-Lücken.
Ausserdem müsste ich die Oszilloskopanzeige wieder in eine Case Struktur legen und nur
wenn ein gültiger Messwert anliegt, auf True schalten.
Das kann nicht die Lösung sein und wird auch sehr unübersichtlich
je mehr Dinge noch dazukommen.

Mein anderer Ansatz:

2009 .vi  EEG_7.vi (Größe: 62,16 KB / Downloads: 184)

Visa Read liest solange byteweise Daten ein, bis die Startkennung A55A02 am Schieberegister erscheint und dann wird
der Messwert zusammengefügt und mit Typecast gewandelt.
Problem:
Hierbei wird das Array oben links immer wieder auf 0 gesetzt.

Das Oszilloskop liegt nun in der Casestruktur und wird nur alle 17 Bytes auf True gesetzt.
Ist irgendwie auch nicht so das Richtige.

Schade, Deine Lösung war so übersichtlich, aber ich muss wohl Visa Read 1-byteweise einlesen lassen
oder siehst Du eine andere Lösung?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
22.03.2011, 09:16
Beitrag #12

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Frank,

vielleicht dann so wie im Anhang...
Du kannst auch mehr als 1 Byte pro Zugriff lesen und damit einen (Ring-)Buffer aufbauen.
Im Buffer wird dann dein Datentelegramm gesucht und, wenn gefunden, aus dem Buffer entfernt und ausgewertet...


Angehängte Datei(en)
2009 .vi  EEG_7.vi (Größe: 60,8 KB / Downloads: 168)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
03.04.2011, 21:55 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2011 14:36 von Frank37.)
Beitrag #13

Frank37 Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2011

Labview 2009
2011
EN

01277
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Gerd,

Es hat ein Weilchen gedauert, bis ich Dein VI komplett verstanden habe.
Es funktioniert sehr gut mit dem Ringbuffer, ist ein raffiniertes Konzept, Danke.

Zu dem jetzigen VI:
Hinter dem "Build Waveform" schicke ich das Signal durch ein Bandpass (9-11Hz).
Ich möchte nur die Amplituden der EEG-Wellen mit 10Hz als Balken darstellen.
Also praktisch den 10Hz Balken aus der FFT solo darstellen.
Dazu konvertiere ich die dynamischen Daten in ein Array und suche dann mit "Array Max & Min"
den max. Wert. Diesen möchte ich dann mittels Tank visualisieren.
Das Oszi hinter dem Bandpass hat so einen Einschwingvorgang, welches das Messen der Amplituden
verfälscht. Wenn z.B. ein 20Hz Sinussignal allein anliegt, sollte hinter dem 10Hz Bandpass fast keine Amplitude
mehr zu messen sein. Durch das Einschwingen wird aber trotzdem ein ziemlich großer Amplitudenwert ermittelt.
Kann man das irgendwie anders lösen?
   


Damit das VI auch von Jemandem ohne das EEG Gerät getestet werden kann, habe ich eine Datei mit entsprechenden Daten erstellt
und einen Button "Datei als Quelle", mit dem man von VISA auf Datei umschalten kann.
Vom Prinzip funktioniert das auch so, nur die Haupt-Whileschleife wartet nun auf Werte vom VISA.
Wenn von dort nichts kommt, geht es erst nach dem Timout weiter.
Das bremst die Whileschleife total aus.
Meine Versuche, den kompletten VISA-Initialisierungsteil links neben der Whileschleife, in ein CASE zu packen
scheiterten daran, dass dieses Case nicht in der Haupt-Whileschleife liegt und somit ein Button,
welcher dieses Case umschalten könnte nur einmal abgefragt werden würde.
Nehme ich nur das VISA-Read mittels CASE raus, was ja eigentlich reichen müsste, hängt der Initialisierungsteil in der Luft.
Ich probiere nächste Woche, an der Sache noch weiter, vielleicht hast Du ja dafür noch ne Idee?



2009 .vi  EEG_9.vi (Größe: 116,28 KB / Downloads: 203)

Der Button Datei als Quelle muss gedrückt sein, um von Datei zu lesen.

2009 .vi  Packet_Error.vi (Größe: 9,36 KB / Downloads: 187)



Sonstige .txt  10Hz_20Hz.txt (Größe: 25,5 KB / Downloads: 246)

Die Messwertedatei beinhaltet für ein paar Sekunden einen Sinus mit 10Hz und danach einen Sinus mit 20Hz.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.04.2011, 07:59
Beitrag #14

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Frank,

Zitat:Meine Versuche, den kompletten VISA-Initialisierungsteil links neben der Whileschleife, in ein CASE zu packen
scheiterten daran, dass dieses Case nicht in der Haupt-Whileschleife liegt und somit ein Button,
welcher dieses Case umschalten könnte nur einmal abgefragt werden würde.
Nur ein Stichwort: StateMachine (Zustandsautomat)...

Zitat:Damit das VI auch von Jemandem ohne das EEG Gerät getestet werden kann...
... müsstest du das fehlende subVI "Packet_Error" mit anhängen! (Bei mehr als 2 Dateien im Anhang bietet sich auch immer ein ZIP-File an...)

Zitat:Das Oszi hinter dem Bandpass hat so einen Einschwingvorgang,
Es ist wohl eher der Bandpass, der da einschwingt, als das Oszi...
Liegt das an deinen Filtersettings? Mit nur 3. Ordnung ein Band von 2 Hz filtern?
Gegenvorschlag: FFT berechnen und nur den Wert für den 10Hz-Anteil weiterverwenden...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2011, 14:33 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2011 14:37 von Frank37.)
Beitrag #15

Frank37 Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2011

Labview 2009
2011
EN

01277
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Zitat:Nur ein Stichwort: StateMachine (Zustandsautomat)...

Ich habe mir jetzt die Grundlagen über State Machines angeschaut und einfache Beispiele ausprobiert,
sehe aber nicht, an welcher Stelle das mein Problem lösen kann.
Wenn ich es richtig verstanden habe, kann man mit State Machines mehrere Zustände nacheinander kontrolliert
"anfahren".
Den Auswahlbutton "von Datei lesen/von EEG-Gerät lesen" muss ich doch aber in jedem Fall ausserhalb der WhileStruktur der StateMachine platzieren.
Und danach gibt es nur einen Zustand, nämlich Daten darstellen, der immer wieder in einer Schleife abläuft.
Der Auswahlbutton wird, da er ja ausserhalb anliegt auch nur einmal am Anfang abgefragt und danach nicht mehr.
Oder hab ich da den falschen Ansatz?

Zitat:Es ist wohl eher der Bandpass, der da einschwingt, als das Oszi...
Liegt das an deinen Filtersettings? Mit nur 3. Ordnung ein Band von 2 Hz filtern?
Also ist 2 Hz nicht zu realisieren?

Zitat:Gegenvorschlag: FFT berechnen und nur den Wert für den 10Hz-Anteil weiterverwenden...

Meinst Du mittels PowerSpectrum und dann das Oszibild auf eine Frequenz einstellen?
Ich möchte den Amplitudenwert von 10Hz danach noch weiterverarbeiten und bei gewissen Schwellenwerten
Aktionen auslösen, z.B. einen Piepton.
Dafür ist das PowerSpectrum nicht geeignet, oder?

Das fehlende subVI "Packet_Error" habe ich hinzugfügt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2011, 17:45 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2011 17:46 von GerdW.)
Beitrag #16

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Frank,

Zitat:Den Auswahlbutton ... muss ich doch aber in jedem Fall ausserhalb der WhileStruktur der StateMachine platzieren.
Warum? Du kannst ihn außerhalb platzieren, musst dies aber nicht... Alternativ: ProducerConsumer-Struktur: Producer fragt UI-Events ab und schickt Befehle an den Consumer, der diese dann in einer StateMachine abarbeitet. Beide haben ihre eigene Schleife...

Zitat:Also ist 2 Hz nicht zu realisieren?
Doch, sicherlich. Ich bezweifle dies nur für einen Filter 3. Ordnung...

Zitat:Ich möchte den Amplitudenwert von 10Hz danach noch weiterverarbeiten
Meine Rede! Du erhälst ein Array mit Werten vs Frequenz nach der FFT. Aus diesem Array pickst du dir den 10Hz-Wert und arbeitest damit weiter. Dafür kann man auch das PowerSpektrum nutzen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
10.04.2011, 22:35
Beitrag #17

sjfekd Offline
LV-Dauernutzer
*


Beiträge: 11
Registriert seit: Sep 2008

8.x,2009,2010,2011,2013
2005
EN

14195
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Frank,

um Dir vielleicht ein bißchen auf die Sprünge zu helfen, da Du auf mehreren Baustellen gleichzeitig kämpfst (LabView-Programmierung & Signalverarbeitung), hier mal ein VI das Deine Data Files liest und verarbeitet (basierend auf Deinem EEG_9.vi).

Vielleicht konzentrierst Du Dich erst mal auf den zweiten Teil und dann auf den anderen, d.h. zuerst die Daten richtig verstehen und verarbeiten. Wenn Du damit fertig bist, würde ich mich erst um die Programm(-Optim)ierung kümmern.

Es ist nur ein Vorschlag Smile

Gruß Stefan


Angehängte Datei(en)
2009 .vi  EEG_se.vi (Größe: 85,93 KB / Downloads: 198)

2009 .ctl  Frame.ctl (Größe: 5,2 KB / Downloads: 170)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 10:44 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2011 10:49 von Frank37.)
Beitrag #18

Frank37 Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2011

Labview 2009
2011
EN

01277
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Zitat:Warum? Du kannst ihn außerhalb platzieren, musst dies aber nicht... Alternativ: ProducerConsumer-Struktur: Producer fragt UI-Events ab und schickt Befehle an den Consumer, der diese dann in einer StateMachine abarbeitet. Beide haben ihre eigene Schleife...

Hier mal das experimentelle StatemachineVI:


2009 .vi  StatemachineversuchEEG_9.vi (Größe: 106,13 KB / Downloads: 200)

0 .txt  10Hz_20Hz.txt (Größe: 25,5 KB / Downloads: 239)

2009 .vi  Packet_Error.vi (Größe: 9,36 KB / Downloads: 184)



Den Auswahlbutton "von Datei lesen/von EEG-Gerät lesen" kann ich nur ausserhalb platzieren.
Da Du sagst, es geht auch innerhalb, vermute ich mal dass ich Dich irgendwo missverstandenden habe und das VI nicht so aussieht, wie Du es meintest.
Was macht man mit den doppelten Anzeigeelementen im Frontpanel, die sich aus den beiden Cases "EEG" und "Datei" ergeben?
Das Frontpanel ist deshalb nicht aufgeräumt, da ich noch nicht weiss, ob die doppelten Anzeigeelemente für einen Casefall ausgeblendet werden oder man in beiden Cases
auf das gleiche Anzeigeelement zugreifen kann. Im Forum habe ich diesbezüglich nichts gefunden.
Deine Alternative (ProducerConsumer-Struktur) lasse ich erst mal beiseite, sonst verzettel ich mich zu sehr.


Zitat:Meine Rede! Du erhälst ein Array mit Werten vs Frequenz nach der FFT. Aus diesem Array pickst du dir den 10Hz-Wert und arbeitest damit weiter. Dafür kann man auch das PowerSpektrum nutzen...

An der Stelle komme ich nicht weiter.
Hinter dem PowerSpektrum habe ich am Ausgang "Power Spectra" ein "1D Array of Cluster".
Weder "Cluster to Array" noch "Unbundle by Name" lässt sich hinter PowerSpektrum anfügen.
Die Fehlermeldung lautet immer :
The type of the source is 1-D array of
cluster of 3 elements.
The type of the sink is cluster of 1 element.


@Stefan
Danke für das VI. Da ich mit Event structures noch nicht gearbeitet habe (das EEG ist mein 1. VI überhaupt) verstehe ich es noch nicht 100%ig.
Ist der Timeoutcase zwingend notwendig?
Das VI liest die Daten auf einen Schlag ein, zeigt also nicht die EEG-Wellen von links nach rechts durchlaufend an.
Bald ist Ostern, dann finde ich hoffentlich etwas mehr Zeit, um mir Dein VI mal tiefgründig anzuschauen und zu verstehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 10:53
Beitrag #19

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Hallo Frank,

also ich kann den auch innerhalb der äußeren WhileLoop platzieren... (s. Anhang).

Zitat:Was macht man mit den doppelten Anzeigeelementen im Frontpanel, die sich aus den beiden Cases "EEG" und "Datei" ergeben?
Die sind nur entstanden, weil du Copy&Paste durchgeführt hast. Du solltest deine Programmstruktur überdenken:
In beiden Fällen führst du die gleiche Rechnung durch, nur die Datenquelle hat sich geändert. Daraus folgt, dass du die Berechnung nicht doppelt im VI vorhalten musst - einmal reicht aus und damit auch nur einmal Anzeigeelemente!


Angehängte Datei(en)
2009 .vi  StatemachineversuchEEG_9.vi (Größe: 104,7 KB / Downloads: 193)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.04.2011, 01:15
Beitrag #20

Frank37 Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Feb 2011

Labview 2009
2011
EN

01277
Deutschland
RE: FFT-Analyse von EEG-Daten via RS232
Zitat:also ich kann den auch innerhalb der äußeren WhileLoop platzieren... (s. Anhang).

Ja, das klappt so, aber dann liegt der linke Eingang des Shiftregisters in der Luft und der ist doch wesentlich für die Statemachine.
Ich habe immer noch nicht so richtig verstanden, was die Statemachine hier verbessern könnte.
Es gibt doch nur einen Zustand.

Zitat:Du solltest deine Programmstruktur überdenken:
In beiden Fällen führst du die gleiche Rechnung durch, nur die Datenquelle hat sich geändert. Daraus folgt, dass du die Berechnung nicht doppelt im VI vorhalten musst - einmal reicht aus und damit auch nur einmal Anzeigeelemente!

Die Idee hatte ich auch schon, war aber an den Schieberegistern gescheitert.
Nun habe ich 2 Cases eingesetzt, das klappt schon ganz gut.


2009 .vi  EEG_10.vi (Größe: 74 KB / Downloads: 201)

2009 .vi  Packet_Error.vi (Größe: 9,36 KB / Downloads: 190)

0 .txt  10Hz_20Hz.txt (Größe: 1,25 MB / Downloads: 218)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Hilfe bei der Auswertung von FFT Analyse cesavila2k 1 5.201 22.05.2012 14:59
Letzter Beitrag: chrissyPu
  Order Analyse: schlechte Darstellung bei Drehzahlschwankungen jens_j 4 7.463 15.09.2010 08:11
Letzter Beitrag: jens_j
  Frequenz aus FFT-Analyse als Wert ausgeben quattro 9 12.337 27.07.2010 06:21
Letzter Beitrag: Y-P
  part average analyse(paa) cosmos 5 4.817 04.01.2008 10:30
Letzter Beitrag: Y-P
  FFT - Analyse & Filterung von Signalen durch Änderung der FFT-Koeffizienten? BeFu 1 13.257 19.03.2007 22:02
Letzter Beitrag: dc6xs
  Impact analyse / Pulsauswertung Philip1403 0 3.708 23.04.2006 16:01
Letzter Beitrag: Philip1403

Gehe zu: