Verfasst am: 08.07.2019, 16:22
Titel: Algorithmus für temperaturbedingte Messabweichungen
Hallo,
ich sitze momentan an einem Projekt, welches sich mit der "Resonanz" von Stahlbauteilen beschäftigt.
Das Projekt befindet sich noch in den Anfängen. Ich hoffe, dass mein Vorhaben mit allen Fragen die sich ergeben hier rein passt und meine Fragen nicht den Rahmen des Machbaren sprengen. Matlab und programmieren ist für mich Neuland...
Ich habe nun 2 Übungsskripte bearbeitet, dort wurden die Basics von Matlab erörtert.
Projektarbeit:
Die Hauptaufgabe besteht darin, einen Algorithmus zu schreiben.
Dieser Algorithmus soll möglichst die Zusammenhänge der Messabweichungen, bedingt durch unterschiedliche Temperaturen des Probekörpers, erkennen.
Letztendlich möchte ich somit mit Messergebnissen, die aus einem Versuchsdurchlauf bei z.B 50°C Raumtemperatur stammen, die Messergebnisse für z.B 20°C Raumtemperatur bestimmen können, ohne den Versuch nochmal extra bei 20°C zu fahren.
Zum Versuchsdurchlauf mit dem Probekörper: -Die relevanten Messdaten bestehen ausschließlich aus Zahlen, allerdings befinden sich auch Buchstaben in manchen Zellen, welche aber nicht benötigt werden-
-Die unterschiedlichen Dateien sind vom Aufbau alle gleich, Zeilen- und Spalten- Zahlen, wie auch die Namen der Spalten sind gleich-
Der Probekörper wurde auf 20°C, 30°C,..., 70°C erhitzt.
Pro Temperatur wurden jeweils 3 Messdurchläufe gefahren, um leichten Messabweichungen entgegenzuwirken.
Der Probekörper wird unter einer bestimmten Frequenzspanne in Schwingung gebracht. Die entstehenden Messgrößen der Temperaturen ergeben im plot ansehnliche Graphen. Auf den ersten Blick scheinen diese einfach nur "verschoben" zu sein. Sprich der Graph für z.B "20°C" ist um eine gewisse Steigung im Vergleich zum Graph "70°C" verschoben. Man könnte sie quasi übereinander legen und sie sähen fast identisch aus.
Im Anhang dazu eine Grafik.
Ich bin noch ganz am Anfang und möchte als erstes die Daten automatisiert importieren.
Fragen:
1. Ich bin mir unsicher, ob ich die Messdaten lieber als .txt oder als .xlsx verwenden soll
2. Wie lassen sich die Daten der unterschiedlichen Dateien automatisiert zur weiteren Verarbeitung importieren? Ich möchte ungerne nur mit der Maus arbeiten, sondern, wenn möglich, Skripte generieren.
3. Gibt es passende Toolboxen, die gerade für die weitere Arbeit bezüglich des Algorithmus hilfreich wären? Zum Beispiel Möglichkeiten der Glättung mit komplexen Polynomen (polynomial regression) oder mit gleitenden Durchschnitten.
Für Anregungen und Hilfestellungen jeglicher Art bin ich dankbar.
Hier noch der Code, mit dem ich bis jetzt die Daten importiert habe:
Code:
opts = spreadsheetImportOptions("NumVariables", 3); % Bedeutung für opts %
Sheet = "P1-26°C"; % benennt das Tabellenblatt der Excel Datei %
opts.VariableNames = ["FrequencykHz", "SusceptancemS", "ConductanceS"]; % benennt die zu wählenden Spalten %
opts.VariableTypes = ["double", "double", "double"]; % setzt den Datentypfest %
1. Wenn man sich die Daten an sich ansieht, ist Excel meist übersichtlicher. Besonders bei großen Dateien dauert aber halt das Laden. Kompromiss: .csv. Kann in Excel angeschaut werden, ist aber andererseits Text.
2. Du möchtest also mehrere ähnlich formatierte Dateien importieren? Da bietet sich datastore an. Wenn die Dateien schön durchnummeriert sind, kannst du auch selbst eine for-Schleife machen.
Was meinst du an der Stelle mit komplexen Polynomen? Sind die Daten und/oder die Koeffizienten komplexwertig, oder was?
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 ;)
1. .csv behalte ich mir im Kopf. Vorerst gehts mit .xlsx weiter.
2. korrekt, die Excel Tabellen sind vom Aufbau her identisch, nur die Werte weichen in gewissem Maße ab...
Das Thema Schleifen muss ich mir noch aneignen, hast du da einen Tipp für mich?
3. movmean, polyfit und polyval werde ich mir genauer angucken
Komplex war der falsche Ausdruck. Ich meinte eher eine komplexe Möglichkeit der Glättung. Der gleitende Durchschnitt scheint nach erster Recherche ja etwas "einfacher" zu sein, so dass die Fehlerspanne größer wäre.
Das Thema Schleifen muss ich mir noch aneignen, hast du da einen Tipp für mich?
Ist an sich kein Hexenwerk, zumal du ja schon eine Schleife im Code hast.
Die entscheidende Frage ist, ob die Dateien durchnummeriert sind und in welcher Form die Dateinamen aufgebaut sind. Je nachdem würde ich selbst eine for-Schleife schreiben oder mit datastore oder auch dir arbeiten.
Zitat:
Ich meinte eher eine komplexe Möglichkeit der Glättung.
Also Richtung Filter?
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 ;)
Die Dateinamen könnte ich natürlich noch anpassen, wenns von Nutzen wäre.
Zitat:
Ist an sich kein Hexenwerk, zumal du ja schon eine Schleife im Code hast.
Die entscheidende Frage ist, ob die Dateien durchnummeriert sind und in welcher Form die Dateinamen aufgebaut sind. Je nachdem würde ich selbst eine for-Schleife schreiben oder mit datastore oder auch dir arbeiten.
Ich habe 3 Proben, jeweils einmal vorgespannt und ohne Vorspannung, und diese jeweils bei den gewissen Temperaturen und diese dann nochmal jeweils mit 3 Messdurchläufen.
Ich habe 3 Proben, jeweils einmal vorgespannt und ohne Vorspannung, und diese jeweils bei den gewissen Temperaturen und diese dann nochmal jeweils mit 3 Messdurchläufen.
z.B Probe 2, ohne Vorspannung, 30°C, Messdurchlauf 3 -> 2_30°C_P3.xlsx
Dann wäre meine Empfehlung spreadsheetDatastore oder dir.
Zitat:
Zitat:
Also Richtung Filter?
Ja.
Dann schau dir filterDesigner an.
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 ;)
ich komme nicht so richtig weiter, weil ich einfach zu viele Fehler mache und es an einigen Ecken hapert.
Bitte hilf mir doch ein wenig, damit ich verstehe, was genau ich falsch mache und wo meine Probleme so liegen...
In der Hilfe von Matlab für "spreadsheetdatastore" stehen ja unter anderem mögliche Properties für den weiteren Gebrauch. Wie wende ich sie richtig an?
Ich glaube ich verstehe nicht genau, wie man spreadsheetdatastore anwendet und mit den Properties weitermacht.
Ich möchte nun aus dem Datastore meine Größen "Frequenz, Suszeptanz und Admittanz" herausholen, um damit weiterzuarbeiten.
Wie mache ich das am besten aus den jeweiligen files im Datastore?
Es sollten doch eigentlich jetzt nur noch "Frequency_Hz_" "Conductance_S_" und "Susceptance_S_" ausgespruckt werden?!
Sheet Format Properties:
NumHeaderLines: 0
ReadVariableNames: true
VariableNames: {'Frequency_Hz_', 'Impedance_Ohms_', 'Admittance_S_' ... and 5 more}
VariableTypes: {'double', 'double', 'double' ... and 5 more}
Properties that control the table returned by preview, read, readall:
SelectedVariableNames: {'Frequency_Hz_', 'Impedance_Ohms_', 'Admittance_S_' ... and 5 more}
SelectedVariableTypes: {'double', 'double', 'double' ... and 5 more}
ReadSize: 'file'
mit dem spreadsheetdatastore hat es schonmal funktioniert die Daten zu importieren.
Ich probiere mich nun an einer Schleifen-Variante. Das mache ich zum ersten Mal...
Nun möchte ich eine Abfrage starten lassen, bei der zunächst der Dateiname erfragt wird und die Datei dann eingelesen wird.
Es sind letztendlich viele Dateien vorhanden, welche ich durch die Eingabe des Namens importieren/analysieren möchte. Pro Datein gibt es 3 Messdurchläufe mit folgenden Bereichen im Tabellenblatt:
Momentaner Ansatz:
Für jeden der 3 Durchläufe hole ich mir die Werte heraus und erzeuge meine Variablen. Aus "Susceptance1", "Susceptance2" und"Susceptance3" kann ich mir dann z.B über die mean-Funktion den Mittelwert erzeugen, plots der Durchläufe und auch aus weiteren files erzeugen etc. um meine Analyse voranzubringen und meine Arbeit zu füllen.
Gefühlt hat das gerade nur noch wenig mit Schleifen zu tun...
Bin gerade etwas überfragt, da ich sowas zum 1. Mal mache und Matlab noch nicht lange nutze.
Ich denke mal, dass man über die Zeilen und Spalten Zahl sein Ziel erreicht?
" a = size(daten1) " ......?
prompt ='Filename? ';
Filename = input(prompt,'s'); %file Name ohne Dateiendung
prompt='Number of measurement-cycles per file? ';
Messungen=str2num(input(prompt,'s')); %Messungen pro Tabellenblatt
da es sich um fast zusammenhängende Bereiche handelt, würde ich zunächst A9:H3090 importieren und dann die benötigten Teile herausholen. Wenn du die nichtnumerischen Daten nicht brauchst, kannst du das Argument txt auch weglassen.
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 ;)
prompt ='Filename? ';
Filename = input(prompt,'s'); %file Name ohne Dateiendung
prompt='Number of measurement-cycles per file? ';
Messungen=str2num(input(prompt,'s')); %Messungen pro Tabellenblatt
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.