美文网首页生态遥感的学习笔记
使用Matlab处理半小时数据为日数据

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

作者: 荔枝猪 | 来源:发表于2019-07-12 09:16 被阅读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
    

    相关文章

      网友评论

        本文标题:使用Matlab处理半小时数据为日数据

        本文链接:https://www.haomeiwen.com/subject/vsvskctx.html