Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Fachkräfte:
Informatiker (m/w) für den Bereich Toolkette Embedded Software
Weiterentwicklung einer MATLAB- / Simulink-Toolkette
cbb-Software GmbH - Stuttgart

Ingenieur (m/w) für den Bereich modellbasierte Embedded-Softwareentwicklung
Integration von Simulink-Modellen auf die Ziel-Hardware (mit TargetLink) sowie Durchführung von Softwaretests
cbb-Software GmbH - Stuttgart

Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

Prüfingenieur im Bereich Hardware (m/w)
Vorbereitung, Durchführung und Auswertung von entwicklungsbegleitenden Testfällen hinsichtlich Funktion, Umwelt und Dynamik
HOPPECKE Batterien GmbH & Co. KG - Zwickau

Funktionsentwickler/in Funktionale Sicherheit
Embedded-Software- und Funktionsentwicklung in der Automatisierung des Antriebstrangs
LuK GmbH & Co. KG - Bühl

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Separieren von Messdaten

 

Alex_der_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2018, 16:49     Titel: Separieren von Messdaten
  Antworten mit Zitat      
Hallo,
ich möchte meine Messdaten gerne separieren, habe aber einen Knoten im Hirn und komme irgendwie nicht weiter.

Meine Messdaten habe ungefähr folgendes Format:
x 1 x x
x 1 x x
x 1 x x
x 2 x x
x 2 x x
x 2 x x
x 3 x x
x 3 x x
x 4 x x
x 4 x x
x 4 x x
x 5 x x
x 5 x x
x 5 x x

Ich möchte jetzt einzelne Blöcke raustrennen, um diese später weiter Auswerten zu können. Derzeitiger Code dazu sieht folgendermaßen aus:

%% Separate Tests
[r,c]=size(data);
counter=0;
ii=1
for i=1:r


while data(i,2) < 2 && data(i,5) > 0 ;

counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;
end

while data(i,2) < 6 && data(i,5) > 3 ;

counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;
end
end

Den ersten Block schaffe ich wunderbar mit einer if-Schleife, ich weiß also das es vom Prinzip funktioniert. Ich ende aber bei allen Bedingungen (if, while) darin, dass mir das Programm die einzelnen Zeilen separiert und nicht den ganzen Block.
Gibt es einen Tipp was ich falsch mache?
Grüße und schonmal vielen Dank 


Harald
Forum-Meister

Forum-Meister


Beiträge: 18.671
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 02.01.2018, 23:35     Titel:
  Antworten mit Zitat      
Hallo,

der Code wirft keine Fehler und liefert aber nicht die gewünschten Ergebnisse, oder? Dann ist die Frage, was die gewünschten Ergebnisse sind.

Am besten wäre ein konkretes Beispiel von data und die dafür gewünschten Ergebnisse.

Grüße,
Harald 
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_der_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2018, 08:47     Titel:
  Antworten mit Zitat      
Hallo Harald,
das Problem das ich habe ist, das ich nach den Werten (sind die Testnummern) in Spalte zwei filtere, dabei gehören aber manchmal zwei Zahlen zu einem Test.
Das Problem ist, dass ich mit
if data(i,2) == 2;

counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;
end

Alle Werte von Test 1 in einem data_cell Paket habe, aber für alles was danach kommt trifft die Bedingung if data(i,2) == 2 zu und er macht somit für jede Zeile von Test zwei ein neues data_cell Paket mit jeweils einem Wert drin. Mir fehlt irgendwie ein Befehl der sagt, schreibe die gewünschten Werte (z.B. Test 2 und 3) in ein data_cell Paket. bei der while Schleife macht er das selbe wie bei der if Schleife, da ja auch dort die Bedingungen zutreffen.
Mit if Schleife bekomme ich es noch hin, dass er alle Tests die nach den gewünschten kommen abschneidet, aber eben nicht die die vor dem gewünschten Test sind.
Hoffe damit ist mein Problem etwas klarer geworden. 
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 18.671
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 03.01.2018, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

mir ist immer noch nicht klar, was du eigentlich erreichen möchtest.

Wie gesagt:
Zitat:
Am besten wäre ein konkretes Beispiel von data und die dafür gewünschten Ergebnisse.


Grüße,
Harald 
Private Nachricht senden Benutzer-Profile anzeigen
 
Alex_der_Gast

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2018, 11:45     Titel:
  Antworten mit Zitat      
Dann angehängt die Testdatei (test.xls) und die Ausgabedate (t1.xls). Bei der Ausgabe ist das erste Blatt wie gewünscht, und alle weiteren sollten eigentlich in das zweite zusammengefasst sein.
Und hier noch der volle Code den ich verwende:

%% Data import
clear
clc


data=xlsread('test.xls');


%% Separate Tests
[r,c]=size(data);
counter=0;
ii=1

for i=1:r


if data(i,5)==4;
counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;

end
if data(i,5)==6;
counter=counter+1;
data_cell(counter)={data(ii:i,Smile};
ii=i+1;

end

end
%% Mean Value
[r,c]=size(data_cell);
for i=1:c
r1=size(data_cell{1,i},1);

Mean_Value(i,1)=mean(data_cell{1,i}(:,6));
Mean_Value(i,2)=mean(data_cell{1,i}(:,7));
%end
%% Write Excelfile

prompt = {'Enter the name of the new excelfile:'};
dlg_title = 'Input';
num_lines = 1;
answer2 = inputdlg(prompt,dlg_title,num_lines);
for i=1:c

filename = answer2{1,1};
sheet = i;
xlRange = 'C3';
A=data_cell{1,i};
xlswrite(filename,A,sheet,xlRange)
r1=size(data_cell{1,1},1);
B={'','Mean Value', '';'Voltage',round( Mean_Value(i,1),2)*1000,'mV'; 'Current', round( Mean_Value(i,2),2)*1000,'mA'};
xlRange = 'M2';
xlswrite(filename,B,sheet,xlRange)


e = actxserver('excel.application'); % # open Activex server
e.Workbooks.Add;
D={'Time','Time pro step','','','','Voltage','Current'};
xlRange = 'C2';
xlswrite(filename,D,sheet,xlRange)
e.Range('C2:O4').Select;
e.Selection.WrapText = true;
end

system('taskkill /F /IM EXCEL.EXE'); 

t1.xls
 Beschreibung:
Ausgabedatei des Skripts

Download
 Dateiname:  t1.xls
 Dateigröße:  40.5 KB
 Heruntergeladen:  42 mal
test.xls
 Beschreibung:
Datei mit Testergebnissen

Download
 Dateiname:  test.xls
 Dateigröße:  13.65 MB
 Heruntergeladen:  53 mal
 
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
.



goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.