Matlab对基于二进制-XML混合格式的SMOS盐度数据的提取方法与实现

2011-12-28 08:17:40陈建张韧王辉赞安玉柱
海洋通报 2011年6期
关键词:二进制盐度字节

陈建,张韧,王辉赞,2,安玉柱,2

(1.解放军理工大学 气象学院 全军海洋水文环境数值模拟中心, 江苏 南京 211101;2.国家海洋局第二海洋研究所 卫星海洋环境动力学国家重点实验室, 浙江 杭州 310012)

Matlab对基于二进制-XML混合格式的SMOS盐度数据的提取方法与实现

陈建1,张韧1,王辉赞1,2,安玉柱1,2

(1.解放军理工大学 气象学院 全军海洋水文环境数值模拟中心, 江苏 南京 211101;2.国家海洋局第二海洋研究所 卫星海洋环境动力学国家重点实验室, 浙江 杭州 310012)

基于二进制-XML混合文件格式的SMOS盐度数据的处理和延伸应用仍处于初级阶段,其前提是对SMOS数据的提取。本文详细介绍了SMOS的文件格式和利用Matlab对SMOS文件进行读写操作的方法,在此基础上给出了提取SMOS数据的流程图和实例,为SMOS数据产品的开发打下了基础。

二进制;XML;SMOS;盐度;提取

土壤湿度和海洋盐度卫星(Soil Moisture and Ocean Salinity,SMOS)是欧空局地球探索者机遇项目的一个组成部分,整个项目计划由8颗卫星组成,SMOS是该项目的第2颗卫星[1]。

海洋盐度在影响大洋环流、海气相互作用等全球性气候过程及决定蒸发与降水平衡等方面起着重要作用,是理解全球海洋循环和海洋在地球气候中作用的一个重要参数。虽然盐度在大气海洋预测模型中广泛使用,却一直没有方法直接地、全球尺度地测量这一关键变量,SMOS填补了这一空白,可提供全球范围内、高频率、业务化的海表盐度信息。SMOS的主要目标是提供两个关键变量:陆表土壤水分和海表盐度。盐度方面测量目标为:精度0.1psu,时空分辨率10天/200 km或30天/ 100 km。SMOS携带了1台L波段(21 cm,1.4 GHz)的合成孔径成像微波辐射计MIRAS,有Y型的3个径向臂[2]。

SMOS卫星于2009年11月发射并传回首批观测图像,2010年5月底结束试运行,进入正式运行阶段。卫星任务的先期重点放在了盐度反演等一些低级别处理上[3],对资料的同化研究将是今后工作的重点,因此很有必要对资料的读写方法进行探讨。

SMOS卫星数据产品包含了L2和L3,其中L2产品是指轨道级分辨率的盐度产品,而L3产品则是网格化的盐度产品,两者的文件格式和处理方法基本一致。这里以L2产品为例,介绍盐度数据的提取方法。

1 SMOS文件格式

大SMOS资料采用的是二进制-XML混合格式的存储方式,即1个SMOS产品由1个头文件和1个数据块文件组成,两个文件分享同一个文件名,仅用不同的扩展名来区分:头文件为“.HDR”,实为ASCII格式的XML文件;而数据块文件为“.DBL”,为二进制格式。

头文件包含固定头文件和可变头文件,其中固定头文件对所有数据类型结构都相同,可变头文件则允许对不同的数据类型有不同的定义和结构信息,因此其下又包含主要产品头文件MPH和特定产品头文件SPH。数据块文件包括一个或多个数据集,每个数据集又包括一系列统一的数据集记录。头文件和数据块文件通过.ZIP格式对外发布[4]。

SMOS卫星数据的格式是由遥感数据的特性决定的:在一轨数据中,经处理得到的地球物理学变量多达105个,用二进制格式来存储能节约空间、且存储便捷、精度较高;而对应的描述、认证、处理、时间、轨道、仪器等信息对同一轨道是相同的,且具有典型的层次结构,需用一种结构化的标准通用标记语言来存储,XML即是个很好的选择。

为此,欧空局提供了一组二进制-XML库函数,用来读取二进制-文本混合格式,它用一个XML架构来定义文件中数据的顺序和类型,通过简单地改变XML架构来改变给定混合文件的读写格式。该组库函数基于二进制XML描述语言将数据存储为二进制文件并能恢复数据,基于地球探测者文件处理库将数据存储为XML文件并能恢复数据。

综上,SMOS文件的结构如图1。

由于二进制-XML库是用C++写的,其对象处理程序和应用程序接口也是针对C++的,即便SMOS网站上提供了相应的说明,由于其配置复杂,仍给提取SMOS数据带来了较大的困难。此外,还有一些专业的软件,如SMOS-Viewer等也能对SMOS数据进行操作,但功能非常有限。而Matlab借助其简洁的XML接口、固有的任意大小和类型的二进制数据定位和读写功能、以及强大的矩阵计算能力和简单的语法,可以作为读取SMOS文件的入门工具。

图 1 SMOS文件结构图Fig.1 SMOS file structure chart

