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

Plotverschiebung - denselben Zeitpunkt bei allen Verläufen

 

mk443
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2017, 15:20     Titel: Plotverschiebung - denselben Zeitpunkt bei allen Verläufen
  Antworten mit Zitat      
Hallo liebe Matlab Community,

ich sitze vor einem mittelschweren Problem.
Ich habe 120 Verläufe eines Signals, die alle zu unterschiedlichen Zeitpunkten beginnen, da der Startpunkt der Messung manuell erfolgte. Die Verläufe sehen jedoch im Grunde ähnlich aus. Jetzt möchte ich, dass alle Verläufe zum selben Zeitpunkt starten, also quasi alle Verläufe sollen den gleichen Start haben.

Wozu das ganze?
Anhand dieser Verläufe muss ich andere Kurvenverläufe bearbeiten. Vielleicht mal besser anhand von Bildern gezeigt und exemplarisch nur anhand von 4 Verläufen dargestellt:

Signal1: 4 Durchläufe
Signal2: 4 Durchläufe

Wie ihr seht, ist Signal1 (die 4 Durchläufe meine ich) verschoben. Um dieselbe Verschiebung ist auch Signal2 (auch hier die 4 Durchläufe gemeint) verschoben. Da es später bei Mittelung dann zu Fehlern kommt, möchte ich das gern ändern.

Könnt ihr mir dabei behilflich sein?

Vielen lieben Dank im Voraus.

Grüße Anabelle

So ist mein Code bisher:

Code:
clear all;
clc;

accO25P101 = linspace(1, 1, 163840);
accO25P102 = linspace(1, 1, 163840);
accO25P103 = linspace(1, 1, 163840);
accO25P104 = linspace(1, 1, 163840);

O25P101_rpm = linspace(1, 1, 163840);
O25P102_rpm = linspace(1, 1, 163840);
O25P103_rpm = linspace(1, 1, 163840);
O25P104_rpm = linspace(1, 1, 163840);

load('O25P1-1.mat','Channel_6_Data');
accO25P101=Channel_6_Data;
load('O25P1-2.mat','Channel_6_Data');
accO25P102=Channel_6_Data;
load('O25P1-3.mat','Channel_6_Data');
accO25P103=Channel_6_Data;
load('O25P1-4.mat','Channel_6_Data');
accO25P104=Channel_6_Data;

load('O25P1-1.mat','Channel_7_Data');
O25P101_rpm=Channel_7_Data;
load('O25P1-2.mat','Channel_7_Data');
O25P102_rpm=Channel_7_Data;
load('O25P1-3.mat','Channel_7_Data');
O25P103_rpm=Channel_7_Data;
load('O25P1-4.mat','Channel_7_Data');
O25P104_rpm=Channel_7_Data;

hold on
plot(accO25P101);
plot(accO25P102);
plot(accO25P103);
plot(accO25P104);

figure
hold on
plot(O25P101_rpm);
plot(O25P102_rpm);
plot(O25P103_rpm);
plot(O25P104_rpm);


acc.jpg
 Beschreibung:
Signal2

Download
 Dateiname:  acc.jpg
 Dateigröße:  78.44 KB
 Heruntergeladen:  321 mal
rpm.jpg
 Beschreibung:
Signal1

Download
 Dateiname:  rpm.jpg
 Dateigröße:  129.09 KB
 Heruntergeladen:  321 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2017, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

