利用MATLAB读取HDF格式数据的实用方法

上传人:无*** 文档编号:61791681 上传时间:2022-03-12 格式:DOC 页数:5 大小:194KB
收藏 版权申诉 举报 下载
利用MATLAB读取HDF格式数据的实用方法_第1页
第1页 / 共5页
利用MATLAB读取HDF格式数据的实用方法_第2页
第2页 / 共5页
利用MATLAB读取HDF格式数据的实用方法_第3页
第3页 / 共5页
资源描述:

《利用MATLAB读取HDF格式数据的实用方法》由会员分享,可在线阅读,更多相关《利用MATLAB读取HDF格式数据的实用方法(5页珍藏版)》请在装配图网上搜索。

1、利用MATLAB读取HDF格式数据的实用方法基金项目:国家863项目(2008AA09Z104),自然基金项目(40706061)摘要 HDF是一种广泛用于科学数据共享的国际标准数据格式,正确高效地读取HDF文件数据是对其进行应用的基础。本文首先介绍了HDF文件格式,以及几种常用的HDF文件读取方式和各自的优缺点。在此基础上,详细给出了MATLAB读取HDF文件的简易方法和代码。最后,本文给出了利用MATLAB读取NCEP数据的应用实例。关键词 HDF格式,MATLAB,科学数据A practical way to read HDF data with MATLABBai Long1、Lei

2、Hui2、Zhang Xuan2(1.Nanjing University of Information Science & Technology, Nanjing, 210044; 2. State Key Laboratory of Satellite Ocean Environment Dynamics, Second Institute of Oceanography , State Oceanic Administration, Hangzhou, 310012, China)Abstract: HDF, the Hierarchical Data Format, is a wide

3、ly-used international standard data format. Numerous scientific data have been written in HDF format for data exchange and sharing, so how to read the HDF data is the first and fundamental step for science research and application. In this paper, firstly, the brief introduction of HDF format is give

4、n, and merits and demerits of several common methods of HDF data reading are analysis. Then, a method to read HDF data with METLAB software is presented with the detail codes. Finally, an application example is given by reading the NCEP data with HDF data by the MATLAB.Abstract Key words:HDF Format,

5、 MATLAB, Scientific Data1 引 言科学研究需要对大量的数据进行处理,而这些科学数据有着很多不同的储存形式和标准格式。HDF是美国国家高级计算机应用中心(NCSA)为了满足各种领域研究需要而开发出的一种能高效存储和分发科学数据的新型数据格式1。HDF的数据格式是一种分层式数据管理结构,是一个能够自我描述、多目标、用于科学数据存储和分发的数据格式。简单来说,HDF格式文件是面向对象的自描述文件,它使得在不同的计算机系统中分享数据成为可能。HDF文件格式在科学数据的共享上有很大的优势,其优势在于:跨平台性,允许人们在无须经过格式转换,便可在不同操作系统上使用;自我描述性,一个

6、HDF文件可包含所以关于该数据的信息,不需要附带任何的描述性文件;多样性,可以储存并处理大量数据,并且一个文件中可以包含多种类型数据;灵活性和可扩展性。正是因为这些优点,HDF格式文件被广泛地运用于科学数据共享,是目前国际上数据共享应用较广泛的文件格式2。正确高效地读取HDF文件里面的数据,是共享HDF格式科学数据的前提。目前比较常用的读取HDF文件的方式是使用IDL3、C和Fortran等传统语言工具,以及GrADS等绘图软件4也可以实现HDF文件的读取。但是这些读取方式对于非专业人员来说都有些难度,不容易在短期内快速掌握,而利用MATLAB读取HDF格式数据则相对简单高效。2 几种HDF格

