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

Schwingung mittels zweier Kriterien erkennen

 

rohneluk
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.03.11
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 02.03.2011, 17:00     Titel: Schwingung mittels zweier Kriterien erkennen
  Antworten mit Zitat      
Hallo,

ein gegebener vektor beschreibt zwei schwingungen. diese schwingungen möchte ich mit dem matlab code zählen. Um die Schwingung als solche zu erkennen, sollen zwei bedingungen erfüllt sein:
1. die schwingung muss einen vorgegebenen wert überschreiten
und 2. anschliessend wieder einen zweiten kleineren WErt unterschreiten.

Wie krieg ich das hin?

mein bisheriger ansatz:

Code:

T = [1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1];
length(T)

for i=1:length(T);

    if(T(i)>10)
        f_2 = T(i);
        A = i;
       
        for k = i:length(T)
           
            if(T(j)< 4)
               B=1;
               Counter_rechts_70=cat(1,Counter_rechts_70,B);
               break
                         
            end;
        end;
 
        break
    end;

% Counter_rechts_70=cat(1,Counter_rechts_70,buf_2)
end;
 


tausend dank für ieure hilfe
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 02.03.2011, 18:30     Titel:
  Antworten mit Zitat      
Hallo

meinst du so? Wenn nicht bitte am Beispiel erklären.

Code:

T = [1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 8 7 6 5 4 3 2 1];
pos = [ findstr([0 T<10&T>4 0],[0 1]);findstr([0 T<10&T>4 0],[1 0])-1]
anz = size(pos,2)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
rohneluk
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.03.11
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 03.03.2011, 11:24     Titel:
  Antworten mit Zitat      
Danke, das war hilfreich.

Leider bekomm ich noch nicht das gewünschte Resultat.

Zu folgendem Bild (Anhang) gibt Matlab mit dem Befehl

Code:

% Bestimmung der Kriterien
crit_70_rechts = 43;
crit_30_rechts = 18;

% Anzahl der Flexionen zählen
summe_rechts = summe_rechts';
pos = [ findstr([0 summe_rechts<crit_70_rechts&summe_rechts>crit_30_rechts 0],[0 1]);findstr([0 summe_rechts<crit_70_rechts&summe_rechts>crit_30_rechts 0],[1 0])-1]
anz = size(pos,2)
 


folgendes Resultat:
pos =

828 1039 1107 1210 1271 1388 1456 1693 1876 1994 2371 2997
921 1067 1136 1244 1303 1415 1481 1836 1948 2249 2393 2998


anz =

12



Vielleicht kann mir jemand einen Tip geben?

test.jpg
 Beschreibung:

Download
 Dateiname:  test.jpg
 Dateigröße:  85.68 KB
 Heruntergeladen:  544 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 03.03.2011, 14:21     Titel:
  Antworten mit Zitat      
Und was sollte rauskommen?
Dann bitte erkläre anhand folgender Daten, was soll rauskommen bei
crit_70_rechts = 60;
crit_30_rechts = 40;

Code:

 T =[ 43, 91, 18, 26, 15, 14, 87, 58, 55, 14, 85, 62, 35, 51, 40, 8, 24, 12, 18, 24]
figure(); plot(T)
 
Private Nachricht senden Benutzer-Profile anzeigen
 
rohneluk
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.03.11
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 03.03.2011, 16:12     Titel:
  Antworten mit Zitat      
Meine Fragestellung war etwas unpräzis.

Die Antwort auf diesen Vektor T ist 3.

Es werden nur Schwingungen gezählt die vorerst einen Wert übersteigen (hier 60). Die Zählung erfolgt jedoch nur wenn die Schwingung anschliessend wieder einen Minimalwert (hier 40) unterschreitet.

Dein bisheriger code hat alle schwingungen die den Bereich 30<x<70 über und unterschritten haben, gezählt.

Vielen Dank für die Hilfe
Private Nachricht senden Benutzer-Profile anzeigen
 
rohneluk
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.03.11
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 04.03.2011, 11:05     Titel:
  Antworten mit Zitat      
Ich habe an meinem Ansatz weitergearbeitet. Der Code ist vielleicht etwas holprig, funktionieren tuts jedoch.

Code:

for i=1:length(flexion_gesamt);
   
    if(flexion_gesamt(i)>crit_70_rechts)
        buf_2 = flexion_gesamt(i);
        A = i;
        Counter_0 = cat(1,Counter_0,A);
 
        for i = A:length(flexion_gesamt)
            if(flexion_gesamt(i)< crit_30_rechts)
               B=i;
               find(diff(B))
               Counter_rechts_70=cat(1,Counter_rechts_70,B);
               break              
            end;
        end;
    end;
end;

Anz_Flexionen_70= length(find(diff(Counter_rechts_70)>0))+1
 


Für Verbesserungsvorschläge immer offen.
Danke für die Hilfe
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 - 2025 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.