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

Problem mit dem Befehl "findpeaks"

 

jojo1234
Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 14:05     Titel: Problem mit dem Befehl "findpeaks"
  Antworten mit Zitat      
Hallo,

ich habe mir mittels Matlab die Koeffizienten einer Verschiebungsfunktion bestimmt. Nun möchte ich gerne die maximale Verschiebung berechnen. Dazu habe ich den Befehl "findpeaks" verwendet. Der y-Wert ist auch korrekt, aber leider stimmt der x-Wert nicht.
Den Befehl habe ich in dieser Form verwendet:

Code:
[ymax,xmax]=findpeaks(v);


v ist dabei die Verschiebungsfunktion.

Es wäre schön, wenn mir jemand sagen könnte, wieso mir "findpeaks" nicht den richten x-Wert ermitteln kann. Obwohl in der Hilfe zu dem Befehl gesagt wird, dass er es kann.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

findpeaks liefert den Index zurück, nicht den x-Wert. Aus der Hilfe:
Zitat:
[pks,locs] = findpeaks(data) returns the indices of the local peaks.


Wenn die zugehörigen x-Werte nicht 1, 2, 3, ..., n sind, kannst du das so machen:
Code:
[ymax,idxmax]=findpeaks(v);
xmax = x(idxmax);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 14:48     Titel:
  Antworten mit Zitat      
Herzlichen Dank für die schnelle Antwort Harald. Hat super funktioniert und jetzt erhalte ich auch den korrekten x-Wert.
Ich habe jedoch noch eine Frage. Was macht der Befehl:
Code:
xmax=x(idxmax);

Rechnet der den Index auf die Koordinate x um?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

er extrahiert das passende Element aus x (Indizierung).

Beispiel:
findpeaks sagt dir, dass das Maximum an der 5. Komponente des Vektors auftritt. Mit dem Befehl holst du dir dann die 5. Komponente von x.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jojo1234
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 20
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 16:06     Titel:
  Antworten mit Zitat      
Ah, super. Dann weis ich bescheid. Deshalb hatte ich vorher 525 raus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Erdbeerly
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.08.2014, 12:29     Titel:
  Antworten mit Zitat      
Hallo liebe Matlab-Pros,

ich nutze Matlab nur sporadisch und komme akut aber nicht darum herum.
Ich habe diesen Beitrag gefunden, der mir primär auch schon sehr geholfen hat.
Ich habe ebenfalls eine Funktion, bei der ich die Peaks auslesen lasse. Die Messreihe hat ein paar "Wacklermaxima" auf die ich gerne verzichten möchte, darum lasse ich von der neuen Peakfunktion wieder die Peaks ausgeben. Damit komme ich einer Hüllkurve am nächsten für meine erste Abschätzung des Problems.

Harald's Beitrag hat das Ganze Verschiebeproblem für die erste Peakkurve gelöst, die Messdaten und die Peaks sind nun deckungsgleich. Die 2. Peakkurve allerdings ist nach wie vor verschoben. Harald's Trick doppelt anwenden, klappt wohl nicht. Wink

Code:

clear all;
clc;
[x,y]=textread('Spulekupfer.txt','%f %f');

[y1, x_i1] = findpeaks(y,'minpeakheight',0)
x1 = x(x_i1);
[y2, x_i2] = findpeaks(y1)
x2 = x(x_i2);

plot(x, y,'Color','green')
hold on
plot(x1, y1,'Color','red')
hold on
plot(x2, y2,'Color','blue')
hold off
 


Gibt es auch hier einen Trick oder vielmehr Wissen, dass ich nicht habe?
Ich bin für jede Hilfe dankbar!

Viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 25.08.2014, 21:20     Titel:
  Antworten mit Zitat      
Hallo,

intuitiv würde ich sagen:
Code:
x2 = x(x_i1(x_i2));


Falls das nicht weiterhilft, wären konkrete Beispiele für die beteiligten Variablen (hier: alle Variablen, deren Namen mit x beginnen) hilfreich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Erdbeerly
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2014, 06:18     Titel:
  Antworten mit Zitat      
Lieber Harald,

das war perfekt. Ich danke Dir vielmals! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Erdbeerly
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2014, 06:50     Titel:
  Antworten mit Zitat      
Mir kam da gerade noch eine Frage:

Ist es möglich, dass ich Matlab sag, nur die Hochpunkte ab einem bestimmten x Wert zu suchen/finden?

Code:
[y1, x_i1] = findpeaks(y,'minpeakheight',0)
aus meinem Code gibt ja vor, dass nur Hochpunkte ab einem y=0 berücksichtig werden sollen. Gibt es das selbe auch für einen x-Wert? Ich konnte bisher im Netz nix finden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.08.2014, 07:20     Titel:
  Antworten mit Zitat      
Hallo,

dazu würde ich die Funktion nur auf den Bereich des Signals anwenden, also z.B.
Code:
[y1, x_i1] = findpeaks(y(x > x0),'minpeakheight',0)

Vorsicht, die Indizes verschieben sich dadurch natürlich.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Erdbeerly
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 25.08.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2014, 09:08     Titel:
  Antworten mit Zitat      
Vielen Dank Harald! Hat super geklappt.
Danke auch für den Hinweis mit den Indizes, die hätte ich natürlich gleich mal vergessen. Very Happy
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.