WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Endlose Datenerfassung und Weiterverarbeitung

 

rudio
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2010, 14:28     Titel: Endlose Datenerfassung und Weiterverarbeitung
  Antworten mit Zitat      
Hallo werte Community,

das ist hier mein erster Beitrag und ich würde mich echt freuen, wenn mir bei meinem Problem oder Aufgabenstellung weitergeholfen wird.
Allgemein:
Ich will mit Matlab ein Signal von einer USB-Datenerfassungskarte abtasten. Dabei sollen vier Kanäle gleichzeitig erfasst werden. Die Datenrate pro Kanal leigt bei 50-100 kHz.
Problem:
Das Signal soll dauerhaft, also über einen längeren Zeitraum abgetastet werden. Da der Matlabspeicher irgendwann voll ist, müssen die Daten nach einer gewissen Zeit in einen Buffer oder einen anderen Speicherort geschrieben werden. Und die Variablen und Matlab wieder gelöscht werden, um die weiteren Daten aufnehmen zu können.
Ich habe zu dem Thema noch keine echte Idee, wie ich an die Sache herangehen kann. Das ganze mit einer Endlos-while-Schleife zu realisieren, bei der ich die Vektorgröße abfrage und dann die Variable speicher und dann lösche, halte ich für eine sehr schlechte Lösung.
Auf der anderen Seite habe ich keine Ahnung wie ich während der Datenerfassung in den Prozess eingreife.

Die Datenerfassung wird folgendermaßen gestartet:
start(ai);
[data,time]=getdata(ai)
stop(ai)

Da der stop-Befehl eigentlich nicht ausgeführt werden soll, läuft irgendwann der Speicher voll und ich weiß nicht, wie ich das verhindern kann.
Falls noch weitere Infos zu dem Problem fehlen, einfach schreiben. Ansonsten wär ich sehr dankbar, wenn ich ein paar Infos und Feedbacks erhalten würde.
greetz
Private Nachricht senden Benutzer-Profile anzeigen


yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 21.07.2010, 15:09     Titel: Re: Endlose Datenerfassung und Weiterverarbeitung
  Antworten mit Zitat      
Hallo rudio,

herzlich willkommen im Forum.

rudio hat Folgendes geschrieben:
Hallo werte Community,
herangehen kann. Das ganze mit einer Endlos-while-Schleife zu realisieren, bei der ich die Vektorgröße abfrage und dann die Variable speicher und dann lösche, halte ich für eine sehr schlechte Lösung.

Auf der anderen Seite habe ich keine Ahnung wie ich während der Datenerfassung in den Prozess eingreife.

Die Datenerfassung wird folgendermaßen gestartet:
start(ai);
[data,time]=getdata(ai)
stop(ai)


Nun, wie wird denn der Prozess am Leben erhalten? Gibt es nicht da dann eine Endlosschleife, die dafür sorgt, dass immer wieder Daten in ai speichert?
Dann brauchst Du statt oder nach der Speicherung von ai nur ins geeignete Format speichern (dlmwrite, save, ... siehe andere beiträge im Forum) und die Variable wieder freigeben.

Tschuldigung ob der Nachfrage, da fehlt mir vermutlich der technische Hintergrund, wie das getdata(ai) permanent neue Daten liefert.

Ansonsten glaube ich nicht, dass Du um die Endlosschleife drum herum kommst. Das schnellste Verfahren ist save, aber wie Du die Daten anschließend verwerten willst, hängt ja davon ab, wie Du sie speicherst.

HTH,
yankemen
Private Nachricht senden Benutzer-Profile anzeigen
 
rudio
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2010, 16:23     Titel:
  Antworten mit Zitat      
Hi yanke

schonma danke, dass du dich mit dem Thema befasst hast. Laughing
Ich habe mich jetzt etwas intensiver mit der Sache beschäftigt.
Der Befehl start(ai) startet die Datenerfassung der Karte, was bedeutet, dass ein Buffer mit den abgetasteten Daten beschrieben wird. Ist der Buffer voll und die Daten werden nicht abgeholt, werden die ältesten Daten wieder überschrieben. Zum Daten abholen, kann der Befehl getdata(ai) verwendet werden, wobei dann der Buffer geleert wird (falls ich das richtig verstanden habe). Bin mir nicht sicher, ob Matlab den Buffer im Speicher deklariert oder das ein Speicher auf der Datenerfassungskarte ist.
Nun gibt es die Möglichkeit z.B. die Anzahl der Abtastwerte mit SamplesAvailable zu bestimmen und dann immer nach gewünschter Anzahl die Daten abzuholen.
Die Frage ist nun, wie das schnellste Vorgehen danach ist. Die Daten müssen dann abgespeichert werden und oder Echtzeit prozessiert werden, wobei die Datenerfassung aber nicht unterbrochen werden darf.
Kann man mit Matlab irgendeinen Ringbuffer beschreiben, aus dem z.B. dann ein anderer Rechner oder ein anderes Programm die Daten regelmäßig abholen kann?
Habe in dem Gebiet leider noch keinerlei Erfahrung...

