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

Filtern von Messdaten nach Regelmäßigkeiten

 

Lukas123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2018, 16:47     Titel: Filtern von Messdaten nach Regelmäßigkeiten
  Antworten mit Zitat      
Hallo zusammen,

ich bin noch recht ungeübt im Umgang mit Matlab und deshalb nicht sicher ob das eine schwere oder leichte Frage ist. Selber bin ich leider auf keine Lösung gekommen und in den Threads habe ich auch nichts gefunden.

Mir liegen zwei Zeitreihen mit Messdaten vor. Die erste ist von einer PV-Anlage und die andere von einer elektrischen Haushaltslast. Da beide über 525600 (Minuten pro Jahr) Zeilen verfügen würde ich diese hier durch Beispiele ersetzten.

Gerne würde ich in einem neuen Vektor herausfiltern, welche elektrische Last im Haushalt auftritt, wenn gerade Nacht (heißt PV<=0) ist und den Rest 0 setzten. Problem ist hierbei, dass bei meinen Messwerten auch Tagsüber kurzzeitig die PV-Erzeugung auf 0 abfällt und so das Ergebnis beeinflusst wird. Meine Gegenmaßnahme wäre nun, die elektrische Last nur dann zu betrachten wenn die PV-Erzeugung für 5 oder mehr Zeitschritte 0 ist.

Beispiel:

Code:
PV=[1 2 3 0 0 0 0 0 3 4 0 2 3]';
P_last=[1 3 4 6 7 9 5 4 3 2 3 4 5]';

%Mein Versuch, in dem aber auch kurzzeitige 0 erfasst wird:
n=PV<=0;
P_nacht=P_last(n);

%gewünschtes Ergebnis:
%P_nacht=[0 0 0 6 7 9 5 4 0 0 0 0 0]


Ich hoffe mein Problem ist einigermaßen Versändlich und mir kann jemand helfen Smile

Vielen Dank im Voraus.

beste Grüße
Lukas


J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 16.10.2018, 11:08     Titel:
  Antworten mit Zitat      
Hallo Lukas,

anbei eine Variante per Function. Geht aber bestimmt auch deutlich schöner:

Code:

PV = [1 2 3 0 0 0 0 0 0 3 4 0 2 3]';
P_last = [1 3 4 6 7 9 5 4 3 2 2 3 4 5]';
anz_null = 5; % Anzahl aufeinanderfolgender Nuller ab der Messung als Nacht gewertet wird

P_last_nacht = nachtlast(PV,P_last,anz_null);


function P_last = nachtlast(PV,P_last,anz_null)
    for zaehler = 1:length(PV)
        if zaehler < length(PV)-anz_null
            PV_sum(zaehler,1) = sum(PV(zaehler:zaehler+anz_null-1,1));
        else
            PV_sum(zaehler,1) = sum(PV(zaehler:end,1));
        end
    end

    nuller = find(PV_sum == 0);
    P_last_neu = zeros(length(P_last),1);
    for zaehler = 1 : length(nuller)
        P_last_neu(nuller(zaehler):nuller(zaehler)+anz_null-1,1) = P_last(nuller(zaehler):nuller(zaehler)+anz_null-1,1);
    end
    P_last = P_last_neu;
end
 


Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
Private Nachricht senden Benutzer-Profile anzeigen
 
Lukas123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 12:24     Titel:
  Antworten mit Zitat      
Hallo Jonas,

vielen Dank erstmal für deine Antwort und die Vorgeschlagene Lösung. Das ganze scheint so erstmal super zu funktionieren. Leider jedoch nicht, wenn sich die Nächte wiederholen.

Ich hänge mal Beispieldaten der HTW Berlin dran. Hättest du für die gegebenen Messwerte noch eine Idee oder generell einen Vorschlage wie ich über eine Variable ausdrücken könnte, dass gerade Nacht ist?

VG
Lukas

pvprog_input.mat
 Beschreibung:

Download
 Dateiname:  pvprog_input.mat
 Dateigröße:  3.82 MB
 Heruntergeladen:  218 mal
 
J0nas
Forum-Century

Forum-Century


Beiträge: 208
Anmeldedatum: 10.09.15
Wohnort: ---
Version: ab 2016a
     Beitrag Verfasst am: 17.10.2018, 13:11     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Leider jedoch nicht, wenn sich die Nächte wiederholen.

Bitte genauer beschreiben was dann nicht funktioniert oder welcher Fehler auftritt.

Wenn ich das mit deiner Beispieldatei starte kommt ein Fehler weil am Schluss außerhalb der Matrix auf Werte zugegriffen werden soll. Mit folgender, kleinen Anpassung geht das aber auch:
Code:
PV = p_pv;
P_last = P_ld;
anz_null = 5; % Anzahl aufeinanderfolgender Nuller ab der Messung als Nacht gewertet wird

P_last_nacht = nachtlast(PV,P_last,anz_null);


function P_last = nachtlast(PV,P_last,anz_null)
    PV_sum = zeros(length(P_last),1);
    for zaehler = 1:length(PV)
        if zaehler < length(PV)-anz_null
            PV_sum(zaehler,1) = sum(PV(zaehler:zaehler+anz_null-1,1));
        else
            PV_sum(zaehler,1) = sum(PV(zaehler:end,1));
        end
    end

    nuller = find(PV_sum == 0);
    P_last_neu = zeros(length(P_last),1);
    for zaehler = 1 : length(nuller)
        if nuller(zaehler) < length(PV)-anz_null
            P_last_neu(nuller(zaehler):nuller(zaehler)+anz_null-1,1) = P_last(nuller(zaehler):nuller(zaehler)+anz_null-1,1);
        else
            P_last_neu(nuller(zaehler):end,1) = P_last(nuller(zaehler):end,1);
        end
    end
    P_last = P_last_neu;
end


Wie gesagt: Solltest du irgendwelche Fehler bekommen oder irgendwas nicht passen, dann bitte das ganze genau beschreiben und am besten noch die Fehlermeldung(en) hier reinkopieren.

Grüße
Jonas
_________________

1.) Ask Google & Matlab Documentation
2.) Ask gomatlab.de & Technical Support of MathWorks
3.) Go mad, your problem is unsolvable
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: 18.10.2018, 11:35     Titel: Re: Filtern von Messdaten nach Regelmäßigkeiten
  Antworten mit Zitat      
Hallo Lukas123,

Mit der Funktion https://www.mathworks.com/matlabcen.....eexchange/41813-runlength geht das sehr übersichtlich. Falls du keinen C-Compiler installiert hast, verwende RunLength_M stattdessen:

Code:
PV = [1 2 3 0 0 0 0 0 3 4 0 2 3]';
P_last = [1 3 4 6 7 9 5 4 3 2 3 4 5]';

[B, N] = RunLength(PV <= 0);
B(N < 5) = false;  % Disable runs with less then 5 repetitions
Mask = RunLength(B, N);

P_nacht = P_last .* Mask;
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.