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

Tagesmittelwert aus Messdaten berechnen

 

Grizzly
Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 26.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2011, 23:07     Titel: Tagesmittelwert aus Messdaten berechnen
  Antworten mit Zitat      
Hallo hier im Forum !

Ich habe einen Textfile mit halbstündlichen Messwerten einzelner Luftschadstoffen und möchte daraus nun den Tages und den Wochenmittelwert für jeden einzelnen berechnen.
Einlesen tue ich die Daten mit diesem Programm:
Code:

function stations = readStations(infile)
typ    = '%s %s %f %f %f %f %f %f %f %f';
[date time dummy(:,1) dummy(:,2) dummy(:,3) dummy(:,4) dummy(:,5) dummy(:,6) dummy(:,7) dummy(:,8)]= ...
     TEXTREAD(infile,typ, 'headerlines', 6);

% 2 Schleifen, um nicht vorhandene oder negeative Werte mit NaN zu ersetzen
M_0 = 0;
M_fehler = 0;

 for i = 1:size(dummy,1)
     for k = 1:size(dummy,2);
         % keine Messwerte
         if dummy(i,k) == 0
             dummy(i,k) = NaN;
             M_0 = M_0 + 1;
         end
         % Messwerte < 0 -> Messfehler
         if dummy(i,k) < 0
             dummy(i,k) = NaN;
             M_fehler = M_fehler+1;
         end
     end
 end
 disp(['keine Messwerte:    ', num2str(M_0)])
 disp(['Messfehler     :    ', num2str(M_fehler)])

stations.FallNO   =dummy(:,1);
stations.FallNO2  =dummy(:,2);
stations.FallPM10 =dummy(:,3);
stations.AndNO    =dummy(:,4);
stations.AndNO2   =dummy(:,5);
stations.AndPM10  =dummy(:,6);
stations.AndO3    =dummy(:,7);
stations.SadrO3   =dummy(:,8);

clear dummy;

sdatum = datenum(date, 'dd.mm.yy');
stime = datenum(time,'HH:MM');
syear = datenum('01/01/11','dd/mm/yy');
stime = stime - syear;
stations.sdate = sdatum + stime;

%---------Programmende------------
 


Die erste Spalte ist das Datum, die zweite die Uhrzeit der Messung und die 3. bis 10. sind die Messwerte für die ich jeweils den Tages- bzw den Wochenmittelwert berechnen möchte.
Ich hoffe ihr könnt mir weiterhelfen, da ich mit der stepfunktion ( step = 48 ) irgendwie auf dem Schlauch stehe... Danke ans Forum bereits im Voraus !

PS: das ist mein erster Beitrag und ich hoffe, dass alles so wie ich es
gepostet habe passt

Edit by _Peter_: Willkommen im Forum, nur eine kleine Anmerkung zu deinem Post: Nutze die Codeumgebung, diese macht deinen Quellcode wesentlich besser lesbar. Drücke dazu beim Post verfassen oben auf den 'Code' Button, füge dann den Code ein und drücke danach wieder den 'Code' Button.

Daten_Innsbruck_format_gloa.txt
 Beschreibung:

Download
 Dateiname:  Daten_Innsbruck_format_gloa.txt
 Dateigröße:  1.1 MB
 Heruntergeladen:  489 mal
Private Nachricht senden Benutzer-Profile anzeigen


Grizzly
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 26.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 19:06     Titel:
  Antworten mit Zitat      
Hallo,
ich hoffe es findet sich irgendjemand der mir bei meinem
Problem weiterhelfen kann ?!
Ich schaffe es leider auch mit for Schleife nicht auf halbwegs anständige Werte zu kommen...
Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 30.05.2011, 19:41     Titel:
  Antworten mit Zitat      
Hallo Grizzly,
hast du es schon mit dem Befehl
Code:

versucht?
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Grizzly
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 26.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2011, 23:24     Titel:
  Antworten mit Zitat      
Ja habe ich,
das half mir zwar nur theoretisch... aber ich weiß jetzt, dass ich den Befehl
"nanmean" an späterer Stelle verwenden muss !
Private Nachricht senden Benutzer-Profile anzeigen
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 31.05.2011, 13:58     Titel:
  Antworten mit Zitat      