greetz
Private Nachricht senden Benutzer-Profile anzeigen
 
rudio
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 21.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2010, 09:39     Titel:
  Antworten mit Zitat      
Naja ganz so einfach funktioniert das auch wieder nicht. Wäre ja zu schön.
Nach dem start(ai)-Befehl muss ich dann ein 'wait' einfügen und dann könnte ich mit SamplesAvailable abfragen wieviele Samples ich habe. Das Ganze ist aber auch nur einmalig möglich, was heißt, dass ich wieder bei der endlos-while-Schleife angelangt bin.
Private Nachricht senden Benutzer-Profile anzeigen
 
yankemen
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 14.04.10
Wohnort: ---
Version: 32: 2008a & 2010a
     Beitrag Verfasst am: 26.07.2010, 13:46     Titel:
  Antworten mit Zitat      
Moin rudio,

m.E. nach scheint es für die Aufzeichnung am einfachsten zu sein, in eine Endlosschleife die Zeile [data,time]=getdata(ai) zu packen.
Code:

i = 1;
while true
[data,time]=getdata(ai);
save(['data_' num2str(i)], data); %sofern time unwichtig ist
i = i+1;
wait(bisPuffergutgefülllt);
end
 

Nun werden sehr viele .mat-Dateien erzeugt. Mit load kannst Du sie später dann wieder einlesen und weiterverarbeiten. Gegebenenfalls mit format noch entsprechend vorher formatieren.

rudio hat Folgendes geschrieben:

Der Befehl start(ai) startet die Datenerfassung der Karte, was bedeutet, dass ein Buffer mit den abgetasteten Daten beschrieben wird. Ist der Buffer voll und die Daten werden nicht abgeholt, werden die ältesten Daten wieder überschrieben. Zum Daten abholen, kann der Befehl getdata(ai) verwendet werden, wobei dann der Buffer geleert wird (falls ich das richtig verstanden habe). Bin mir nicht sicher, ob Matlab den Buffer im Speicher deklariert oder das ein Speicher auf der Datenerfassungskarte ist.

Wenn die Daten in Matlab bereits einen Puffer bekommen, dann kann man sie auch von dort wegschreiben. Das sollte bei start(ai) näher definiert sein.
Es klingt fast so, als bräuchtest Du zwei Speicher. Denn wenn der Lese-Zugriff auf den aufgebauten und permanent gefüllten Puffer nur von einem Prozess zeitgleich geschehen darf, dann läuft der voll, Du kannst auslesen - und alles, was passiert, bis Du ausgelesen hast, geht verloren. Bei zwei Speichern würde immer einer gelesen und der andere geschrieben. Zumal das Lesen auch mit Schreiben verbunden ist, wenn der Puffer leer gemacht wird.
Matlab kann Multithreading, aber dazu braucht es die richtige Toolbox. Ich vermute(!) zumindest, dass es erst mit dieser Toolbox möglich wird, die Zugriffsrechte detailliert zu regeln.

Bezüglich einer Verwendung auf/ von externen Rechnern/ Speichern kann ich Dir nichts sagen, da kenne ich mich nicht aus.

Um genau zu sein:
ich kenne mich wohl mit den Möglichkeiten von Matlab mit und ohne den Toolboxen zu wenig aus, um da noch eine funktionierende Antwort zu liefern. save ist das schnellste, was Matlab bietet, afaik.

Grüße,
yankemen[/quote]
_________________

Code:
% Kommentare brauchen ein Leerzeichen nach dem %
Gibt es ein Ist und ein Wunsch-Soll? Gibt es Beispiele zum Durchprobieren? Wenn selbstgeschriebene Funktionen aufgerufen werden: können sie bitte angehangen werden? Gab es Fehlermeldungen?
Stimmen die Werte, wenn der Debugger mit Haltepunkten etc. eingesetzt wird?
Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.