Verfasst am: 25.11.2020, 12:05
Titel: Mittelwert aus Hysterese
Hallo, ich bin gerade ein bisschen am verzweifeln, obwohl mein Problem bestimmt sehr einfach wirkt.
Ich habe aus Messwerten eine Hysterese erstellt und möchte darauf eine gemittelten Hysterese berechnen (siehe Bild).
Da aber in x und in y-Richtung ein Jitter vorhanden ist, sind die Punkte nicht monoton steigend. Deshalb kann man mit der interp1- Funktion leider nicht arbeiten.
die rote Kurve soll also aus den blauen Punkten ermittelt werden?
1. Punkte für die beiden Zweige trennen
2. Jeweils sortieren (das fehlte wohl) und interpolieren (x in Abhängigkeit von y dürfte besser klappen als umgekehrt)
3. x-Werte für jetzt vergleichbare y-Werte mitteln
Du hast anscheinend ja schon ein bisschen Code geschrieben. Wenn du den auch zur Verfügung stellst, lässt sich leichter darauf aufbauen.
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 ;)
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2020, 12:53
Titel:
Vielen Dank für deine schnelle Antwort Harald
Genau so wie du es beschrieben hast bin ich vor gegangen. Das Problem dabei ist aber, dass Matlab nach dem Sortieren die Kurve anders interpretiert (wieder siehe Bild).
Was mir jetzt noch einfällt: gibt es eine Möglichkeit, nach dem Trennen der Kurven einfach die Werte aus der Matrix zu löschen, die nicht monoton steigend sind? Also kleiner als der vorherige Wert?
du sortierst anscheinend nach x-Werten. Ich würde nach y-Werten sortieren.
Auch das Löschen sollte möglich sein, z.B. über logische Indizierung.
Wie gesagt: poste bitte deinen Code. Anhand der händischen Skizze kann man zwar sehen, was das Problem ist, man kann aber nicht Ansätze zur Behebung ausprobieren.
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 ;)
ridice
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2020, 13:15
Titel:
Ich sortiere nach y-Werten. Hier mein Code für den einen Teil der Schleife:
A = [i_FM(firstIndi_FM:lastIndi_FM) , phi_FM(firstIndi_FM:lastIndi_FM)];
A = sortrows(A,2,'ascend');
xq = (-0.5:.0001:0.5).';
V = interp1(A(:,2), A(:,1), xq, 'spline');
interp1 gibt hier noch eine Fehlermeldung aus, weil anscheinend doppelte y-Werte vorhanden sind. Ich weiß nicht ob du mit dem Code etwas anfangen kannst?
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 ;)
ridice
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2020, 14:14
Titel:
Ok ich habe es so weit erst einmal geschafft. Bei dem Mittelwert besteht der Anfang und das Ende des Vektors allerdings aus NaN ... deshalb geht der Mittelwert nicht bis zu den Maxima.
Code:
% Das ist mein Programm. [peaki_FM,locsi_FM] = findpeaks(i_FM,'MinPeakDistance',200); % Find Minimas
firstIndi_FM = locsi_FM(1);
lastIndi_FM = locsi_FM(3);
A = [i_FM(firstIndi_FM:lastIndi_FM) , phi_FM(firstIndi_FM:lastIndi_FM)];
A = sortrows(A,2,'ascend');
[A2_sort,ind]=unique(A(:,2))
A = A(ind,:)
xq = (-0.4:.0001:0.4).';
A = interp1(A(:,2), A(:,1), xq,'linear');
B = [i_FM(1:firstIndi_FM);i_FM(lastIndi_FM:end)];
C = [phi_FM(1:firstIndi_FM);phi_FM(lastIndi_FM:end)];
D = [B,C];
D = sortrows(D,2,'ascend');
[D2_sort,ind]=unique(D(:,2))
D = D(ind,:)
D = interp1(D(:,2), D(:,1), xq,'linear');
E= (A-D)/2+D;
wenn du E aus A und D über mean mit Option "omitnan" berechnest, sollte auch das noch gelöst sein. Alternativ die NaN-Daten von Anfang an mit rmmissing entfernen.
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 ;)
ridice
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.11.2020, 14:56
Titel:
Die NaN-Daten entstehen beim interpolieren. Wenn ich sie einfach lösche, fallen die Maxima weg und die Vektoren werden unterschiedlich lang.
Ich habe das jetzt anders gelöst, nicht perfekt aber es funktioniert erst einmal.
Dann versuch mal extrapolieren, indem du die entsprechende Option bei interp1 setzt?
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.