所在的位置: Web开发 >> PHP >> MATLAB简单粗暴教程六MAT

MATLAB简单粗暴教程六MAT

写在前面

写matlab教程,我有思想准备,是要触及一些人的利益,是会触及一些人的利益,是会有不同的观点和看法的。而且,也想写matlab教程的这些人社会联系还蛮广泛的,是有舆论能力的。我敢于写matlab教程,也就是说,像古人说的:“苟利国家生死以,岂因祸福避趋之”,就是要有这种精神!在此呢,也有不少人给气象家园泼脏水,包括给我本人给我朋友泼脏水,甚至说我是个妹子,一派胡言!我感到非常气愤,一派胡言!我就是个汉子,几十年就是这么下来的!

当然,这都是吐槽一下。对于资瓷我的童鞋们,我表示十分感谢。正是因为你们的资瓷,我才一直坚持写下来。说句实话,我本人的姿势水平其实也是感到拙计,还需要学习一个。闻道有先后,术业有专攻。有很多读者比我不知道高到哪里去了,希望大家能够和我谈笑风生,就自己擅长的方面对我进行帮助,同大家一起进行分享。鄙人的联系方式都在文末,希望专家们可以告诉我一些人生的经验,谢谢大家!

言归正传

Grib码是WMO推荐使用的三种表格驱动编码之一(其余两种是BUFR和CREX)。GRIB码是一种与计算机硬件无关的压缩二进制编码,主要用来表示数值天气分析和预报的产品资料。现行的GRIB码版本有GRIB1和GRIB2两种版本。与ASCII编码的文件不同,二进制编码的文件直接打开就是乱码,如同天书一般。因此GRIB码不适合人工直接解读(给我读我也读不懂…),而适合计算机解译。我知道肯定有人会问:没图你说个兰溪。于是我就贴个图好了…

1.GRIB1

GRIB1资料说起来还比较复杂的。一般分为六大段:

0段:指示段(“GRIB”,资料长度,GRIB码版本号)

1段:产品定义段(段长,编码的分析或预报产品的标识号)

2段:(网格描述段)(段长,网格的几何形状(必要时))

3段:(位图段)(段长,每个格点一位,按照适当顺序存放,比特位的取值指明对应格点的数值十分被省略)

4段:二进制数据段(段长和数据值)

5段:(结束段)

至于为什么从0开始,我想肯定是他们用C用的顺手了…

2.GRIB2

GRIB2资料是GRIB1资料的进化版,从六段变成了九段(还是从0段开始的……)。而且,与八股文似的GRIB1不同,GRIB允许将2-7段、3-7段或者-7段进行重复。在重复的段序列中,应包含该序列的所有段,并按照上述段号顺序排列。不重复的段在再定义之前一直有效。

在GRIB编码的资料中,资料长度和段长都是以8位组来表示的。其中,0段是8个八位组,5段是个。其余均是可变的,各段前三个八位组表示该段的段长。在不同的数据段中,八位组的序号表示不同的内容。只要将对应序列的八位组翻译成ASCII码,就可愉快的读取文件内容了。当然,这个具体的数据结构嘛…估计能写一本小册子了。不同的位置,不同的数据类型,不同的数值都被赋予了不同的意义,不知道多到哪里去了。而且还有各种压缩算法需要将二进制数字还原成十进制数字,包括谱资料等等。

写到这里,大家可能感觉其实说复杂也并不复杂。只要结合数据结构,按照二进制的规则来读取GRIB编码文件,结合对应压缩算法的解压缩算法就可以读取GRIB编码文件了。事实上,大家经常用的rad_grib也是这么做的,重要的部分就是frad和fsk。当然,这种事情总是说起来简单,做起来异常麻烦的。自己重头写起也是很麻烦的,一般我们都使用rad_grib和rad_grib2两个程序。当然,猫同学也推荐了一个很好的程序,地址我附在文后了。

3.rad_grib用法简介

关于工具箱的安装方法,我就不说了,在文件夹里面的Radm都有说明。安装过后,我们就可以使用了。

举个栗子:

filnam=fnl__12_00;

%grib1格式的文件名,改文件为NCEP的FNL再分析资料

data0=rad_grib(filnam,1,ScrnDiag,0);

%用rad_grib函数打开文件的函数,

%最主要的形式rad_grib(gribnam,irc);

%输入参数的前两个为必须的,filnam为文件名,第二个为指定的grib记录号

%irc为-1时,默认返回所有的记录,例如dd=rad_grib(filnam,-1);

%则dd为一个结构数据,里面包含grib文件的记录信息,用户可以选择自己使用的记录号

%来读取相应的数据

data1=data0(1).fltarray;

%将data0中的数据导出

data1=rshap(data1,[]);

data1=data1;

%根据数据经纬度的排列方式,进行重新变形,以适合气象学上应用的形式

酱紫,data1就被读出来了。rad_grib2的使用也是类似的啦~

一般来讲,fnl文件包含的数据类型如下:

1PRES=Prssur[Pa]气压

2HGT=Gopotntialhight[gpm]位势高度

3TMP=Tmp.[K]温度

VVEL=Prssurvrticalvlocity[Pa/s]气压垂直速度

5RH=Rlativhumidity[%]相对湿度

6ABSV=Absolutvorticity[/s]绝对涡度

7O3MR=Ozonmixingratio[kg/kg]臭氧混合比

8CLWMR=Cloudwatr[kg/kg]云水

95WAVH=5-wavgopotntialhight[gpm]

10UGRD=uwind[m/s]纬向风

11VGRD=vwind[m/s]经向风

12SPFH=Spcifichumidity[kg/kg]比湿

13PWAT=Prcipitablwatr[kg/m^2]降雨量

1VWSH=Vrticalspdshar[1/s]垂向风切变

15LFTX=Surfacliftdindx[K]地面举升指数

16CAPE=ConvctivAvail.Pot.Enrgy[J/kg]对流可用位能

17CIN=Convctivinhibition[J/kg]对流抑制能

18LFTX=Bst(-layr)liftdindx[K]

19PRMSL=PrssurrducdtoMSL[Pa]

20POT=Potntialtmp.[K]位温

21TOZNE=Totalozon[Dobson]总臭氧

22CWAT=Cloudwatr[kg/m^2]云水

23SOILW=Volumtricsoilmoistur[fraction]

2WEASD=Accum.snow[kg/m^2]雪深

25LAND=Landcovr(land=1;sa=0)[fraction]土地标示

26ICEC=Icconcntration(ic=1;noic=0)[fraction]冰密集度

27HPBL=Plantaryboundarylayrhight行星边界层高度

28TCDC=Totalcloudcovr[%]总云水

29GPA=Gopotntialhightanomaly[gpm]位势高度异常

WAVA=5-wavgopot.hightanomaly[gpm]

具体关于函数的使用问题,函数自带的hlp里面说的比较清楚,我再重复也没什么意思了。

论坛的

⑤0/tuu号童鞋指出在极射投影的情况下,rad_grib会出现错误,需要将tabl6.m中的cas5修改为PolarStrographic,并重新编译mxBDS_unpack_mx5.c就OK了(需要删除原有rad_grib文件夹,重新copy)。

Rad_grib的一个下载







































鍖椾含鏈夋不鐧界櫆椋庣殑鍚?
鍖椾含娌荤枟鐧界櫆椋庣殑浠锋牸



转载请注明:http://www.guyukameng.com/php/2205.html

  • 上一篇文章:
  •   
  • 下一篇文章: