goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:

Die nicht zu kurze Kurzeinführung in MATLAB

Fachkräfte:
Softwareentwickler MATLAB/Simulink (w/m)
Erarbeitung von Lösungen im Bereich der Schnittstelle zum Simulink-Modell und der Benutzeroberfläche von TargetLink
dSPACE GmbH - Paderborn

Testingenieur (w/m) Testframework für Simulink-basierte Echtzeitanwendungen
Pflege des MATLAB/Simulink-Testframeworks, Spezifizieren von Testkriterien, Testfällen und Testszenarien
dSPACE GmbH - Paderborn

Testingenieur (w/m) Konfigurationswerkzeuge für Echtzeitsysteme
Einbinden von Simulink®-Simulationsmodellen, Verteilung der Simulationsmodelle auf Multicore- und Multiprozessorsysteme
dSPACE GmbH - Paderborn

Berechnungsingenieur/in - Modellierung Fahrdynamik
Definition von Modellstrategien für Konzept-, Verhaltens- und Detailmodelle
Schaeffler Technologies AG & Co. KG - Herzogenaurach

Berechnungsingenieur/in - Fahrzeugregelung und Betriebsstrategie
Entwurf und Modellierung von Betriebsstrategien und Regelungen für Rekuperation, Schalten oder Thermomanagement
Schaeffler Technologies AG & Co. KG - Herzogenaurach

weitere Angebote

Partner:




Vermarktungspartner


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, 17: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: 203
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2010, 17: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, 10: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: 5356
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ---
     Beitrag Verfasst am: 02.09.2010, 11: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, 14: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: 203
Anmeldedatum: 22.02.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2010, 15: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, 16: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, 14: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: 5356
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ---
     Beitrag Verfasst am: 03.09.2010, 18: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



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.