das einfachste dürfte sein, den Anfangszeitpunkt abzuziehen, z.B.
Code:
t = t - t(1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2017, 15:41     Titel:
  Antworten mit Zitat      
Hallo Harald,

woher weiß ich, wann der Anfangszeitpunkt ist?
Also anhand der Kurve sehe ich ihn zwar, aber das wäre wahrscheinlich etwas ungenau. Gibt es eine Funktion, die mir bei jedem Durchlauf des Signal1 ausgibt, wann der erste Ausschlag erfolgt?

Anabelle
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2017, 15:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
woher weiß ich, wann der Anfangszeitpunkt ist?

Es mag jetzt komisch klingen, aber das musst schon du wissen.
Eine Möglichkeit könnte sein: der erste Zeitpunkt, zu dem das Signal einen bestimmten Schwellwert überschreitet.

Code:
start = find(abs(signal) > schwellwert, 1);
t = t - t(start);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2017, 15:57     Titel:
  Antworten mit Zitat      
Der Anfangszeitpunkt ist halt leider stets anders, mal bei 0,2 Sekunden, mal bei 2 Sekunden und dazwischen. Ich frage mich halt, ob ich das programmieren kann, damit ich bei 120 Kurven weiß, wann jede Kurve ihr 1. Signal bekommt (dieses ist immer negativ).

Leider bin ich nicht so versiert im Umgang mit Matlab.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2017, 16:43     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dir doch eben einen entsprechenden Vorschlag gemacht.
Das einzige, was du nun noch tun musst, ist: den Vorschlag auf deine Signale anwenden. Alternativ beschreiben, inwiefern der Vorschlag nicht wie gewünscht funktioniert.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2017, 16:52     Titel:
  Antworten mit Zitat      
ok, ich habe den Schwellwert mit -0,2 festgesetzt.
Hier der Code:

Zitat:
schwellwert = -0.3;
start = find(abs(O25P101_rpm) > schwellwert, 1);


start wird mir im Workspace jetzt mit 1 angezeigt

Damit kann ich leider so gar nichts anfangen.
Bin total verwirrt.

Grüße Anabelle

Zitat:
t = t - t(start);
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2017, 17:51     Titel:
  Antworten mit Zitat      
Hallo,

schau dir doch mal an, was abs macht. Ein Betrag wird nie negativ sein. Du solltest als Schwellwert also 0.2 oder 0.3 nehmen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2017, 18:27     Titel:
  Antworten mit Zitat      
WOW super ...

jetzt kriege ich einen Startwert. So weit so gut Wink
Daaaaaanke
Wie verschiebe ich jetzt aber beide Verläufe so, dass sie quasi beide bei Null beginnen?

Anabelle
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.11.2017, 19:33     Titel:
  Antworten mit Zitat      
Hallo,

auch das hatte ich dir schon geschrieben:
Code:
t = t - t(start);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2017, 13:14     Titel:
  Antworten mit Zitat      
Was genau soll t sein?

Sad

Ich verstehe das irgendwie nicht.

Anabelle
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2017, 20:56     Titel:
  Antworten mit Zitat      
Hallo,

t steht für time, also den zugehörigen Zeitvektor.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2017, 21:06     Titel:
  Antworten mit Zitat      
Hallo,

den Faktor "time" habe ich bereits in Verwendung. Harald, du meinst also, dass der Faktor "t" neu zugewiesen werden muss? Das klingt iwie einleuchtend. Das probiere ich nachher mal aus. Wie aber sage ich, dass der "neue" Verlauf der Kurve (nicht der Zeitvektor) auch vernünftig als Variable gespeichert wird. Also, nehmen wir an, dass die Variable P1 um den Starwert nach links oder rechts verschoben werden muss. Dann gibt es ja einen neuen Startwert. D. h. die Variable P1 sollte dann quasi ja neu beschrieben werden, sodass nicht nur für den plot der Startwert gilt, sondern auch die Variable mit dem errechnetem Startwert beginnt.
Versteht man, was ich meine?! Oh Gott, ich kann soooo schlecht erklären.

Grüße Anabelle
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.11.2017, 14:50     Titel:
  Antworten mit Zitat      
Hallo,

ich zumindest verstehe es nicht so wirklich.

Grundsätzlich sehe ich zwei Möglichkeiten:
a) nur den Zeitvektor wie vorgeschlagen verschieben. Mit den Daten muss dann gar nichts gemacht werden.
b) zusätzlich den Teil vor Beginn des Signals abschneiden. Das ginge mit:
Code:
time(1:start-1) = [];
signal(1:start-1) = [];


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
mk443
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 01.11.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.11.2017, 16:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für die Geduld.

Ich habe mal einen Screenshot angehängt. Ich verstehe noch nicht, wie der Zusammenhang zw. den beiden Verläufen hergestellt wird. Ich arbeite ja immer nur mit einem Signal. Mein Ziel ist ja Quasi, jetzt vorerst 2 Kurven zu verschieben, sodass sie den selben Startpunkt haben.

Gruß Anabelle

test.jpg
 Beschreibung:
Screenshot

Download
 Dateiname:  test.jpg
 Dateigröße:  197.68 KB
 Heruntergeladen:  310 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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 - 2024 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.