生态遥感的学习笔记

使用Matlab处理半小时数据为日数据

2019-07-12  本文已影响18人  荔枝猪

需求

现有一份半小时数据,需合成日数据。
以一个站点的一年温度和辐射数据为例,第二列为月份,第三列为日,第六列为辐射,第八列为温度。

代码

%by yang,2019.4
%% 处理flux站点30分钟光合有效辐射数据
% 将半小时累加为日值
par = xlsread('flux_30_climate.xlsx','DX2004'); 
for i=1:12       %12个月
    for j=1:31   %先假设每个月都有31天
        m = find(par(:,2)==i & par(:,3)==j);  %寻找par第2列为i并且第3列为j的行号,保存为m
        A{1,i}(j,1)=sum(par(m,6));            %A为每个月一个元胞,第6列为辐射数据
    end
end
%将元胞转为矩阵,并删除0元素(那些不足31天的)
par_d = cell2mat(A);                   %元胞转为矩阵
par_d((par_d==0))=[];                  %删除0元素
par_d = (par_d*30*60/1000000/4.57)';   %单位转换,1mol=1000000umol,1MJ=4.57mol,转为一列

% 将日数据合成16天数据
N=ceil(366/16);                                     %N为365除以16取大于商的最小整数
for i = 1:N-1
     par_16d(i,1) = sum(par_d(1+16*(i-1):16*i,1));  %每16天数据相加
     par_16d(N,1) = sum(par_d(1+16*(N-1):end,1));   %每年最后不足16天的剩余天数的数据相加 
end

%% 处理flux站点30分钟温度数据
% 将半小时平均为日值
tem = xlsread('flux_30_climate.xlsx','xsbn2004'); 
for i=1:12       %12个月
    for j=1:31   %先假设每个月都有31天
        m = find(tem(:,2)==i & tem(:,3)==j);   %寻找par第2列为i并且第3列为j的行号,保存为m
        A{1,i}(j,1)=mean(tem(m,8));            %A为每个月一个元胞,第8列为温度数据
    end
end
%将元胞转为矩阵,并删除NAN元素(那些不足31天的)
tem_d = cell2mat(A);       %元胞转为矩阵
tem_d(isnan(tem_d))=[];    %删除NAN元素
tem_d = (tem_d)';          %转为一列

% 将日数据合成16天数据
N=ceil(366/16);                                      %N为365除以16取大于商的最小整数
for i = 1:N-1
     tem_16d(i,1) = mean(tem_d(1+16*(i-1):16*i,1));  %每16天的平均温度数据
     tem_16d(N,1) = mean(tem_d(1+16*(N-1):end,1));   %每年最后不足16天的剩余天数的数据平均
end
上一篇下一篇

猜你喜欢

热点阅读