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

Messdaten auf selbe Länge inter/extrapolieren

 

318is
Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 09.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 12:50     Titel: Messdaten auf selbe Länge inter/extrapolieren
  Antworten mit Zitat      
Hallo Miteinander,

ich habe folgendes Problem:

Ich lese mit diesem Tool :
https://de.mathworks.com/matlabcent.....le-format-from-inca-7-1-9
eine mdf-datei ein.
Da die Abtastrate der einzelne Signale unterschiedlich ist, sind auch die einzelnen Vectoren (mit Messdaten) unterschiedlich lang. Ich möchte gerne alle Vectoren gleich lange haben und auf den selben Zeitvector(also den längsten Zeitvector im WS) beziehen.

Ich wollte dies eigentlich mit interp1 lösen jedoch gibt es hier Probleme sobald extrapoliert werden müsste.

Gibt es für solche Anwendungsfälle eine elegante Lösung?

Ich habe eine Beispiel-mdf angehängt um das ganze zu verdeutlichen.

Vielen Dank für die Mühe, Grüße 318is

Testmessung910.zip
 Beschreibung:
Beispiel

Download
 Dateiname:  Testmessung910.zip
 Dateigröße:  105.11 KB
 Heruntergeladen:  512 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2017, 13:06     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Ich wollte dies eigentlich mit interp1 lösen jedoch gibt es hier Probleme sobald extrapoliert werden müsste.

Welche Probleme?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 09.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2017, 14:55     Titel:
  Antworten mit Zitat      
Ich erhalte immer NAN da ja interp1 anscheinend nicht extrapolieren kann.

Gibt es einen befehl der einen Vector direkt auf die gewünschte Zeitachse inter- und ggf. extrapoliert?

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

Forum-Meister


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

interp1 hat ein Argument extrapolation, man muss es halt explizit angeben.
Wenn das nicht weiterhilft, bitte den momentan verwendeten Aufruf von interp1 posten.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 09.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2017, 10:29     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank für die schnelle Antwort, mir war nicht klar, dass mit interp1 auch extrapoliert werden kann, das vereinfacht die Sache natürlich sehr.

Ich würde das ganze Vorgehen gerne Automatisieren jedoch habe ich hierbei Schwierigkeiten. Mein Ansatz war folgender um zuerst den Zeitvector auf den alle normiert werden sollen zu bestimmen:

Code:

%Anzahl Schleifendurchläufe bestimmen
Zeiten = who('time_*') %Vektor mit allten Variablen mit Namen time aus WS
Anzahl_Zeiten = length(Zeiten) %Länge dieses Vectors
%Längsten Zeitvector finden
b = 1:1:Anzahl_Zeiten, b = b %Vector b erzeugen
for i=1:Anzahl_Zeiten  
    b(i)=size('time_' num2str(i))  %Vector b mit Längen füllen
    i=i+1
end    

[x,y]=max(b) % y=Position des Längsten Zeitvectors

%neuen allg.gültigen Zeitvector definieren
Zeit=Zeiten(y,1)

 


Ich habe hier das Problem, dass ich nicht weiß wie ich die einzelnen Einträge aus den Vectoren ziehen kann und wieder als Variablenname im Workspace ansprechen kann. Kann mir hier jemand helfen?

Vielen Dank für die Mühe!

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

Forum-Meister


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

du arbeitest da mit dynamischen Variablennamen. Das sollte man generell nicht tun, weil man dann zwangsläufig mit eval arbeiten muss, was sehr fehleranfällig und schwierig zu debuggen ist. Du kannst ja mal nach Themen mit eval suchen :)

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 09.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2017, 09:38     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

du arbeitest da mit dynamischen Variablennamen. Das sollte man generell nicht tun, weil man dann zwangsläufig mit eval arbeiten muss, was sehr fehleranfällig und schwierig zu debuggen ist. Du kannst ja mal nach Themen mit eval suchen Smile

Grüße,
Harald


Hallo Harald,

zu eval und dynamischen Variablen habe ich die letze Woche viel gelesen. Leider komme ich nicht drum rum (bzw. wüsste nicht wie) da meine Messdaten so erzeugt werden.

Ich konnte das ganze nun mit eval lösen und es funktioniert. Jedoch habe ich das Problem das auch Messungen vorhanden sind wo nicht alle Zeitvektoren erzeugt werden z.B. time_1,time_2,time_4 - time_3 fehlt. Gibt es hier einen Trick wie ich den Abbruch der For-Schleife unterbinden kann? Es soll einfach einen Eintrag weitergesprungen werden wenn der aktuelle nicht vorhanden ist?

Code:

Zeiten = who('time_*'); %Vektor mit allten Variablen mit Namen time aus WS
Anzahl_Zeiten = length(Zeiten); %Länge dieses Vectors

%Vektor mit den Längen aller Zeitvectoren    
for i=1:Anzahl_Zeiten
    Endung= num2str(i);
    b(i)=length(eval(['time_' Endung]));
end


vielen Dank für die Mühe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.03.2017, 09:55     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider komme ich nicht drum rum (bzw. wüsste nicht wie) da meine Messdaten so erzeugt werden.

Soweit möglich sollte man also versuchen, auf diesen Prozess einzuwirken.

Zitat:
Gibt es hier einen Trick wie ich den Abbruch der For-Schleife unterbinden kann? Es soll einfach einen Eintrag weitergesprungen werden wenn der aktuelle nicht vorhanden ist?

try / catch

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 35
Anmeldedatum: 09.03.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.03.2017, 11:21     Titel:
  Antworten mit Zitat      
try catch hat super funktioniert vielen Dank Smile
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 - 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.