Verfasst am: 27.07.2018, 13:18
Titel: Identifikation eines periodischen Abschnitts in Lastprofil
Guten Tag zusammen,
ich habe von einer Arbeitsgruppe mit mehreren Verbrauchern ein Energielastprofil über einen Zeitraum von einer Woche aufgenommen. Das Leistungsmessgerät hat jedoch eine Abtastrate von 1-3s, sodass keine kontinuierliche Messung möglich ist. Bei uns im Betrieb wird im 3-Schicht System gearbeitet d.h. in dem Energielastprofil sind ebenfalls Pausen und Schichtwechselzeiten enthalten. Der sich wiederholende Arbeitstakt beträgt dabei 60s.
Mein Ziel ist es nun das Energielastprofil eines vollen 60 Sekunden Zyklus zu identifizieren und anschließend dieses Profil in den darauf folgenden Tagen mehrfach in dem Energielastprofil zu finden, um eine Mittelung durchzuführen. Das Problem ist, dass ich nicht weiß den genauen Startzeitpunkt weiß.
Für die Identifizierung des Referenzenergielastprofils habe ich Integrale über 60s Intervalle gebildet gebildet und die Intervalgrenzen, um jeweils 1s über den gesamten Zeitraum verschoben. Die Darstellung als Histogramm hat mir anschließend die drei Betriebszustände Stand-By, Produktionsbereit und Produktion gezeigt. Die Übergangsbereiche habe ich anschließend mit der Wahl eines Schwellwerts eliminiert. Anschließend nahm ich dann ein 60s Intervall aus dem Peak des Histogrammbereichs für den Produktionszustand.
Das auf diese Weise erhaltene Referenzlastprofil versuche ich nun im weiteren zeitlichen Verlauf wiederzufinden und habe dafür die Kreuzkorrelation benutzt. Leider sind die Abweichungen sehr groß (ca. 30%).
Hat jemand eine Idee welches Verfahren für den Vergleich von zwei Kurvenverläufen geeignet wäre bzw. ob der erste Schritt zur Identifizierung eines periodischen Abschnitts sinnvoll ist ?
Ein anderer Ansatz war es das Energielastprofil in die einzelnen periodischen Anteile aufzusplitten indem ich eine FFT anwende und anschließend die Frequenzanteile herausfiltere und den einzelnen Verbrauchern in der Arbeitsgruppe zuordne. Das klappt leider jedoch nicht so wie ich mir das vorstellen. Wahrscheinlich auch weil An- und Abfahrvorgänge, Pausen und Schichtwechsel in dem Energielastprofil enthalten sind.
Daten und Programmcode des bisherigen Ansatzes kann ich bei Bedarf auch zur Verfügung stellen.
Vielen Dank für eure Hilfe im Voraus und ein schönes Wochenende.
Verfasst am: 27.07.2018, 13:29
Titel: Re: Identifikation eines periodischen Abschnitts in Lastprof
Hallo Hanno96ver,
Es ist ziemlich schwierig Deinen erklärunmgen zu folgen, wenn man nicht im genau gleichen Arbeitsgebiet tätig ist wie Du. Denke daran, dass Matlab selbst keine Ahnung hat, was ein "Energielastprofil" ist, sondern nur Arrays aus Zahlen kennt. Deshalb sollte es auch für die Lösung keine rolle spielen, welche technischen Spezialausdrücke hinter den Zaheln stehen.
Was sind die Inputs für Deine Frage?
Welchen Matlab-Code hast Du bisher verwendet?
Wie sehen die gewünschten Outputs aus und auf welchem mathematischen Weg können sie berechnet werden?
Mit diesen Details wird aus Deinem technischen Problem eine Frage für ein Matlab-Forum. Dann werden auch Leute Antworten schreiben können, die nicht in Deinem Fachgebiet arbeiten.
Verfasst am: 27.07.2018, 14:10
Titel: Re: Identifikation eines periodischen Abschnitts in Lastprof
Hallo Jan,
vielen Dank für deinen Hinweis. Dann fange ich lieber ganz allgemein an:
Ich habe einen Vektor mit 2 Spalten und einer beliebigen Anzahl an Zeilen als Input für meine Funktion. In der ersten Spalte sind Unix Time Stamps enthalten und in der zweiten Spalten Energiewerte.
Ich würde gerne in dem Vektor eine sich wiederholende Folge identifizieren, die 60 Zeilen lang ist (Taktzeit des Arbeitsvorgangs sind 60s). Jedoch sind in dem Vektor auch Bereiche enthalten an denen kein Arbeitsvorgang durchgeführt wurde d.h. man hat keinen reinen sich wiederholenden Zyklus.
Zur Bestimmung der Bereiche in denen nicht gearbeitet wurde, habe ich Näherungsweise das Integral eines 60s Bereiches berechnet und geplottet, um einen Referenzwert zu erhalten
% Lastprofil mit Pausen
Lastprofilvariable = Lastprofil_mitPausen;
% Dimensionierung der Zwischenspeicher
intSizeLastprofil = size(Lastprofilvariable,1) - 59;
% Cell Array dimensionieren anhand von den Intervallen
maxIntegral=zeros(intSizeLastprofil,3);
% Integrale der Zeitintervalle for b = 0:intSizeLastprofil-1
maxIntegral(b+1,2) = sum(Lastprofilvariable(b+1:b+60,2));
% Fehler hier ungefähr bei 2% -> Ergo kann man sich sparen
maxIntegral(b+1,3) = 100 - maxIntegral(b+1,1)/maxIntegral(b+1,2)*100;
end
Die Intervalle, die im dritten Bereich liegen, dienen als periodischen Intervall, dass gefunden werden muss in dem Vektor. Dies habe ich mit der Kreuzkorrelation versucht, jedoch Abweichungen von bis zu 30% erhalten.
Code:
% Kreuzkorrelation mit 60s Intervall
% Potentiell ist jedes Lastprofil geeignet, das in den Bereich der Histogrammballung fällt
% Speicher für die Lastprofile
dbLastprofilspeicher = zeros(size(Lastprofilvariable,1)-60-61,60);
% Speicher für die Korrelation der Kurven
dbLastprofilkorrelation = zeros(size(Lastprofilvariable,1)-60-61,1);
% Erstes Intervall für die Kreuzkorrelation
dbKreuzkorrelation_a = Lastprofilvariable(1:60,2);
dbLastprofilspeicher(1,:) = dbKreuzkorrelation_a;
% Zweites Intervall für die Kreuzkorrelation mit for Schleife for a=2:size(Lastprofilvariable,1)-60
dbKreuzkorrelation_b = Lastprofilvariable(a:a+59,2);
dbLastprofilspeicher(a,:) = dbKreuzkorrelation_b;
[r,~] = xcorr(dbKreuzkorrelation_a, dbKreuzkorrelation_b);
dbLastprofilkorrelation(a,1) = max(r);
end
Hat jemand eine Idee für die Identifizierung eines sich wiederholenden Intervalls oder der anschließende Vergleich der Intervalle wie z.B. mit der Kreuzkorrelation?
Einstellungen und Berechtigungen
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
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.