7、式数据读取方式比较2.1 交互式数据语言IDL美国RSI公司的交互式数据语言IDL(Interactive Data Language)是进行二维及多维数据分析、可视化表达与跨平台应用开发的理想软件工具。IDL是一种标准的读取HDF文件的语言。其读取HDF文件常用的关键IDL命令有:HDF_SD_START、HDF_SA_NAMETOINDEX、HDF_SD_SELECT、HDF_SD_GETDATA、HDF_SD_ENDACCESS、HDF_SD_END等。2.2 C、Fortran等程序语言C、Fortan等传统语言工具也可以读取HDF文件。从美国国家高性能计算应用中心(NCSA)网站可下

8、载到用于C和Fortran的HDF库函数5。可以通过配置库函数,实现对HDF文件数据的读取。2.3 GrADS软件GrADS是目前气象界广泛使用的一种数据处理和显示软件系统。该软件通过其集成环境对气象数据进行读取、加工、图形显示和打印输出。运行GrADS软件自带的GrADSHDF应用程序,使用sdfopen命令便可以打开HDF文件,并可进一步对HDF文件进行处理。2.4 HDF格式数据浏览软件除了那些用途广泛的语言程序以外,目前还有多款专门用于浏览HDF文件的软件工具,例如HDF Explorer、HDF View、HDF Look、HDF Inspectoe等。这些HDF浏览软件都以目录树形

9、式来展开显示HDF文件的分层数据,主要功能是查看HDF文件属性、数据等内容。2.5 不同方法的优缺点上面读取HDF格式数据的方式各有其优点,但也存在不足之处,它们的优缺点比较如表1所示。尽管利用以上读取HDF文件方式有其各自的优势,但是除了使用浏览软件外,其他方式都首先要求使用者本身能够熟练运用该语言。这使得非专业人员如果想要读取HDF文件里面的某些数据,将不得不花费大量的时间学习编写程序代码及使用专业软件。而使用浏览软件虽然能看到HDF文件里面的内容,却无法实现对数据的批量读取、格式转换等进一步的处理。表1不同方法对于HDF文件读取的优缺点提取方法优点缺点IDL不需要编写大量的传统程序就可以

10、直接研究数据。需要配置专门的HDF文件的库函数,以及编写特定的程序。这就要求使用者本身要对语言程序的使用有一定的基础,具备一定的编程水平。C、Fortran适用于与大型程序和批量数据的处理,将HDF读取作为程序的一部分。GrADS无需HDF库函数的支持就可以处理HDF文件,并且有很好的绘图功能,可将数据直接绘制成图像。使用者的范围较小,一般仅限于气象方面人员。读取HDF文件的过程较为繁琐,软件本身也不容易掌握使用。浏览软件简单易用,不用要求有任何的编程水平,能够很直观地查看文件数据。只能显示文件内容,难以实现对数据的提取,不能进行批量化处理。3 利用MATLAB读取HDF格式文件3.1 MAT

11、LAB读取HDF格式文件的优势MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。该软件有三大特点,一是功能强大,具有数值计算和符号计算、计算结果和编程可视化、数学和文字统一处理、离线和在线计算等功能;二是界面友善、语言自然,MATLAB以复数处理作为计算单元,指令表达与标准教科书的数学表达式相近;三是开放性强,其本身就拥有了30多个应用工具箱,而世界上超过200家公司开发出与MATLAB兼容的第三方产品,这些产品向用户提供更多的工具箱、模块集、与其他

12、商业产品的接口等。正是由于MATLAB的各种优势和特点,已经成为研究和解决各种具体工程问题的一种标准软件。MATLAB里面提供了一组HDF应用程序接口及一系列的函数,这使得利用MATLAB打开、处理HDF文件非常方便6。利用MATLAB实现对于HDF格式数据的读取优势在于:使用MATLAB的人员范围广泛;简单易学,可以轻松运用;不需要进行大量编程工作,只要几个简单函数命令就能够实现对数据的提取;强大的数值运算和可视化功能,具有对数据进行二次开发的能力。3.2 MATLAB读取HDF文件方法1)使用 HDF Import ToolHDF Import Tool是MATLAB自带的一个可视化的HD

