2017-06-06 4 views
1

Ich arbeite an einer Anwendung, wo ich eine große Menge von Daten über den USB von 4 Sensoren erhalte und sie in Matlab anzeigen.Streaming während der Verarbeitung

Das Streaming funktioniert perfekt, jedoch muss ich die Daten beim Streamen verarbeiten. Ich benutze Segmente der eingehenden Daten und verarbeite sie dann plotten die verarbeiteten Daten. Die eingehenden Daten werden Segment für Segment übernommen und verarbeitet.

Mein Problem ist, dass, wenn ich 5 Sekunden Daten in jedem Segment verarbeiten. Wenn die Verarbeitung und das Plotten implementiert werden, stoppt das Streaming, daher muss ich auf das Streaming des nächsten 5-Sekunden-Segments warten, wenn es Zeit für die nächste Stapelverarbeitung ist. Selbst wenn ich den Beginn der Verarbeitung z. B. nach 20 Sekunden verzögere, hört das Streaming immer auf, wenn die Verarbeitung beginnt, und ich habe immer eine kleine Pause, um neue Daten zu lesen. Wie kann ich das Streaming oder den Datenempfang von der seriellen Schnittstelle auch dann aufrechterhalten, wenn ich die Daten verarbeite?

Dank

Antwort

1

sollten Sie einen Worker-Thread benutzen, um Ihre Verarbeitung durchzuführen. Dies kann in Matlab mit dem parfeval Befehl wie folgt vorgenommen werden:

parpool % start a parallel pool (may take some time) 

... 

nOutputs = 1; % number of outputs 
in1 = 1; % first input argument 
in2 = 2; % second input argument 
f = parfeval(@your_function, nOutputs, in1, in2); % execute your function with two input arguments as example 

... 

% check regularly if the function is executed 
if strcmp(f.State, 'finished') == 1 
    output = fetchOutputs(f); 
    ... % do something with the output 
    delete(f); % empty resources 
end 

Als Alternative können Sie den batch Befehl verwenden.

Verwandte Themen