WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Mittelwert aus Hysterese

 

ridice

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2020, 13:05     Titel: Mittelwert aus Hysterese
  Antworten mit Zitat      
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.

Fällt euch da noch etwas ein?

Paul

Bildschirmfoto 2020-11-25 um 10.29.17.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2020-11-25 um 10.29.17.png
 Dateigröße:  254.99 KB
 Heruntergeladen:  230 mal
data.mat
 Beschreibung:

Download
 Dateiname:  data.mat
 Dateigröße:  11.12 KB
 Heruntergeladen:  227 mal


Harald
Forum-Meister

Forum-Meister


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

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2020, 13:53     Titel:
  Antworten mit Zitat      
Vielen Dank für deine schnelle Antwort Harald Smile

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?

IMG_58E9D0F7A2F6-1.jpeg
 Beschreibung:

Download
 Dateiname:  IMG_58E9D0F7A2F6-1.jpeg
 Dateigröße:  95.5 KB
 Heruntergeladen:  226 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2020, 14:10     Titel:
  Antworten mit Zitat      
Hallo,

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2020, 14:15     Titel:
  Antworten mit Zitat      
Ich sortiere nach y-Werten. Hier mein Code für den einen Teil der Schleife:

[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');
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?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2020, 14:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich sortiere nach y-Werten. Hier mein Code für den einen Teil der Schleife:

Dann habe ich die Illustration missverstanden. Code macht es einfacher. :)

Doppelte Werte entfernen kannst du z.B. mit
Code:
A(diff(A(:,2))==0, :) = [];


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
 
ridice

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2020, 15:14     Titel:
  Antworten mit Zitat      
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;


Bildschirmfoto 2020-11-25 um 14.10.29.png
 Beschreibung:

Download
 Dateiname:  Bildschirmfoto 2020-11-25 um 14.10.29.png
 Dateigröße:  246.79 KB
 Heruntergeladen:  220 mal
 
Harald
Forum-Meister

Forum-Meister


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

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.11.2020, 15:56     Titel:
  Antworten mit Zitat      
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.

Vielen Dank dir!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.11.2020, 18:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die NaN-Daten entstehen beim interpolieren.

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





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.