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

Zeitsprünge automatisiert ermitteln

 

iMC117
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 13:07     Titel: Zeitsprünge automatisiert ermitteln
  Antworten mit Zitat      
Ich hab Messungen durchgeführt und diese nun in Excel dargestellt. In der ersten Spalte ist die Zeit aufgetragen und in den anderen eben verschiedene Merkmale. Aber das ist erstmal nicht wichtig. Nur die Zeit ist von Bedeutung.



Bei der Zeit-Spalte gibt es manchmal Zeitsprünge von mehr als 4 Sekunden. Immer wenn so ein Sprung kommt beginnt quasi eine neue Messung. In Matlab will ich nun diese Punkte in Form einer Matrix festhalten. Diese soll so aussehen passend zu der zeit-Spalte oben:



Mich interessieren also die Indices, wann eine Messung startet und endet. Messung 1 fängt immer mit dem ersten Wert in der Spalte an. Die letzte Messung endet immer mit dem letzten Wert in der Messung.

Messung 1 fängt also beim Index 2 an und endet dann beim Index 5, weil von 5 auf 6 der Zeitsprung von mehr als 4 Sekunden kommt usw. Nun will ich das automatisiert in Matlab darstellen. In Matlab fängt die erste Messung direkt beim Index 1 an. Die Überschriften habe ich nur in Excel, in Matlab habe ich sie abgeschnitten. Ich hab sie jetzt nur für die Übersicht mitreingenommen.

Mein Code sieht bis jetzt so aus:

Code:
for i = 1:length(time)
    b=1;
    start(b) = time(1);
   
    if time(i+1) - time(i) > 4
        start(b)= time(i+1);
        ende(b-1) = time(i);
       
    end
end


Leider kommt dann diese Fehlermeldung: "Attempted to access ende(0); index must be a positive integer or logical."

Den Fehler verstehe ich nicht ganz, ich muss ja irgendwie mit b-1 arbeiten, damit ich das Ende einer Messung festlege. Ich weiß auch gar nicht, ob mein Ansatz richtig ist oder ob es bessere Lösungen gibt. Ich muss auf jeden Fall noch irgendwie festlegen, dass die letzte Messung mit dem letzten Wert in der Spalte time endet. Über Hilfe würde ich mich sehr freuen.
Private Nachricht senden Benutzer-Profile anzeigen


iMC117
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 14:13     Titel:
  Antworten mit Zitat      
Hat sich erledigt. Hab meinen Fehler gefunden und nun klappt alles.
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 24.09.2015, 14:18     Titel:
  Antworten mit Zitat      
Hallo,

die Indizes in der Schleife sind das Problem. Zum einen wird b jedem Durchlauf wieder auf 1 gesetzt und du willst auf den Index b-1 = 0 zugreifen. Das gibt es in Matlab aber nicht. Ziehe b vor die Schleife.

Außerdem würde beim letzten Durchlauf der Index i+1 zum Problem, da nicht vorhanden. Also muss die Endbedingung der Schleife angepasst werden.

Code:

b=1;
start(b) = time(1);
 for i = 1:length(time) - 1    
    if time(i+1) - time(i) > 4
        start(b+1)= time(i+1);
        ende(b) = time(i);
        b = b + 1;      % Index erhöhen
    end
    if   i == length(time) - 1
         ende(b) = time(i+1); % Ende Zeitvektor
    end
end
 


Außerdem ist es ratsam ende und start schon vor der Schleife entsprechend anzulegen, z.B. mit der Funktion zeros . Dadurch wird die Schleife bei einer großen Anzahl an Durchläufen schneller laufen. Habe den Code aber nicht getestet Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
iMC117
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 10.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.09.2015, 15:10     Titel:
  Antworten mit Zitat      
Danke für deine Antwort und den Tipps. Genau die Probleme, die du ansprichst, sind mir dann auch aufgefallen. Mein Code sieht deinem sehr ähnlich und es funktioniert jetzt alles auf jeden Fall.
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.