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

Identifikation eines periodischen Abschnitts in Lastprofil

 

Hanno96ver
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.05.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2018, 14:18     Titel: Identifikation eines periodischen Abschnitts in Lastprofil
  Antworten mit Zitat      
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.
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.07.2018, 14:29     Titel: Re: Identifikation eines periodischen Abschnitts in Lastprof
  Antworten mit Zitat      
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.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 17.05.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.07.2018, 15:10     Titel: Re: Identifikation eines periodischen Abschnitts in Lastprof
  Antworten mit Zitat      
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

Code:

[Lastprofil_mitPausen,~,~] = xlsread('PFAD');

% 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

% Histogramm das die 60s-Integralwerte darstellt

% Y-Werte nutzen
dbIntegral_Energie = maxIntegral(:,2);

% Zählen der verschiedenen Werte und sortieren in Balken
[dbAnzahlIntervallwerte,edges] = histcounts(dbIntegral_Energie);

% Histogram plotten
histogram(dbIntegral_Energie);

% Werte die weniger als 1% ausmachen filtern
dbAnzahlIntervallwerte(dbAnzahlIntervallwerte<(size(maxIntegral,1)/100)) = 0;

% Filtern und Verknüpfen der Histogramm Werte
% Energiewerte genauso filtern gemäß dem vorherigen Filter
edges_mittelwert = zeros(1,size(edges,2)-1);

for a =1:size(edges,2)-1
   % Aus Linke und rechte Kante Mittelwert bilden
   edges_mittelwert(1,a) = (edges(1,a)+edges(1,a+1))/2;
   
   % Einträge löschen die zuvor bereits gefiltert worden sind
   if dbAnzahlIntervallwerte(1,a) == 0
       edges_mittelwert(1,a) = 0;
   end
end

% Verknüpfen der beiden Zeilen
dbHistogramm_filter = [dbAnzahlIntervallwerte;edges_mittelwert];
 


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