利用MATLAB讀取HDF格式數據的實用方法.doc_第1頁
利用MATLAB讀取HDF格式數據的實用方法.doc_第2頁
利用MATLAB讀取HDF格式數據的實用方法.doc_第3頁
利用MATLAB讀取HDF格式數據的實用方法.doc_第4頁
免費預覽已結束,剩余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 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 widely-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 given, 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, MATLAB, Scientific Data1 引 言科學研究需要對大量的數據進行處理,而這些科學數據有著很多不同的儲存形式和標準格式。HDF是美國國家高級計算機應用中心(NCSA)為了滿足各種領域研究需要而開發出的一種能高效存儲和分發科學數據的新型數據格式1。HDF的數據格式是一種分層式數據管理結構,是一個能夠自我描述、多目標、用于科學數據存儲和分發的數據格式。簡單來說,HDF格式文件是面向對象的自描述文件,它使得在不同的計算機系統中分享數據成為可能。HDF文件格式在科學數據的共享上有很大的優勢,其優勢在于:跨平臺性,允許人們在無須經過格式轉換,便可在不同操作系統上使用;自我描述性,一個HDF文件可包含所以關于該數據的信息,不需要附帶任何的描述性文件;多樣性,可以儲存并處理大量數據,并且一個文件中可以包含多種類型數據;靈活性和可擴展性。正是因為這些優點,HDF格式文件被廣泛地運用于科學數據共享,是目前國際上數據共享應用較廣泛的文件格式2。正確高效地讀取HDF文件里面的數據,是共享HDF格式科學數據的前提。目前比較常用的讀取HDF文件的方式是使用IDL3、C和Fortran等傳統語言工具,以及GrADS等繪圖軟件4也可以實現HDF文件的讀取。但是這些讀取方式對于非專業人員來說都有些難度,不容易在短期內快速掌握,而利用MATLAB讀取HDF格式數據則相對簡單高效。2 幾種HDF格式數據讀取方式比較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)網站可下載到用于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瀏覽軟件都以目錄樹形式來展開顯示HDF文件的分層數據,主要功能是查看HDF文件屬性、數據等內容。2.5 不同方法的優缺點上面讀取HDF格式數據的方式各有其優點,但也存在不足之處,它們的優缺點比較如表1所示。盡管利用以上讀取HDF文件方式有其各自的優勢,但是除了使用瀏覽軟件外,其他方式都首先要求使用者本身能夠熟練運用該語言。這使得非專業人員如果想要讀取HDF文件里面的某些數據,將不得不花費大量的時間學習編寫程序代碼及使用專業軟件。而使用瀏覽軟件雖然能看到HDF文件里面的內容,卻無法實現對數據的批量讀取、格式轉換等進一步的處理。表1不同方法對于HDF文件讀取的優缺點提取方法優點缺點IDL不需要編寫大量的傳統程序就可以直接研究數據。需要配置專門的HDF文件的庫函數,以及編寫特定的程序。這就要求使用者本身要對語言程序的使用有一定的基礎,具備一定的編程水平。C、Fortran適用于與大型程序和批量數據的處理,將HDF讀取作為程序的一部分。GrADS無需HDF庫函數的支持就可以處理HDF文件,并且有很好的繪圖功能,可將數據直接繪制成圖像。使用者的范圍較小,一般僅限于氣象方面人員。讀取HDF文件的過程較為繁瑣,軟件本身也不容易掌握使用。瀏覽軟件簡單易用,不用要求有任何的編程水平,能夠很直觀地查看文件數據。只能顯示文件內容,難以實現對數據的提取,不能進行批量化處理。3 利用MATLAB讀取HDF格式文件3.1 MATLAB讀取HDF格式文件的優勢MATLAB是矩陣實驗室(Matrix Laboratory)的簡稱,是美國MathWorks公司出品的商業數學軟件,用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境。該軟件有三大特點,一是功能強大,具有數值計算和符號計算、計算結果和編程可視化、數學和文字統一處理、離線和在線計算等功能;二是界面友善、語言自然,MATLAB以復數處理作為計算單元,指令表達與標準教科書的數學表達式相近;三是開放性強,其本身就擁有了30多個應用工具箱,而世界上超過200家公司開發出與MATLAB兼容的第三方產品,這些產品向用戶提供更多的工具箱、模塊集、與其他商業產品的接口等。正是由于MATLAB的各種優勢和特點,已經成為研究和解決各種具體工程問題的一種標準軟件。MATLAB里面提供了一組HDF應用程序接口及一系列的函數,這使得利用MATLAB打開、處理HDF文件非常方便6。利用MATLAB實現對于HDF格式數據的讀取優勢在于:使用MATLAB的人員范圍廣泛;簡單易學,可以輕松運用;不需要進行大量編程工作,只要幾個簡單函數命令就能夠實現對數據的提?。粡姶蟮臄抵颠\算和可視化功能,具有對數據進行二次開發的能力。3.2 MATLAB讀取HDF文件方法1)使用 HDF Import ToolHDF Import Tool是MATLAB自帶的一個可視化的HDF文件輸入工具,主要用于HDF和HDF-EOS文件的瀏覽和輸入數據。在MATLAB的命令窗口輸入:hdftool,即可打HDF Import Tool;使用該工具可以打開HDF文件,可以從中看到HDF文件的信息。選定一個要打開的數據集,便可以看到該數據集的詳細信息,點擊Import即可把選擇的數據輸入到MATLAB工作區。或者通過在命令窗口輸入:hdftool(example.hdf),也可打開在MATLAB路徑下文件名為example.hdf的HDF文件。由于是可視化的工具,所以能夠很直觀的顯示HDF文件,而且將數據輸出的操作簡單易行。2)使用信息讀取函數hdfinfo通過在MATLAB中使用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)的子程序,通過給該函數的第一個參數指定相應的值,就能夠使用相當于HDF API不同子程序的功能。一般使用hdfsd函數讀取HDF文件的流程為:打開HDF文件;獲得文件及數據集信息;選取數據集;從所選數據集中讀數據;關閉數據集,關閉文件。部分hdfsd函數能夠實現的數據讀取功能及其對應參數值如表2所示。hdfsd函數的功能較為強大,基本可以實現對于HDF文件的信息獲取、數據讀取、寫入數據等各類處理功能。一般使用MATLAB對HDF文件進行讀寫操作常使用hdfsd這一函數,但是前提是需要熟悉這一函數的所有用法。4)使用高級輸入函數hdfread函數hdfread的功能是提取HDF或者HDF-EOS文件的數據。由于這個函數隱藏了HDF庫中規定的低級函數的許多操作細節,將打開文件、選取數據集、讀取數據、關閉文件等一系列過程都包括了,所以使用起來非常簡單。其讀取數據集數據的功能語法為:data = hdfread(filename, dataset)data返回指定數據集中的所有數據,filename為HDF文件的名稱,dataset為數據集的名稱。函數hdfread還有其它的一些功能,比如讀取選定范圍的數據、讀取圖像數據等等,這里就不一一介紹??梢酝ㄟ^使用MATLAB自帶的幫助文檔,就能很容易知道該函數的其他功能。一般而言,僅僅是以簡單的提取數據為目的,使用hdfread函數是一個簡單實用的好方法。表2函數hdfsd的部分語法及其功能參數值函數語法函數功能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_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文件的步驟如下:(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)使用函數hdfread讀取數據。在命令窗口中輸入: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 多個文件的批量處理所讀取的數據為:時間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(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所示

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論