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

Relative Maxima/Minima bzw. Amplitude

 

LeBaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 16:03     Titel: Relative Maxima/Minima bzw. Amplitude
  Antworten mit Zitat      
Guten Tag,

Ich mache gerade ein Praktikum in einem Institut und soll mit Matlab eine große Anzahl von Messreihen auswerten(Matlabneuling).Mit 2 Büchern für Anfänger,unzähligen Skripts und interner Hilfe habe ich bereits folgendes erreicht.

-Das Einlesen und in Matrix abspeichern.Klappt!
-Rauschen minimieren und den Verlauf glätten.Klappt!

jetzt soll ich aber die Messreihen(Sinunähnlicher Verlauf) auf relative Minima und Maxima untersuchen und zwischen diesen die Steigung/Amblitude bilden.

wenn jemand irgendeine Art von Hilfe hat wäre ich sehr dankbar, ich bin Heute nach 8 stündigem überlegen und ausprobieren kein schritt vorran gekommen.

gruß


Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 16:23     Titel:
  Antworten mit Zitat      
Hey nicht schlecht. für den Anfang.

ich verstehe unter relative Minima und Maxima ,Extrema in einem bestimmten Bereich in einer Testreihe oder meinst du die Extrema pro Testreihe?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
LeBaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 09:35     Titel:
  Antworten mit Zitat      
Hallo,
Also wenn man die messreihe aufträgt und die punkte verbindet dann hat ähnelt es einem sinusförmingen verlauf mit vielen extremstellen die ich bestimmen möchte. wisst ihr vllt wie ich das machen kann?

gruß
 
Harald
Forum-Meister

Forum-Meister


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

solche Themen gab es hier auch schon. Wenn du x- und y-Werte hast, kannst du die Vorzeichenwechsel der genäherten Ableitungen und die zugehörigen x- und y-Werte so bestimmen :
Code:
vzw = diff(sign(diff(y)));
relMaxX = x(vzw < 0)
relMaxY = y(vzw < 0)
relMinX = x(vzw > 0)
relMinY = y(vzw > 0)


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 13:11     Titel:
  Antworten mit Zitat      
Vielen Dank!

Jetzt habe ich zumindest ein "paar" Ergebnisse..!

ich habe vor ein paar Tagen einen Filter im Internet gefunden:
Code:

iN =50; % Länge des Filters
    vg = filter(ones(1,iN)/iN, 1, g);
 

der meine sehr stark verrauschten Messdaten glättet. Leider befinden sich immernoch zu viele Peaks so dass ich über 80 maxima/minima bekomme und das bei einer von insg. 33 Messreihen.

Kann mir vllt jemand einen weiteren filter empfehlen?

gruß


Edit by denny: Bitte die Code-Formatierung verwenden. Danke!
 
Scriptor
Forum-Century

Forum-Century


Beiträge: 217
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 14:05     Titel:
  Antworten mit Zitat      
was sind das für Störungen? Wenn du eine FFT mit den Daten machst die einen sinusförmigen Verlauf haben, wirst du einen Peak erhalten um einer bestimmten Frequenz. Drum herum hast du Signalmüll, denn du ausschalten kannst, indem du ihn einfach 0 setzt und wieder inverse transfromierst. Was auch gehen könnte ist, wenn du eine Autokorrelation durchführst und danach die von Harald angewandten Vorschläge durchführst. Hierfür könnte die Funktion xcorr behilflich sein, das wird wahrscheinlich die beste Lösung sein. Der Filter scheint mir ein Mittelwertfilter zu sein. Der hat den selben Zweck, nur dämpft er dein Hauptsignal ebenfalls, da er wie ein Tiefpass wirkt.

Schöne Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
LeBaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 15:47     Titel:
  Antworten mit Zitat      
Nach googlen,Fragen,Rumexperementieren..etc. komme ich zu folgendem Ergebnis:

Code:

x=[100:500];
relMaxY = zeros(32,5);
relMaxX= zeros(32,5);
relMinX = zeros(32,5);
relMinY = zeros(32,5);

for i=32:-1:1
    xm = Matlab([100:500],i)';
    p = polyfit(x, xm,1);
    figure
    y=p(1)*x+p(2);
    g=(xm-y);
    iN =50; % Länge des Filters
    vg = filter(ones(1,iN)/iN, 1, g);
   
