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

Vektor in Intervalle aufteilen

 

Matthias21

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2010, 23:40     Titel: Vektor in Intervalle aufteilen
  Antworten mit Zitat      
Hallo an alle,

es geht um folgendes Problem: Ich habe eine zeitliche Messreihe (Messung des Herzschlags über 24h) als Vektor eingelesen, der natürlich eine ganze Reihe an Werten enthält. Nun soll ich diesen Vektor in 5 min Intervalle aufteilen und jeweils den Mittelwert daraus bestimmen.
Die Bestimmung des Mittelwertes wäre kein Problem, aber ich habe keine Ahnung wie ich den Vektor aufsplitten soll Confused
Wäre sehr froh, wenn mir jemand weiterhelfen könnte.
Vielen Dank im voraus
Matthias


Daedalus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.02.2010, 23:55     Titel:
  Antworten mit Zitat      
Hallo Matthias,

wenn du nur die Mittelwerte benötigst würde ich den Vektor durchgehen und das Ergebnis in einen anderen Vektor schreiben.
Beispiel

Code:

% herzschlagvektor ist gegeben, jede Minute ein Wert
% increment gibt die laenge des vektors an über den gemittelt werden soll
herzschlagvektorMittelwert = zeros(floor(length(herzschlagvektor) / 5), 1)
dummy = 1
for k = 1 : increment : length(herzschlagvektor)
     herzschlagvektorMittelwert(dummy) = mean(herzschlagvektor(k : k + increment))
     dummy = dummy + 1;
end
 


hilft dir das weiter?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2010, 23:58     Titel:
  Antworten mit Zitat      
Hallo,

wenn die Zeitunterteilung gleichmässig ist, probier mal:
1. Schauen, wieviele Werte in ein 5-Min-Intervall passen -> N
2.
Code:

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Daedalus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 00:00     Titel:
  Antworten mit Zitat      
Haralds Lösung ist an Eleganz nicht zu übertreffen!
Respekt!
Private Nachricht senden Benutzer-Profile anzeigen
 
Matthias21

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 00:08     Titel:
  Antworten mit Zitat      
Hallo,

Vielen Dank erst mal für die Antworten.
Das Problem ist, dass das Herz nicht wirklich gleichmäßig schlägt, d.h., dass sich in jedem Intervall unterschiedlich viele Werte befinden.
Die Unterschiede werden zwar nicht groß sein, aber so was muss man ja nun mal genau machen Rolling Eyes
 
Daedalus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 00:29     Titel:
  Antworten mit Zitat      
In dem Fall musst du wohl in den Daten wühlen.
Woran identifizierst du die Zeit? Ist diese gegeben?

Könntest du eine Beispiel-Zip anhängen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Matthias21

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 01:21     Titel:
  Antworten mit Zitat      
Hallo Daedalus
Danke für deine Mühe erstmal.
Die Zeit ist gegeben. Bei der Messreihe wurde der jeweilige Zeitpunkt eines Herzschlages über 24 Stunden gemessen. Das sieht dann in etwa so aus:

0.7543 (Zeitpunkt 1. Herzschlag in Sekunden)
1.4390 (Zeitpunkt 2. Herzschlag)
2.2156 (Zeitpunkt 3. Herzschlag)
.
.
301.2345
.
.
Und ich muss diesen Vektor in 300 Sekunden Intervalle aufspalten. Insgesamt schlägt das Herz aber über 100.000 mal, der Vektor ist also sehr groß, deshalb brauch ich wohl ne Schleife oder einen bestimmten Befehl.
 
Daedalus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.02.2010, 10:12     Titel:
  Antworten mit Zitat      
ok, dann würde ich folgendes machen

herzschlagvektor ist gegeben, jede Minute ein Wert
increment gibt die laenge des vektors an über den gemittelt werden soll
die laenge von herzschlagvektorMittelwert ist durch den maximale Sekundenwert / 300 gegeben

Der Algorithmus läuft wie folgt ab: erst suchen wir in den Zeitwerten den Inidize für das Ende der Zeitspanne ( 1. Zeitspanne 0-<300, 2. Zeitspanne 300-<600) Dazu nutzen wird "find".


Code:

increment = 300; % damit ist die Länge des Auschnitts leicht zu ändern
herzschlagvektorMittelwert = zeros(floor(herzschlagvektor(end) / increment), 1)

anfangZeitauschnitt = 1; % für den ersten durchlauf, wird später in for schleife geändert
for m = 1 : (herzschlagvektor(end) / increment)
     endeZeitauschnitt = find(herzschlagvektor < (m * 300), 1, 'last')
     herzschlagvektorMittelwert(m) = mean(herzschlagvektor(anfangZeitauschnitt : endeZeitauschnitt))
     anfangZeitauschnitt = endeZeitauschnitt + 1;
end
 


gib mal ne Rückmeldung ob das funktioniert hat

Wenn der Algorithmus sehr lange dauert könntest du auch den Befehl find leicht modifizieren: imo sucht der im ganzen Vektor, da du aber eine "Vorahnung" hast wie weit die einzelnen Intervalle auseinander sind könntest du auch folgendes versuchen

Code:

endeZeitauschnitt = find(herzschlagvektor(anfangZeitauschnitt : (anfangZeitauschnitt + vorahnung)) < (m * 300), 1, 'last')
% achtung jetzt aufpassen! Da der Vektor beim suchen kürzer ist, verschieben sich die Inizes. Daher muss die Mittelung wie folgt aussehen (glaube ich, probiers mal Wink )
mean(herzschlagvektor(anfangZeitauschnitt : (anfangZeitauschnitt + endeZeitauschnitt))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.02.2010, 10:37     Titel:
  Antworten mit Zitat      
Hallo,

Edit: ich gehe davon aus, dass man quasi die über jeweils 5 Minuten gemittelte Herzschlagrate ermitteln möchte. Wenn etwas anderes gewünscht wird, könnte das zweite Rückgabeargument von histc helfen.

histc könnte helfen:

Code:
x = linspace(0, 86400, 100000) + 0.2*randn(1,100000); %Testvektor
c = histc(x, 0:300:86400);
plot((0:300:86100)/86400, c(1:end-1), '.')
datetick('x', 'HH:MM')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
fleischcracker.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.05.2011, 13:22     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

wenn die Zeitunterteilung gleichmässig ist, probier mal:
1. Schauen, wieviele Werte in ein 5-Min-Intervall passen -> N
2.
Code:

Grüße,
Harald


Harald ud bist der Größte!!!

Danke, genau das habe ich gesucht!!!
 
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.