Hallo Grizzly,
ein erster Lösungsansatz wäre folgender, jedoch ist da noch optimierungbedarf, da er eine Weile rechnet wegen der Datenzuordnung. Vielleicht wäre es sinnvoll sich Gedanken über die Speicherung der Daten zu machen um Geschwindigkeit rauszuholen.
Code:

function [stations, values] = readStations(infile)
typ    = '%s %s %f %f %f %f %f %f %f %f';
[datum time dummy(:,1) dummy(:,2) dummy(:,3) dummy(:,4) dummy(:,5) dummy(:,6) dummy(:,7) dummy(:,8)]= ...
     textread(infile,typ, 'headerlines', 6);

M_0 = length(dummy(dummy==0));
M_fehler = length(dummy(dummy < 0));
dummy(dummy <= 0) = NaN;

disp(['keine Messwerte:    ', num2str(M_0)])
disp(['Messfehler     :    ', num2str(M_fehler)])

stations.FallNO   = dummy(:,1);
stations.FallNO2  = dummy(:,2);
stations.FallPM10 = dummy(:,3);
stations.AndNO    = dummy(:,4);
stations.AndNO2   = dummy(:,5);
stations.AndPM10  = dummy(:,6);
stations.AndO3    = dummy(:,7);
stations.SadrO3   = dummy(:,8);
stations.sdatum   = datum;
stations.stime    = time;

unique_dates = unique(stations.sdatum);

values.data = [];
for i = 1 : length(unique_dates)
    values(i).date = unique_dates(i);
    for j = 1 : length(stations.sdatum)
        if strcmp(unique_dates(i), stations.sdatum(j))
            values(i).data = [values(i).data dummy(j,:)];
        end
    end
    values(i).day_mean = nanmean(values(i).data);
end
 

Aufruf mit
Code:

[stations, values] = readStations('Daten_Innsbruck_format_gloa.txt')
 

_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Grizzly
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 26.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2011, 14:07     Titel:
  Antworten mit Zitat      
Hallo,
ich habe das Problem folgendermaßen gelöst:

Code:
% Berechnung der 7-tages Mittel stations:
k=1;
for index = 1:336:14448
data_IBK.FallNO_7daymean(k,1)   = nanmean(data_IBK.FallNO(index:index+336,1));
data_IBK.FallNO2_7daymean(k,1)  = nanmean(data_IBK.FallNO2(index:index+336,1));
data_IBK.FallPM10_7daymean(k,1) = nanmean(data_IBK.FallPM10(index:index+336,1));
data_IBK.AndNO_7daymean(k,1)    = nanmean(data_IBK.AndNO(index:index+336,1));
data_IBK.AndNO2_7daymean(k,1)   = nanmean(data_IBK.AndNO2(index:index+336,1));
data_IBK.AndPM10_7daymean(k,1)  = nanmean(data_IBK.AndPM10(index:index+336,1));
data_IBK.AndO3_7daymean(k,1)    = nanmean(data_IBK.AndO3(index:index+336,1));
data_IBK.SadrO3_7daymean(k,1)   = nanmean(data_IBK.SadrO3(index:index+336,1));
data_IBK.sdate_7daymean(k,1)    = data_IBK.sdate(index+168,1);
k=k+1;
end


zwar sehr umständlich, aber es funktioniert...
Danke für die Mühe
Grüße Grizzly
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.06.2011, 14:26     Titel:
  Antworten mit Zitat      
Hallo,

in solchen Fällen kann auch reshape helfen. Beispiel:

Code:
M = rand(14448,1);
m = mean(reshape(M, 336, []));


Es hilft immer ungemein, wenn das Problem an einem möglichst einfachen, leicht nachvollziehbaren Beispiel dargestellt wird Wink

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 17
Anmeldedatum: 26.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2011, 19:09     Titel:
  Antworten mit Zitat      
Und wie würdet ihr dann die Wochenmittelwerte berechnen ?
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 - 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.