2 Matlab读写函数

2.1 Matlab对XML文件的读取

语法:DOMnode = xmlread(filename)

函数描述:读取一个名为filename的XML文件,并且返回代表着被解析的文本的Document Object Model节点。

2.2 Matlab对二进制文件的读写

用到的函数有fopen、fread、fwrite、fseek、fclose,详细说明参见Matlab帮助[5]。在下一节中仅就SMOS文件读取中涉及到的相关要点做必要介绍。

3 SMOS卫星L2产品的数据结构和读写方法

下面以盐度L2产品中的用户数据产品(Level 2 Ocean Salinity User Data Product , MIR_OSUDP2)为例,具体说明读写SMOS数据的方法。

3.1 头文件

首先用xmlread语句将XML文档解析为DOM模型。XML DOM是XML Document Object Model的缩写,即XML文档对象模型[6]。根据 DOM,XML文档中的每个成分都是一个节点:整个文档是一个文档节点;每个XML标签是一个元素节点;包含在 XML 元素中的文本是文本节点;每一个XML 的属性是一个属性节点;注释属于注释节点。如图2。

在 DOM处理中一个普遍的错误是:认为元素节点包含文本。其实,元素节点的文本是存储在文本节点中的,而文本是文本节点的值。例如在图2中,元素节点<Ascending_Flag>拥有一个值为“D”的文本节点,“D”不是< Ascending_Flag >元素的值。

图 2 XML文档与DOM模型的对应关系Fig.2 Correspondence between XML documents and DOM model

读取拥有某个标签名或在节点树中位置已知的节点的值的方法如下:

(1)用getElementsByTagName(TagName)获取拥有指定标签名的所有节点,或者利用节点间的关系对某个节点用getChildNodes方法获取其所有子节点,依次逐级进行。

(2)用item(i)获取第i个子节点,索引i从0开始。

注意:a、文本是作为一种独立的节点存在的,即文本节点。对于非根非末节点,按照规定,文本节点的索引是先于相对应的元素节点的,即对平级节点中第j个元素节点,其索引为2*j-1,其相应文本节点索引为2*j-2(即使为空);对于根节点,只有1个索引为0的元素节点;当文本节点为末节点时(如图2中值为“D”的文本节点),只有1个索引为0的文本节点;

b、属性虽然也是节点的一种,但获取属性节点列表需要用getAttributes方法,而非getChildNodes。

(3)得到某个末节点后,用getData获取节点中的数据(如图2中的文本值“D”)。

例如,在L2数据处理中,需要将上升轨道和下降轨道的数据分开处理,而这一信息是存储在与元素节点<Ascending_Flag>相联系的文本节点值“D”中的,根据图2所示结构,有两种方法得到其值:

这样就完成了对轨道类型信息的读取。头文件中其它信息的读取方法类似。

3.2 数据块文件

在一个数据块文件中,首先是此文件包含的网格点的数目:1个4字节整数;然后是各个网格点的内容,包括:

(1)网格点标识:1个4字节整数;

(2)地理坐标,即经纬度:2个4字节浮点数;

(3)地球物理变量,即3个正演模型和1个简单模型反演的盐度值、误差及相关辅助参数:22个4字节浮点数;

(4)控制标志:每个模型各4个字节(以比特为单位的23个控制标志和9个空标志),共16字节;

(5)控制描述:4个1字节整数和26个2字节整数;

(6) 科学标志:每个模型各4个字节(以比特为单位的22个控制标志和10个空标志),共16字节;

(7)科学描述:1个2字节整数。

可见,在一个无格式有数据类型的二进制数据块中,涵盖了不同类型、不同长度的各种储存方式,因此需要其储存方式的说明。有两种方法可以明确:一是借助专业的SMOS可视化工具如上文提到的SMOS-Viewer,二是参考L2数据说明书[4]。

在L2产品的处理过程中,提取每一像素点地球物理变量的同时,常常还需要提取相应的质量控制信息[7],而二者通常是不同数据类型的,前者为浮点型,后者为整型或者bit型,这样就需要将其按照不同的格式分别提取,例如,提取4字节浮点数、1bit型、2字节整型时,需要将fread中的读取格式分别设置为'float32'、'ubit1'和'uint16'。

4 SMOS数据提取的实现及应用

根据上述介绍,在Matlab中读写二进制-XML混合格式文件的函数、提取SMOS数据的流程图如图3 所示。在图3中,左边的流程是读入HDR文件中的分类标志数据、并筛选相应DBL文件中的地球物理变量数据读入Matlab;右边是新建一个二进制文件,并将读入的地球物理变量数据写入此文件。循环往复,直到读写完所有满足要求的SMOS文件。

SMOS L2数据包含的各类地理坐标、地球物理变量和控制标志及描述非常多,包括一些并不常用的辅助数据、亮温级数据等,因此一昼夜的SMOS L2数据大小将达到GB级,数据量非常巨大。而在实际的应用中通常只需要用到与海表盐度SSS直接相关的极少数据,如SSS及其坐标、误差、质量控制和描述信息,因此对于SMOS L2数据的提取不但是进一步开发L3及更高级产品的必要环节,还可以节省存储空间,提高工作效率。

