Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Modellbildung und Simulation dynamischer Systeme

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Daten aus mehreren .csv Files einlesen und als untersch. Var

 

Leja1902
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.02.2020, 14:50     Titel: Daten aus mehreren .csv Files einlesen und als untersch. Var
  Antworten mit Zitat      
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).

clear all
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).
 


Vielen Dank und liebe Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.02.2020, 15:19     Titel:
  Antworten mit Zitat      
Hallo,

mit neuen Variablen macht man sich das Leben unnötig schwer. Besser ist ein Cell Array
Code:
for k = 1:  ...
    r3{k} = ...
end


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2020, 11:33     Titel:
  Antworten mit Zitat      
Hallo Harald!

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

for k = 1:10
   load('Raster_' num2str(k) '.mat');
   'r301von' num2str(k)=r301;
   'tfr01von' num2str(k)=tfr01;
 
end


Matlab sagt mir, dass das nicht möglich ist. Aber warum? Das reinladen müsste doch mit den gleichen Abläufen funktionieren, oder nicht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.02.2020, 11:55     Titel:
  Antworten mit Zitat      
Hallo,

ich würde wirklich bei dem Cell Array bleiben. Dynamische Variablennamen sind zwar mit eval oder assignin möglich, machen aber das Leben recht schwer.

Code:
for k = 1:10
   load('Raster_' num2str(k) '.mat');
   r301von{k}=r301;
   tfr01von{k}=tfr01;
 
end


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2020, 12:05     Titel:
  Antworten mit Zitat      
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.

und zeigt dabei auf das (numtostr).

Woran kann das liegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.02.2020, 13:29     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte das einfach von dir kopiert. Es muss so aussehen:
Code:
load(['Raster_' num2str(k) '.mat']);


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Leja1902
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 25.02.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.02.2020, 13:44     Titel:
  Antworten mit Zitat      
Das funktioniert, danke!



Code:
for k= 1:3
load(['Raster_' num2str(k) '.mat']);
['t301vonRaster__' num2str(k)]=r301;
['t301vonRaster__' num2str(k)]=t301;
['tft301vonRaster__' num2str(k)]=tft301;
['tfr301vonRaster__' num2str(k)]=tfr301;
end


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 21.202
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.02.2020, 15:31     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
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
.


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


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


Copyright © 2007 - 2020 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.