13、F文件输入工具,主要用于HDF和HDF-EOS文件的浏览和输入数据。在MATLAB的命令窗口输入:hdftool,即可打HDF Import Tool;使用该工具可以打开HDF文件,可以从中看到HDF文件的信息。选定一个要打开的数据集,便可以看到该数据集的详细信息,点击Import即可把选择的数据输入到MATLAB工作区。或者通过在命令窗口输入:hdftool(example.hdf),也可打开在MATLAB路径下文件名为example.hdf的HDF文件。由于是可视化的工具,所以能够很直观的显示HDF文件,而且将数据输出的操作简单易行。2)使用信息读取函数hdfinfo通过在MATLAB中使

14、用hdfinfo这个函数,可以获得HDF文件的信息,其语法为:S= hdfinfo(filename)或S=hdfinfo(filename,mode);mode选用eos则只能读取HDF-EOS文件,如果选取hdf或者缺省,既可读取HDF文件信息又可读取HDF-EOS文件文件信息。hdfinfo的返回值S包括了一系列关于HDF文件信息的字段,如文件名(Filename)、属性(Attributes)、虚拟组(Vgroup)、科学数据集(SDS)等。3)使用MATLAB命令行接口MATLAB用一个单独的低级函数hdfsd来代替HDF库函数中的一系列应用程序接口(API)的子程序,通过给该函数的

15、第一个参数指定相应的值,就能够使用相当于HDF API不同子程序的功能。一般使用hdfsd函数读取HDF文件的流程为:打开HDF文件;获得文件及数据集信息;选取数据集;从所选数据集中读数据;关闭数据集,关闭文件。部分hdfsd函数能够实现的数据读取功能及其对应参数值如表2所示。hdfsd函数的功能较为强大,基本可以实现对于HDF文件的信息获取、数据读取、写入数据等各类处理功能。一般使用MATLAB对HDF文件进行读写操作常使用hdfsd这一函数,但是前提是需要熟悉这一函数的所有用法。4)使用高级输入函数hdfread函数hdfread的功能是提取HDF或者HDF-EOS文件的数据。由于这个函数

16、隐藏了HDF库中规定的低级函数的许多操作细节,将打开文件、选取数据集、读取数据、关闭文件等一系列过程都包括了,所以使用起来非常简单。其读取数据集数据的功能语法为:data = hdfread(filename, dataset)data返回指定数据集中的所有数据,filename为HDF文件的名称,dataset为数据集的名称。函数hdfread还有其它的一些功能,比如读取选定范围的数据、读取图像数据等等,这里就不一一介绍。可以通过使用MATLAB自带的帮助文档,就能很容易知道该函数的其他功能。一般而言,仅仅是以简单的提取数据为目的,使用hdfread函数是一个简单实用的好方法。表2函数hdf

