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

Messwerte interpolieren (Sprungantwort)

 

Menschman
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 11:33     Titel: Messwerte interpolieren (Sprungantwort)
  Antworten mit Zitat      
Hallo,

ich suche eine Funktion, welche mir die Interpolation von Messwerten ermöglicht, die nur bei Veränderung aufgezeichnet wurden. Es soll demnach zu jeder Zeitschrittweite ein Wert interpoliert werden, der solange konstant bleibt, bis ein neuer Wert aufgezeichnet wurde.

zBsp:

10:00:00 20
10:05:00 21

soll zu

10:00:00 20
10:01:00 20
10:02:00 20
10:03:00 20
10:04:00 20
10:05:00 21

werden.

Hab noch nix passendes gefunden. Vielleicht kann mir jemand helfen.

Vielen Dank!

Menschman
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.06.2012, 14:31     Titel: Re: Messwerte interpolieren (Sprungantwort)
  Antworten mit Zitat      
Hallo Menschman,

Es ist leichter einen Vorschlag zu programmieren, wenn Du die Beispieldaten in valider Matlab-Syntax angibst. Ist "10:00:00 20" ein String, ein String und ein DOUBLE, oder etwas ganz anderes?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Menschman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 14:53     Titel:
  Antworten mit Zitat      
Hallo Jan,

der Wert in Spalte 1 (also Bspw. 10:00:00) ist die Zeit und liegt als double bereits umgerechnet in der Matrix. Der Wert zwei ist ebenfalls ein double (Temperatur). Ich lese die Daten aus einer .csv ein. Es sind sehr viele Zeilen und ich habe bis jetzt noch keine Lösung für mein Problem gefunden.

Vielen Dank für die Hilfe. Ich werde mich in Sachen Problemerläuterung bessern Smile

VG Menschman
Private Nachricht senden Benutzer-Profile anzeigen
 
Illmatic
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.06.12
Wohnort: Hamburg
Version: R2011b
     Beitrag Verfasst am: 26.06.2012, 20:17     Titel:
  Antworten mit Zitat      
Habe gerade mal ein recht schlampiges Skript geschrieben. Geht mit an Sicherheit grenzender Wahrscheinlichkeit deutlich eleganter, aber du kannst es ja mal so probieren, wenn dich nur die Werte und nicht der Weg dahin interessiert Wink

M ist eine Beispielmatrix mit einer Spalte für die Zeit und einer für die Temperatur.

Code:

M = [0 25; 5 19; 9 21; 13 16; 17 27; 19 20];
[zeilen,spalten] = size(M);
start_time = 0;
end_time = 20;
time_intervall = 1;
i = 1;
u = 1;
current_entry = 0;
entries = ((end_time - start_time)/time_intervall)-1;
for time=start_time:time_intervall:end_time
    Z(i,1)=time;
    if M(u,1) == time
        current_entry = M(u,2);
        u = u+1;
        if u > zeilen
            u = u -1;
        end
    end
    Z(i,2)=current_entry;
    i = i+1;
end

M
       
Z  
 


Macht aus

Code:

M =

     0    25
     5    19
     9    21
    13    16
    17    27
    19    20
 


Code:

Z =

     0    25
     1    25
     2    25
     3    25
     4    25
     5    19
     6    19
     7    19
     8    19
     9    21
    10    21
    11    21
    12    21
    13    16
    14    16
    15    16
    16    16
    17    27
    18    27
    19    20
    20    20
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2012, 15:19     Titel:
  Antworten mit Zitat      
Hallo Menschman,

Zitat:
Ich werde mich in Sachen Problemerläuterung bessern :-)

Prima. Dann fang doch gleich mal an: Kannst Du bitte ein Beispiel posten, welches valide Matlab-Syntax verwendet? Dann könnten die Leser im Forum dies als Ausgangspunkt für Lösungsvorschläge verwenden. Wenn dagegen jeder, der Dir helfen möchte, erstmal Zeit damit verbringt, der groben Beschreibung folgend Test-Daten zu erzeugen, ist das ineffizienter.

