- 积分
- 9
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2018-4-24
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一个啥都不会的科研小白,最近想做一些雨滴谱数据的分析,在解码雨滴谱BIN文件时遭遇了拦路虎,在前辈的指点下,摸摸索索,貌似是解码成功了,现将解码过程中的心得记录下来,供各位未来首席参考。
1、编程:首先个人是个编程废物,根本不会写程序,所以现在的AI真的帮了大忙,把需求喂给AI,让AI写程序并且标注详细说明,磕磕绊绊,反复调教AI,终于完成了解码和分析。过程很痛苦,AI像一个听不懂话的小孩,需要很有耐心地反复敲需求,这个过程历时2个多月,终于凑合出图了。
2、解码:首先非常感谢B站上一个科研前辈的解码视频:星小Py-017:以雨滴谱为例解析BUFR数据 这个视频以雨滴谱为例解读了BIN格式的文件的编码规则,学习了这种思路,我认为理论上可以解读所有的类似形式文件,对于一个新手而言,受益匪浅。
下面我将解码雨滴谱过程中产生的笔记贴图如下。
雨滴谱格式文件 分析过程中手写笔记。
核心要义是BIN文件不是传统的字节八位组编码,而是按照比特位编码。需要按照最小的比特位进行读取。按照这个思路,根据编码格式文件的说明。
0段(指示段)应从第1个比特位,且前4个字节应为大写的“BURF”,但实际在0段(指示段)前,仍然有43个字节的表头,所以0段(指示段)是从第43*8+1=345个字节开始,累计占用8个字节。
1段(标识段)在0段(指示段)后,从第345+8*8=409个比特位开始,累计占用23个字节。因为不影响分析结果,不做过多赘述。
3段(数据描述段)在1段(标识段)后,从第409+23*8=593个比特位开始,累计占用9个字节。同样不影响分析结果,不做过多赘述。
4段(数据段)为核心字段,其中包含循环结构,且格式说明不够精确,解码需要很注意。
4段(数据段)在3段(数据描述段)后,从第593+9*8=665个比特位开始。
其中数据段段长占用24个比特位,保留字段占用8个比特位。
测站基本信息和时间即从第665+24+8=697个比特位开始。按照各内容所示的数据宽度,可以按照比特位可以读取到区站号、时间、经纬度等信息。整个测站基本信息和时间累计占用345个比特位。
天气现象雨滴谱谱图即从第697+345=1042个比特位开始,雨滴谱传感器标识占用3个比特位,雨滴谱的设备类型占用4个比特位,根据雨滴谱的设备类型分为100型与200型号,后续需要根据设备类型对应级别编号,读取雨滴直径、速度,与雨滴数量搭配,进行后续分析。
此后进入到循环结构,即所谓的延迟重复。延迟重复因子(0 31 000)在雨滴谱的设备类型之后,原始文件中没有写延迟重复因子的占用数据宽度,但实际解码中占用了1个比特位,所以我在备注中标红。之后是最核心最麻烦的一部分。
在进入正题之前,对前面字段进行一个总结,在延迟重复之前,所有内容的比特位都是固定,只有延迟重复之后的数据段宽度是根据实际有所变化,所以我将延迟重复因子之前的所有内容进行整合,表头(43字节)+0段(8字节)+1段(23字节)+3段(9字节)+4段中的数据段段长与保留字段(4字节)+4段中基本信息和时间(345BT)+4段中天气现象雨滴谱谱图里的雨滴谱传感器标识与雨滴谱的设备类型(7BT)=131字节。同样得出延迟重复因子(0 31 000)从第131*8+1=1049个比特位开始。
11个描述符的延迟重复(1 11 000)后的内容理解如下:
延迟重复因子(0 31 000)(如当日无降水,延迟重复因子置0;有降水,延迟重复因子置1),从第1049个比特位开始,占用1比特位。
时间增量(= - n分)(0 04 015)从第1049+1=1050个比特位开始,占用12个比特位,得出的二进制转化为十进制之后要加上基准值-2048,如果计算不出错,十进制应为2053,加上基准值-2048,即2053+(-2048)=5。
短时间增量(= 1分)(0 04 065)从第1050+12=1062个比特位开始,占用8个比特位,得出的二进制转化为十进制之后要加上基准值-128,理论上应为1029+(-128)=1。
7个描述符的延迟重复(1 07 000)后的内容理解如下:
延迟描述符重复因子(= n)(0 31 001),占用8个比特位,得出的数字初次为5再次为4,以此类推。
5个描述符重复n次(1 05 000)后的理解如下:
延迟描述符重复因子(= n),占用16个比特位,得出一个数字。
雨滴粒子级别编号(0 13 205),占用12个比特位,得出一个编号。最大1024,因为雨滴谱粒子级别编号最大1024。
(2 04 008)2 04 008与2 04 000之间所有要素描述符编码值前面均增加8个比特的附加字段作为质控码字段。无占用比特位,我理解为仅为解释(0 31 021),(0 13 206),以及增加质控码字段的描述。
(0 31 021)表示附加字段意义,编码值为62,表示附加字段为8个比特,从左至右,前4个比特作为省级质控码字段,后4个比特作为台站质控码字段。这里要注意了,(0 31 021)是附加字段意义占用6个比特位,即二进制为111110;又说附加字段为8个比特,从左至右,前4个比特作为省级质控码字段,后4个比特作为台站质控码字段,即在111110(62)后面,还有8个比特位的附加字段,我的解码出来为0000 0000。附加字段还占用8比特位。总体而言(0 31 021)占用了6+8=14个比特位。
雨滴粒子个数(0 13 206)占用16个比特位,得出一个数字,代表该级别雨滴的数量。
每组雨滴粒子级别+(0 31 021)+雨滴粒子个数占用12+14+16=42个比特位
5段(结束段)BUFR报文的结束标志,4个字符“7777”占用4个字节。在末尾,可以作为定位。
研究了一下这个延迟重复到底啥意思。
首先是大循环,由11个描述符的延迟重复(1 11 000)控制,如果延迟重复因子(0 31 000)置0,无降水,就没有读取后续雨滴谱数据的必要了,如果置1,有降水,则可以考虑进入中循环开启后续7个描述符的延迟重复(1 07 000), 时间增量(= - n分)且算的值为5,说明时间需向前5分钟,短时间增量(= 1分),说明每1分钟增加1次,结合平时理解,说明这个文件,包含这个时间前5分钟的数据,且1分钟采集一次,那么大循环11个描述符的延迟重复(1 11 000)要循环5次才能完全展现出这5个时次的数据。
进入中循环7个描述符的延迟重复(1 07 000),延迟描述符重复因子(= n)(0 31 001),占用8个比特位,得出的数字初次为5再次为4,以此类推。说明需要开展5次中循环。
小循环为5个描述符重复n次(1 05 000),延迟描述符重复因子(= n),说明这一时次有n组雨滴谱数据,需要小循环n次将n组雨滴谱数据展现出来。
水平有限,说的乱七八糟,表述不清请谅解。如果想要共同深入探讨,可以QQ联系:二五八零四五二五零零。
|
|