Verfasst am: 27.02.2020, 13:50
Titel: Daten aus mehreren .csv Files einlesen und als untersch. Var
Hallo!
Ich habe folgendes Problem;
um eine optimale Grundlage für den Vergleich versch. Messungen zu haben, möchte ich aus bestehenden Messdaten (15 Messungen mit dem gleichen Ergebnis und etwas ähnlichen Signalaufzeichnungen) mit Hilfe von Matlab quasi eine "Durchschnittsfunktion" erstellen, die ich dann eben später weiterverwenden kann.
Dafür habe ich mir gedacht, dass ich die Signale aus allen 15 Messungen einlese und als jeweils eigene Variable abspeichere. Für eine Messung geht das, aber kann man Matlab auch so programmieren, dass es (zB mit For-Schleife? Ich habe da nicht so die Ahnung)automatisch jedes neu eingelesene Signal als neue Variable speichert? Sodass ich das Einlesen der jeweiligen Daten automatisieren kann? Denn ich werde im Verlauf der Untersuchung mind. 15 Ausgleichsgraden erstellen müssen.
Ich möchte also nach dem "Start/Ende" am Ende des derzeitigen Codes, das Matlab mich nach der nächsten einzulesenen Datei fragt, sodass diese dann unter neuen Variablen (zB r302, r303, etc) speichert.
Code:
%%Skript zur Erstellung einer Ausgleichsgraden für die Widerstandswerte
%%(r).
clearall clc
%%Daten mittels CommandWindow anfordern und aus Excel Datei einlesen,
%abspeichern des Namens für spätere Benennung des Diagramms
%t=Zeit, r001=Widerstandssignal der ersten eingelesenen Messung
prompt = 'Welche Datei soll Teil der Ausgleichsgeraden werden? ';
fnameIn = input(prompt,'s');
%fnameIn = 'Schweissung_39.csv';
[t, r001] = importSi(fnameIn);
%%Daten aufbereiten und passend visualisieren / analysieren (Filtern)
%Low Pass Filter(Filter der nur kleine Frequenzen berücksichtigt)
%Mit Hilfe des Filter Designers
load low.mat
r201=filter(low,r001);
%%Verzögerung des Filters als Signal kompensieren
r301 = filtfilt(low.sosMatrix, low.Scalevalues, r201);
%%Anfang und Ende von r3 wegschneiden, die Zeit Variable t wird in "tfr"
%%umbenannt für späteres Plotten etc (aufgrund der Vektorlänge)
startr301 = find(abs(r301) > 0.1*max(abs(r301)), 1, 'first');
ender301 = find(abs(r301) > 0.1*max(abs(r301)), 1, 'last');
r301 = r301(startr301:ender301);
tfr01 = t(startr301:ender301);
und hier sollte dann die nächste Datei eingelesen werden (r002) und alles beginnt von vorn. Am besten speichert Matlab immer nur die wichtige Variable (r301) und löscht die Hilfsvariablen (r001 und r201 nach Verarbeitung).
bzw. wenn die Daten später nicht benötigt werden, das Array einfach überschreiben.
Mit
dir
können z.B. auch die Namen aller .csv-Dateien in einem Verzeichnis erstellt werden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Vielen Dank für deine Hilfe. Das automatische einlesen klappt super. Jetzt möchte ich die eingelesenen Variablen (die bereits durch den Lowpass gingen) alle aufrufen (n=20) und will, dass jede r301 und tfr301 Variable unter einem Namen abgespeichert wird, der mit dem Dateinamen zusammen hängt.
Code:
for k = 1:20
fnameIn = ['Raster_' num2str(k) '.csv'];
M = importfileAGGAuswurf(fnameIn);
fnameOut = replace(fnameIn, '.csv', '.mat');
LowPass, etc wird angewendet
save(fnameOut) end
Bis hierhin klappt es super!
Jetzt der problematische Teil:
%Einlesen der aus 1. entstandenen .mat Dateien und als andere Var.
%Abspeichern
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Alles klar, danke! Wenn ich deinen Code ausführe, sagt MATLAB folgendes:
Invalid expression. Check for missing multiplication operator, missing or unbalanced delimiters, or other syntax error. To
construct matrices, use brackets instead of parentheses.
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Jetzt zeigt er mir jedoch die Fehlermeldung "Error: An array for multiple LHS assignment cannot contain M_STRING.", wenn er versucht die Variablen (r301, etc) unter den angegebenen Namen abzuspeichern. Aber soweit ich gesehen habe, gibt es doch keine Leerzeichen, etc?
die Problematik ist im Kern immer noch dieselbe, und die Abhilfe siehe Beitrag von 10:55.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Einstellungen und Berechtigungen
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
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.