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

Funktion um Indizes mit Bedingungen zu finden

 

joggel.v
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 07.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2012, 09:13     Titel: Funktion um Indizes mit Bedingungen zu finden
  Antworten mit Zitat      
Hallo Zusammen,
anbei mein Code (ich weiß nicht besonders schön und schnell weil viele Schleifen). Prinzipiell funktioniert das ganze wie folgt:

Ich habe die Größen Fahrpedal (fp), Geschwindigkeit (v_car) und Abstand zum Hindernis (dl). Als .mat im Anhang!

Index1 sucht die Indizes für die Bedingung: FP=0
Index2 sucht die Indizes für Bedingung: dl<=1m

Jetzt möchte ich die Geschwindigkeit v_car(index1) immer konstant von Index1 bis Index2 vorwärts schreiben.

Code:

%--------------------------------------------------------------------------  
%Bedingung 1 (Start Index): Suche Stellen bei denen das FP gerade 0 wird
%--------------------------------------------------------------------------

%Suche Stellen mit FP =0
index_1=zeros(length(fp),1);
for i=1:length(index_1)-1
   
    if fp(i)==0
    index_1(i+1)=10;
    end
end

%Auf den ersten zutreffenden Index vereinzeln
index1=zeros(length(index_1),1);
for i=1:length(index_1)-1
   
    if index_1(i)==0 & index_1(i+1)==10
    index1(i+1)=5;
    end

end

%--------------------------------------------------------------------------  
%Bedingung 2 (Stop Index): Suche Stellen bei denen denen die erkannte
%Situation erreicht wird, also der Abstand zu Situation dl sehr klein wird
%--------------------------------------------------------------------------

%Suche Werte mitAbstand < 1m und Falling Edge
index_2=zeros(length(dl),1);
for i=1:length(dl)-1
   
 if dl(i)<=1 & dl(i+1)<=dl(i)
        index_2(i)=1;
 end
end

%Auf einen Index vereinzeln
index2=zeros(length(index_2),1);
for i=1:length(index_1)-1
   
    if index_2(i)==0 & index_2(i+1)==1
    index2(i+1)=1;
    end

end

%--------------------------------------------------------------------------
% Plot zur Erklärung
%------------------------------------------------------------------------
 figure
>> hold on
>> plot(v_car)
>> plot(dl,'g')
>> plot(fp,'r')
>> plot(index1,'c.')
>> plot(index2,'m.')

%--------------------------------------------------------------------------
% Suchen von TRUE Stellen in index1 und index2 und Ausgabe des entsprechenen Myindex und Transponieren für weitere Berechnungen
%--------------------------------------------------------------------------

Myindex1=(find(index1))';
Myindex2=(find(index2))';

v_rampe_start=zeros(length(index1)',1);


for i=Myindex1
v_rampe_start(i)=v_car(i);
end


%--------------------------------------------------------------------------
% %FORWARD Beschreiben
%--------------------------------------------------------------------------
%Geschwindigkeit konstant zwischen den gefundenen Indizes

for i=1:length(Myindex1)-1
  v_rampe_start(Myindex1(i):Myindex2(i))= v_rampe_start(Myindex1(i));
end
 


Mein Problem hierbei:

Es kann sein dass MyIndex1 und MyIndex 2 unterschiedlich lang sind, da das Fahrpedal öfters 0 wird als der Abstand oder gar nicht!. Dann kann ich natürlich nicht mehr vorwärts schreiben mit:
Code:
for i=1:length(Myindex1)-1
  v_rampe_start(Myindex1(i):Myindex2(i))= v_rampe_start(Myindex1(i));


Ziel wäre es 2 gleich lange Indizes zu erhalten und zwar immer Myindex2 als fixe Größe und für Myindex1 immer nur den am nächsten bei Index 1 liegt. Das bräuchte ich quasi automatisiert:

Code:

v_rampe_start(Myindex1(1):Myindex2(2))= v_rampe_start(Myindex1(1));
 


Vielen Dank schon mal für diese Hilfe!

WorkspaceForFunction.zip
 Beschreibung:

Download
 Dateiname:  WorkspaceForFunction.zip
 Dateigröße:  156.64 KB
 Heruntergeladen:  232 mal
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.