17、sd的部分语法及其功能参数值函数语法函数功能startsd_id= hdfsd(start,filename,read)打开HDF文件fileinfondatasets,nglobal_attr,status= hdfsd(fileinfo,sd_id)获得文件信息selectsds_id=hdfsd(select,sd_id,sds_idx)选择数据集readdatadata,status=hdfsd(readdata,sds_id,ds_start,de_stride,ds_edges)从对应数据集读取数据readattrattr, status = hdfsd(readattr, sd_

18、id(sds_id), id_idx(sds_idx)读其对应值的属性enddaccessstat=hdfsd(endaccess,sds_id)关闭数据集endstat=hdfsd(end,sd_id)关闭文件4 利用MATLAB读取HDF格式数据的应用实例4.1 单个文件的数据读取所读取数据为NASA的海洋水色卫星遥感专用处理软件SeaDAS7的辅助气象数据(来自NCEP数据),文件名为“S2009221906_NCEP.MET.hdf”,从中读取世界时为2009年8月7日06时,范围是北纬10度至40度、东经105度至140度的海平面气压数据。利用MATLAB读取该HDF文件的步骤如下:

19、(a)利用HDF Import Tool打开HDF文件。运行MATLAB,在命令窗口中输入:filename=S200921906_NCEP.MET.hdf;h=hdftool(filename)打开所要读取的HDF文件。(b)获取该HDF文件的相关信息。通HDF Import Tool可看到该文件包括经向风速(m_wind)、纬向风速(z_wind)、海平面气压(press)、相对湿度(rel_hum)、可降水量(p_water)等10个数据集。从中可知道所要读取的海平面气压数据的数据集名称为press,数据集为二维矩阵,大小是181360,即表示该数据集为1*1的格点数据。(c)使用函数h

20、dfread读取数据。在命令窗口中输入:P=hdfread(filename,press,Index,50,285,1,1,31,36);把北纬10-40、东经105-140的气压数据从HDF文件中读取出来,保存为变量P。(d)将提取数据保存为ASCII文件,关闭HDF文件。在命令窗口中输入:dlmwrite(P.txt,P);dispose(h);函数dlmwrite功能是将矩阵转为ASCII文件储存,即提取的HDF格式数据转化为ASCII格式存储。最后关闭之前HDF Import Tool打开的HDF文件。此时的文件P.txt里面包含了所要提取的数据,可以对其进行绘图等进一步处理。4.2

21、多个文件的批量处理所读取的数据为:时间2009年8月6日7日,范围北纬10度至40度、东经105度至140度的海平面气压数据,并且使用GrASD软件将这些数据绘制成海平面的气压场图像。(a)通过编写M文件来做批量读取。所编的M文件程序为:S=S2009; date=; %date为保存所有数据的矩阵;for day=218:220D=int2str(day);for time=0:6:18 T=int2str(time); if time10 T=strcat(0,T); endfile=strcat(S,D,T,_NCEP.MET.hdf); %以时间信息来确定文件名; P=hdfread(

22、file,press,Index,50,285,1,1,31,36); P=P;%将每个时次的数据提取出来,并为了与GrASD的数据格式相适应而做转置处理;date=date P;endendfid=fopen(dat.grd,w);c=fwrite(fid,date,single);fclose(fid) %将数据保存为二进制格式存放。(b)利用GrASD软件进行绘图。所绘制的部分图像如图1所示,这些图像表示的是09年08号台风莫拉克活动时期的海平面气压状况。图1(a)为北京时间8月6日08时,此时台风中心位于台湾岛以东洋面;图1(b)时间为7日08时,此时台风已经逼近台湾岛;图1(c)时间

23、为8日08时,此时台风开始登陆台湾岛。5 结论以上的实例表明,利用MATLAB实现HDF文件数据的读取极为简单和高效。这一读取方法非常适用于程序基础不高或者非专业的人员使用。同时对于HDF文件的操作直观,也可以节省大量读取HDF文件的时间,不必把时间花在库函数的配置之上。而且,MATLAB本身就具备了强大的计算和绘图能力,能够通过其他方法对HDF文件数据进行进一步的处理分析。图1海平面气压图(a)为北京时间8月6日08时,台风中心位于台湾岛以东洋面;(b)为北京时间7日08时,台风已逼近台湾岛;图(c)为北京时间8日08时,台风开始登陆台湾岛。)参考文献1 http:/www.hdfgroup

24、.org/2景毅刚,李登科,张树誉. HDF-EOS数据格式及其数据导入. 气象科技,2005,33(3):278-288.3HDF分层数据格式和IDL交互式数据语言. 国家气象信息中国心2006年度科技年会论文集. 2007. 1-12.4方庆文,潘永地,郑峰等. 利用GrADS读取NCEP再分析资料格点数据. 贵州气象,2004,5(28):34-36.5 http:/www.ncsa.illinois.edu/6陈林,牛生杰,仲凌志. Matlab对基于HDF格式的MODIS 1B数据的提取方法与实现. 气象科学,2006,26(6):676-681.7 http:/oceancolor.gsfc.nasa.gov/seadas/

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!