图 3 SMOS数据提取流程图Fig.3 Flow diagram of SMOS data extracting

图 4 太平洋区域2010年11月1日轨道盐度值Fig.4 Orbit based salinity in the Pacific on November 1, 2010

在L2资料同化为L3资料的过程中,首先要鉴别和筛选原始L2数据,筛选方法包括将上升/下降轨道数据分开处理、剔除可用亮温或正确亮温数据较少的反演结果、仅使用通过质量控制的L2数据等等。如图4,给出了太平洋区域2010年11月1日质量控制前后的轨道盐度,由图可见:由于早晚日照等测量条件的差别,除了高纬度之外,同一天的同一点上,上升和下降轨道测得的值是明显不同的;经过质量控制的数据剔除了高纬、轨道边缘、尤其是海岸附近不准确的反演结果,质量大为提高。这些经过筛选的数据才可以用来进行接下来的去偏、滤波、插值等一系列处理[8]。

5 结 论

以上的应用实例表明,Matlab在基于二进制-XML混合格式的SMOS盐度数据的提取中有着很好的应用,并且凭借其强大的数值运算和可视化功能,具有对SMOS数据进行二次开发的能力。其对文件进行操作更加简单直观,免去了库函数配置的繁琐。相对来说,L3文件内容更为简单一些,仅由地理坐标、地球物理变量和控制标志3部分组成,其提取方法类似。

致谢:感谢欧洲航天局(European Space Agency)提供SMOS L2数据。

[1]Jordi F, Adriano C, Andres B.SMOS: The Challenging Sea Surface Salinity Measurement From Space [J].Proceedings of the IEEE, 2010, 98(5): 649-665.

[2]Yann H K, Philippe W, Wigneron J P.The SMOS Mission: New Tool for Monitoring Key Elements of the Global Water Cycle [J].Proceedings of the IEEE, 2010, 98(5): 666-687.

[3]Sonia Z, Jacqueline B, Jordi F.Overview of the SMOS Sea Surface Salinity Prototype Processor [J].IEEE Trans Geosci Remote Sens, 2008, 46(3): 621-645.

[4]Bengoa B M, Zapata M R.SMOS Level 2 and auxiliary data products specification [OL].http://earth.esa.int/object/ index.cfm? fobjectid=6895.2009-05-04/2010-11-01.

[5]占君.MATLAB函数查询手册 [M].北京: 机械工业出版社, 2011.

[6]王建.基于DOM的XML数据访问技术 [J].计算机与数字工程, 2008, 36(2): 65-67.

[7]Gabriel J, Damià G.Accuracy of SMOS level 3 SSS products related to observational errors [J].IEEE Trans Geosci Remote Sens, 2010, 48(4): 1694-1701.

[8]Gabriel J, Damià G.Toward SMOS L4 SSS products: Improving L3 SSS with auxiliary SSS data [J].IEEE Trans Geosci Remote Sens, 2010, 48(5): 2204-2214.

Method and application of extracting SMOS salinity data based on hybrid binary-XML file format with Matlab

CHEN Jian1, ZHANG Ren1, WANG Hui-zan1,2, AN Yu-zhu1,2

(1.PLA Research Center of Ocean Environment Numerical Simulation, Institute of Meteorology, PLA University of Science and Technology, Nanjing 211101, China; 2.State Key Laboratory of Satellite Ocean Environment Dynamics, Second Institute of Oceanography, State Oceanic Administration, Hangzhou 310012, China)

SMOS salinity data based on file format of hybrid binary-XML has just been processed and applied in the primary stage and extracting SMOS data is its premise.This paper presents a process of read-write hybrid binary-XML file format in details and gives a flow chart and an example of extracting SMOS data, laying the foundation of developing SMOS salinity product.

binary; XML; SMOS; salinity; extracting

P717

A

1001-6932(2011)06-0692-05

2011-02-13;

2011-05-26

中国自然科学基金 (41075045 )。

陈建 ( 1986-),男,江苏徐州人,博士研究生,主要从事海洋数据处理研究。电子邮箱:chenj03@126.com。

张韧 ( 1963-),男,四川峨眉人,博士,教授,博导,主要从事海气相互作用研究。电子邮箱:zren63@126.com。

猜你喜欢
二进制盐度字节
用二进制解一道高中数学联赛数论题
中等数学(2021年8期)2021-11-22 07:53:38
No.8 字节跳动将推出独立出口电商APP
有趣的进度
二进制在竞赛题中的应用
中等数学(2019年4期)2019-08-30 03:51:44
No.10 “字节跳动手机”要来了?
简谈MC7字节码
盐度和pH对细角螺耗氧率和排氨率的影响
盐度胁迫对入侵生物福寿螺的急性毒性效应
适用于高盐度和致密岩层驱油的表面活性剂
胶州湾夏季盐度长期输运机制分析