%   Savitzky-Golay Filter, eignet sich am besten um Rauschen zu
%   unterdrücken und den Verlauf zu glätten
   
    smtlb = sgolayfilt(vg,3,41);
    plot(100:500,smtlb,'r');
    grid; %gitter einfügen
%   MINIMA und MAXIMA rausfinden und abspeichern

    vzw = diff(sign(diff(smtlb)));
    local = x(vzw < 0);
    relMaxX(i,1:length(local)) = local;
    local =smtlb(vzw < 0);
    relMaxY(i,1:length(local)) = local;
    local = x(vzw > 0);
    relMinX(i,1:length(local)) = local;
    local = smtlb(vzw > 0);
    relMinY(i,1:length(local)) = local;
    title(num2str(i));

end
 


Vielen Dank für eure Hilfe!


Edit by denny: Bitte die Code-Formatierung verwenden. Danke!
 
LeBaer

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2010, 13:03     Titel:
  Antworten mit Zitat      
Guten Tag,

ich bin schon relativ weit mit meinem Projekt! Very Happy Very Happy Very Happy

jetzt kommt das große aber:
aber der Zielgeraden wartet noch die größte Hürde vor mir. Ich muss aus den gewonnen rel. mins und maxs die steigung berechnen.

bis jetzt habe ich folgendes:

Code:

close all;
x=[200:400];
relMaxY = ones(33,5).*nan;
relMaxX= ones(33,5).*nan;
relMinX = ones(33,5).*nan;
relMinY = ones(33,5).*nan;
amplitude = ones(33,5).*nan;

for i=1:1:33
    xm = Matlab([200:400],i)';
    p = polyfit(x, xm,1);
    figure
%   plot(x,xm)
%   hold on
    y=p(1)*x+p(2);
%   plot(x,y);
    g=(xm-y);
    iN =50; % Länge des Filters
    vg = filter(ones(1,iN)/iN, 1, g);
   
%   Savitzky-Golay Filter, eignet sich am besten um Rauschen zu
%   unterdrücken und den Verlauf zu glätten
   
    smtlb = sgolayfilt(vg,3,41);
    plot(200:400,smtlb,'r');
    hold on
    grid; %gitter einfügen
 
%   MINIMA und MAXIMA rausfinden und abspeichern

    vzw = diff(sign(diff(smtlb)));
    local = x(vzw < 0);
    relMaxX(i,1:length(local)) = local;
    local =smtlb(vzw < 0);
    relMaxY(i,1:length(local)) = abs(local);
    local = x(vzw > 0);
    relMinX(i,1:length(local)) = local;
    local = smtlb(vzw > 0);
    relMinY(i,1:length(local)) = abs(local);
   
    title(num2str(i));
   
    xe = xm-y;
end

amplitude = relMaxY+relMinY;
 


nun muss ich aus den 4 Matrizen in denen jeweils die rel. Maxima/Minima und die dazu gehörigen X Werte stehen, die Steigung bilden.

nach 8 stündigem googlen habe ich gemerkt dass es sich nicht mit einfachen befehl lösen lässt sondern mit schleifen und bedingungen.

hat vllt jemand ein ähnliches problem gemacht oder kann mit jemand den ansatz liefern.

wäre euch sehr dankbar!

gruß


Edit by denny: Bitte die Code-Formatierung verwenden. Danke!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.09.2010, 17:05     Titel:
  Antworten mit Zitat      
Hallo,

nach einer Stunde googeln würde ich anfangen, selber zu überlegen Wink

Ich gehe von meinem Code aus, und du kannst das dann sicher übertragen.
Statt lokale Minima und Maxima zu trennen, wäre mein Vorschlag, beide in eine Matrix zu stecken - die müssen naturgemäß ja abwechselnd kommen, das müsste also so passen.

Mal ohne MATLAB offen zu haben geschrieben:

Code:
vzw = diff(sign(diff(y)));
relExX = x(vzw ~= 0);
relExY = y(vzw ~= 0);
Steigung = diff(relExY)./diff(relExX);
Amplituden = abs(diff(relExY)); % Amplituden haben kein Vorzeichen


Grüße,
Harald
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.