Das die Zeiten "umgerechnet" sind, klärt z.B. noch nicht das Detail, in was Du sie umgerechnet hast.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.06.2012, 15:26     Titel:
  Antworten mit Zitat      
Hallo Illmatic,

Ein ähnlicher Ansatz, bei dem allerdings 0 als Wert in der ersten Spalte verboten ist:
Code:
M = [1 25; 5 19; 9 21; 13 16; 17 27; 19 20];
Q = zeros(M(end, 1), 1);
Q(M(:, 1)) = 1;
Q = cumsum(Q);
Result = cat(2, (1:length(Q)).', M(Q, 2));

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Illmatic
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 19.06.12
Wohnort: Hamburg
Version: R2011b
     Beitrag Verfasst am: 29.06.2012, 17:33     Titel:
  Antworten mit Zitat      
Hehe, das ist sogar noch kürzer als ich erwartet hätte. Werd ich mir nachher mal zu Gemüte führen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Menschman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2012, 10:18     Titel:
  Antworten mit Zitat      
Hallo,

schonmal danke für die Antworten. Ich werde sie gleich mal versuchen.

Anbei nochmal wie gewünscht ein Beispiel.

Code:

%Beispiel für Problemstellung

a = ['05-Feb-2012 00:00:23';
'05-Feb-2012 00:15:14';
'05-Feb-2012 00:33:41';
'05-Feb-2012 00:47:57';
'05-Feb-2012 01:02:13';
'05-Feb-2012 01:16:29';
'05-Feb-2012 01:35:13';
'05-Feb-2012 01:49:46';
'05-Feb-2012 02:05:12';
'05-Feb-2012 02:23:03'];

b = [20; 18.5; 21; 20; 22; 20; 17; 21; 22; 19];

c = datenum(a);

%interpoliert werden soll auf

Tmax=max(ceil(c));
Tmin=min(floor(c));
T=[Tmin+(Tmax-Tmin)/((Tmax-Tmin)*1440):(Tmax-Tmin)/((Tmax-Tmin)*1440):Tmax-0.9*(Tmax-Tmin)];

 


Das gewünschte Ergebnis habe ich offensichtlich schon ausreichend erläutert.

VG Menschman
Private Nachricht senden Benutzer-Profile anzeigen
 
Menschman
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 11.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2012, 17:21     Titel:
  Antworten mit Zitat      
Hey,

die zwei Vorschläge habe ich versucht. Leider führte keiner zum Erfolg, was ohne Zweifel an meinen noch mangelnden MatLab-Kenntnissen liegen kann. Variante1 hat zunächst richtig "interpoliert", hat ab einem bestimmten Punkt aber nur noch einen Wert immer weiter geschrieben. Bei Variante2 sagte mir ein Error, dass das nur mit ganzen Zahlen funktioniert, was bei mir nicht der Fall ist.

Ich habe es jetzt (sicher viel zu umständlich) wie folgt gelöst. Ich habe die Werte an den jeweiligen nächstgelegenen Zeitpunkt geschrieben und nachfolgend in einer Schleife die freien Arrays mit dem jeweiligen vorherigen Wert aufgefüllt. Es funktioniert einwandfrei.

Code:

[zeile,spalte]=size(c);
[zeilen,spalten]=size(T);
ip = zeros(zeilen,2);
ip(:,1) = T;

%Werte einsortieren
for REF = 1:zeilen
    for SOLL = 1:zeile
        if c(SOLL)>ip(REF)-1/2880+eps && c(SOLL)<ip(REF)+1/2880-eps
            ip(REF,2) = c(SOLL);
        end
    end
end

%Arrays mit 0 auffüllen

for ipref=2:zeilen
    if ip(ipref,2) == 0
        ip(ipref,2) = ip(ipref-1,2);
    end
end
 


Vielen Dank für eure Hilfe!!!

LG Menschman
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 05.07.2012, 08:48 Uhr von denny
Von Signalverarbeitung nach Programmierung
 
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.