Bootstrap

CloudSat数据产品数据下载与处理 (matlab)

CloudSat数据下载

这个数据我之前和CALIPSO弄混了,后来发现它们虽然是同一个火箭上去,但是数据产品却在不同的平台下,CloudSat的数据更加关注云的特性,包括云覆盖、云水当量、云分类数据。

数据网址在:CloudSat网址
但是目前数据网站下载似乎无法连接,因此采用了添加公钥登录sftp的方法下载,添加sftp的方法在网站上已经有了介绍 SFTP aceess,这里就不多赘述了。

产品包括1-B 2-B 2-C等,每个数据包含的变量不同,这里我下载的是2B-CWC数据,主要是包括云水当量廓线。

数据处理

下载后的数据命名方式为:[yeardaynumtime_轨道名_产品名.hdf]
如:2018213150513_65299_CS_2B-CWC-RO_GRANULE_P1_R05_E07_F03.hdf
指的就是2018年的低213天15时05分13秒得到的2B-CWC数据。

数据是普通hdf格式,在matlab中,使用hdfinfohdfread读取。
使用hdfinfo可以得到一个结构体,在matlab中,可以直接点击查看结构体的内容,并通过点击查看相迎变量,再通过hdfread读取数据,
如下图:在这里插入图片描述
这里是个三层结构,数据主要在info.Vgroup.Vgroup,Vdata里。
开始读取数据:

hdfname=[path,filename{i}];
  info=hdfinfo(hdfname);
  vgroup=info.Vgroup.Vgroup;
  geoinfo=vgroup(1).Vdata;
  lat=hdfread(geoinfo(4));
  lon=hdfread(geoinfo(5));
  height=hdfread(vgroup(1).SDS);
  time=hdfread(geoinfo(2));
  vdata=vgroup(2).SDS;
  lwc=hdfread(vdata(13));
  iwc=hdfread(vdata(15));

其中,iwc和lwc即为云的液态水含量与固态水含量。
height为卫星的radar bin的高度,总共有125个bin,间隔大约为240m,大约在-4570-25000m之间。下图为bin的示例:

在这里插入图片描述
考虑到实际使用时,主要是提取部分区域的部分数据用来比对,通过设定经纬度的边界来提取:

lat=lat{1};
  lon=lon{1};
  idx1=find(lat<latmax&lat>latmin);
  idx2=find(lon<lonmax&lon>lonmin);
  idx=intersect(idx1,idx2);
  if ~isempty(idx)
      iwc_use=iwc(idx,:);
      lwc_use=lwc(idx,:);
      height_use=height(idx,:);
      lat_use=lat(idx);
      lon_use=lon(idx);
      a=filename{i};
      ncname=regexp(a,'\d{13}','match');
      d=ncname{1};
      y=str2double(d(1:4));
      daynum=str2double(d(5:7));
      h=str2double(d(8:9));
      [mon,day]=day2mon(y,daynum);
      newname=datestr(datetime(y,mon,day,h,0,0),'yyyy-mm-dd_HH');
      ncfile=[path,newname,'.nc'];
      disp(ncfile);
      nccreate(ncfile,'lat','Dimensions',{'x',length(idx)});
      nccreate(ncfile,'lon','Dimensions',{'x',length(idx)});
      nccreate(ncfile,'height','Dimensions',{'x',length(idx),'y',125});
      nccreate(ncfile,'iwc','Dimensions',{'x',length(idx),'y',125});
      nccreate(ncfile,'lwc','Dimensions',{'x',length(idx),'y',125});
      ncwrite(ncfile,'lat',lat_use);
      ncwrite(ncfile,'lon',lon_use);
      ncwrite(ncfile,'iwc',iwc_use);
      ncwrite(ncfile,'lwc',lwc_use)
      ncwrite(ncfile,'height',height_use)
  end

输出即可

;