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

Sprung detektieren und filtern

 

Alexfromgalax
Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 09:42     Titel: Sprung detektieren und filtern
  Antworten mit Zitat      
Hallo,
ich habe eine Matrix mit 15 Spalten und sehr vielen Zeilen. Siehe Anhang. In Spalte 12 wird der aktuelle Gang hinterlegt. Ich möchte nun einen Code schreiben, welcher einen Gangwechsel nach oben oder unten detektiert. Die Daten aller Spalten, eine Sekunde vor und eine Sekunde hinter dem Gangwechsel sollen aus der Matrix gelöscht werden. Die Zeit steht in Spalte 1 in der Einheit Sekunden.
Gibt es da eine schöne Funktion dafür? Ich weiß irgendwie gar nicht wo ich mit dem Problem anfangen soll.
Vielen Dank schonmal im voraus für eure Hilfe

Ausschnitt Matrix Gangwechsel.PNG
 Beschreibung:

Download
 Dateiname:  Ausschnitt Matrix Gangwechsel.PNG
 Dateigröße:  94.59 KB
 Heruntergeladen:  259 mal
Private Nachricht senden Benutzer-Profile anzeigen


sijuherm
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 10:04     Titel:
  Antworten mit Zitat      
Mal ein paar Denkanstöße:

Der gefahrene Gang ist immer konstant, bis zu einem Gangwechsel, da ändert er sich um 1. Hilfreiche Funktion wäre z.B. diff

In Kombination mit der find Funktion erhälst du die Indizes der Schaltzeitpunkte in deiner Matrix.

Davon ausgehend kannst du die Zeitpunkte bestimmen und ebenfalls mit find alle Indizes suchen, die 1 Sekunde davor/dahinter sind.

Diese entfernst du aus der Matrix mit [], also z.B.
Code:
matrix(indizes,:)=[];


Falls du Probleme bei der Umsetzung hast, kannst dich gerne nochmal melden. Ein besserer Weg fällt mir gerade nicht ein, lerne aber gerne hinzu.
Private Nachricht senden Benutzer-Profile anzeigen
 
Alexfromgalax
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 14:22     Titel:
  Antworten mit Zitat      
Vielen Dank für die sehr guten Tips. Mit find und diff funktioniert die suche schonmal ganz gut und ich bekomme auch die richtigen Zeilen ausgegeben in denen der Gangwechsel stattfindet.
Allerdings muss ich nach einigem Überlegen mein Vorhaben jetzt doch ein wenig ändern. Es soll wie folgt aussehen: Wenn ein Gangwechsel in Spalte 12 registriert wird, soll (nach unten laufend) die nächste Zeile gefunden werden bei der Spalte 7>=95. Ab dieser Zeile soll die nächste Zeile gesucht werden in der, in Spalte 1 mindestens 1 Sekunde vergangen ist. Der ganze Zeitraum von Anfang Gangwechsel bis Spalte 7 und Spalte 1 erfüllt soll gelöscht werden. Ich hoffe man kann das nachvollziehen Confused
Gibt es eine Funktion die quasi eine Spalte absucht, aber nur genau den nächsten Wert ausgibt?
Private Nachricht senden Benutzer-Profile anzeigen
 
Alexfromgalax
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 14:58     Titel:
  Antworten mit Zitat      
Wenn ich das richtig verstanden habe, kann ich bei der Funktion find am ende eine 1 anhängen die bewirkt, dass nur der Nächste Wert ausgegeben wird. Somit wäre das ja gelöst. Nun habe ich allerdings ein Problem bei den nächsten abfragen. Wie kann ich den nun der funktion sagen sie solle ab einer bestimmten Zeile den nächsten Wert in der Spalte suchen?
Private Nachricht senden Benutzer-Profile anzeigen
 
sijuherm
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 01.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 15:03     Titel:
  Antworten mit Zitat      
Code:
idx = find(X,1,'first')
Wink

X ist deine Matrix, die musst du entsprechend beschnitten übergeben, z.B.
Code:
idx = find(X(idxGangwechsel:end,7)>=95,1,'first');
idxSpalte7 = idx+idxGangwechsel;


idxSpalte7 ist dann quasi der Zeitpunkt, ab dem deine Sekunde läuft und du muss alles zwischen idxGangwechsel und idxSpalte7+1Sekunde löschen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Alexfromgalax
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 48
Anmeldedatum: 28.05.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2019, 15:34     Titel:
  Antworten mit Zitat      
auf dieses ":end" bin ich einfach nicht gekommen.
Jetzt funktioniert es natürlich prima.
vielen Dank nochmal sijuherm
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.