美文网首页Ausplin插值遥感
基于ANUSPLIN的批量气象插值-从数据处理到最终结果(4)

基于ANUSPLIN的批量气象插值-从数据处理到最终结果(4)

作者: 画长空_yin | 来源:发表于2018-07-03 14:57 被阅读234次

    缺测气象数据的填补

    在(3)中提到,某些站点的气象数据会存在着缺失问题,当缺测数据很多时,可直接去掉该站点,当较少时,则需要采取手段进行填充。本文线性内插法进行补齐

    线性内插法

    for year=1980:2015
        if mod(year,4)==0
            cd=366;
        else
            cd=365;
        end
        %降水
        data=xlsread(strcat('H:\Day1951-2012yuanshi\插值格式\1980-2016\未修正\中国PRE',int2str(year),'.xlsx')); %读取中国1980年降水
        for i=1:size(data,1) %对降水数据进行循环
            data1=data(i,:);
            data_pre=data1(5:cd+4);%前四位分别是站点,经纬度和高程,降水数据从第五位开始
            sy=find(abs(data_pre)>=0);%找到数据中绝对值大于0的部分,缺失值NaN值不会大于0
            if length(sy)<cd %当满足条件的长度小于天数时,表明存在着空值部分
                if length(sy) >340 %当满足条件的超过350天,即95%以上时进行内插处理,否则直接去掉该点
                   %首先判断前段
                   data_pre1=data_pre(1:5);%取前五个进行判断,有空值部分取其他值的均值
                   sy1=find(abs(data_pre1)>=0);
                   data_pre1_average=mean(data_pre1(sy1));
                   for j=1:5
                       if isnan(data_pre1(j))
                         data_pre1(j)=data_pre1_average; 
                       end
                   end
                   %再判断后段
                   data_pre2=data_pre(cd-4:cd);%对后五个进行判断
                   sy1=find(abs(data_pre2)>=0);
                   data_pre2_average=mean(data_pre2(sy1));
                   for j=1:5
                       if isnan(data_pre2(j))
                         data_pre2(j)=data_pre2_average; 
                       end
                   end
                   data_pre(1:5)=data_pre1;
                   data_pre(cd-4:cd)=data_pre2;
                   %前后完整后采用线性内插函数对中间缺失值进行内插
                   sy1=find(abs(data_pre)>=0);
                   juzheng=[sy1;data_pre(sy1)];
                   data_pre_new=interp1(sy1,data_pre(sy1),[1:length(data_pre)]);
                   data1(5:cd+4)=data_pre_new;
                else
                    data1=[];
                end
            end
                data(i,:)=data1;
        end
            biaotou=[NaN,NaN,NaN,NaN,[1:cd]];
            data=[biaotou;data];
            filename=strcat('H:\Day1951-2012yuanshi\插值格式\1980-2016\未修正\缺测修正的中国PRE',int2str(year),'.xlsx');
            xlswrite(filename,data);
    end
    

    通过上述方法能够将一年中缺测少于5%的站点数据补齐。

    相关文章

      网友评论

      本文标题:基于ANUSPLIN的批量气象插值-从数据处理到最终结果(4)

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