基于Python 对多普勒天气雷达基数据的解析
2022-07-14刘应桂
刘应桂
(民航广西空管分局,广西 南宁 530048)
南宁机场目前在用的CINRAD/CC 型天气雷达是新一代的C 波段多普勒雷达,由安徽四创所研制。多普勒天气雷达通过发射机发射电磁波,接收机接收从气象目标后向散射回来的电磁波的方式来探测气象目标,在接收到的回波信号中包含气象目标的回波强度、径向速度和速度谱宽等信息[1],这些信息保存在雷达的基数据中。通过解析保存的基数据,可以得到雷达探测范围内的气象目标信息,将这些信息显示出来后,产生应用价值。多普勒天气雷达是制作短时天气预报和警戒强对流天气的强有力工具[2],广泛使用于机场和气象部门。目前,雷达厂家提供的基数据识别显示软件可显示气象目标的基本信息图,但提供的功能比较固定,扩展性不强,并且不能进行基数据的二次开发应用。
本文基于Python 提供了一种对雷达基数据进行解析的方法,对雷达基数据的解析可用于基数据的二次开发应用,大大增加了可应用基数据的场景。基数据的应用场景有:当单部天气雷达因低仰角的阻挡而造成某一角度的回波缺失时,可利用其他雷达的基数据进行补全;整合多省的天气雷达基数据制作多区域的气象目标回波图;用雷达基数据结合机器学习对气象目标的移动路径进行精准趋势预测等。
1 雷达基数据结构
南宁机场的多普勒雷达基数据是一种C 语言结构型的二进制字节文件,由文件标识(12 字节)、文件头(2 048 字节)和数据记录块(其余字节)3 个部分组成[3]。文件标识记录了雷达数据的标识信息,文件头记录了雷达站的基本信息和雷达的各项参数设置情况,数据记录块则以极坐标的形式记载了气象目标的回波数据。
1.1 雷达扫描模型
天气雷达在一系列不同仰角下进行360°的方位扫描的过程被称为一次完整的体积扫描,一个仰角对应一层扫描。在每层扫描中,雷达的最大探测距离称为它的扫描半径,南宁机场雷达的扫描半径为150 km,将扫描半径进行若干等分,每一个相等的长度称为库长,一个扫描半径下库长的个数叫库数,雷达进行一层扫描时,中间包含的扫描半径个数叫径向个数,库长、库数和扫描半径三者间的关系如图1 所示。
图1 扫描模型
1.2 层参数数据结构
雷达每层扫描的参数数据结构保存在基数据的文件头中,层参数数据结构包含了雷达每层扫描的最大可测距离(扫描半径)、库长、库数、径向个数和仰角等信息,它们的结构参数如表1 所示。
表1 部分层结构参数
1.3 数据记录块
基数据的数据记录块记录了雷达回波的强度、径向速度和速度谱宽值,三者的数值以极坐标的数据格式按顺序进行分开保存,每个扫描半径下的数据分别对应着一个独立的数据记录块。数据记录块的部分数据结构如表2 所示。
表2 数据记录块的部分数据结构
其中,[n]为每层扫描时的库数。在气象目标对多普勒雷达作相对运动时,其运动速度沿雷达径向的速度为径向速度,运动速度的平均起伏为速度谱宽。
2 相关Python 库
Python 是一种开源的脚本语言,是计算机编程语言中的一种,具有上手简单、代码简洁、可读性高的特点,并且有大量可直接调用的封装库,是进行数据处理和数据分析的强有力工具。用Python 程序对雷达基数据进行解析的流程如图2 所示。
图2 Python 解析流程图
流程图中主要用到的封装库有struct 库、numpy库和matplotlib 库3 种,它们的主要作用如表3 所示。
表3 相关的Python 库
其中,Python 不能直接读取C 语言结构型的二进制字节数据,需要通过struct 库对二进制字节文件进行读取。numpy 库是进行大量数据处理和数据分析的第三方库,可用于多维的数组运算和矩阵运算,功能强大,广泛使用于科学计算领域。matplotlib 库是Python中的图形库,可以通过它来绘制直方图、扇形图、极坐标图等常见图形[4],它里面还有与图形绘制相关的颜色管理模块,可以通过颜色管理模块来设置数值与颜色的映射关系以及色标的制作。
3 解析过程与结果
解析过程以南宁机场2021-08-15T06:28 有较强降水回波时的基数据QZGNNBVT210815062815.014 为例进行说明,文件名中的ZGNN 为南宁机场的四字代码,B 为基数据标识码,V 表示体积扫描,T 代表回波强度、径向速度、速度谱宽三要素,文件名中的数字为一次体积扫描结束时的时间,后缀名014 表示天气雷达完成一个完整体积扫描的扫描层数为14 层。
3.1 关键参数读取
雷达每层扫描的主要关键参数有扫描半径、库长、库数、径向个数和回波强度值等参数,以读取第一层扫描时的数据为例,部分代码展示如下:
其中,buffer 为读取到的二进制字节数据,x 表示回波强度的字节起始位置。
3.2 数据处理
极坐标散点图的绘制需要知道每个坐标点相对坐标原点的角度和距离,由径向个数可得到每一条扫描半径的角度,由库数可得到坐标点相对原点的距离。在第一层的扫描中,其径向个数为593 条,库长可看成单位长度,库数为1 000 个,为了在一个极坐标中将第一层的每个坐标点绘制出来,需要创建3 个593 行1 000 列的数组,分别用来保存每个坐标点的角度、距离和强度值。
3.3 极坐标图绘制
用matplotlib 库绘制极坐标散点图时,回波强度的dBZ 值大小对应了每个坐标点的颜色深浅,为了对图形的颜色进行统一管理,可以对图形的色标进行自定义设置。图形绘制的部分代码展示如下:
其中,colors 中的颜色以十六进制颜色码表示,从左至右依次为:白色、淡灰色、深灰色、淡青色、青色、深青色、淡蓝色、蓝色、深蓝色、淡绿色、绿色、深绿色、淡黄色、黄色、深黄色、淡红色、红色、深红色、淡紫色、深紫色。
3.4 结果展示
图3 和图4 分别为南宁机场2021-08-15T06:28与2021-08-15T08:43 两份基数据的回波对比图。其中,左侧为厂家基数据识别显示软件解析的雷达回波强度图,右侧为本文用Python 解析基数据的回波强度图。通过与厂家的回波图对比可以发现,Python 对基数据的解析达到了比较好的效果,将气象目标的回波信息全部解析显示了出来。另外,从图中可以看到,06:28在南宁机场的西南方向有较强的块状降水回波出现,到08:43 本场上方出现了红色的降水回波,预报员和管制员可参考回波信息向航空用户提供相应的服务。
图3 06:28 时回波对比图
图4 08:43 时回波对比图
4 结语
本文通过Python 实现对南宁机场多普勒天气雷达基数据的读取和解析,较好地将基数据中保存的气象目标回波强度信息还原显示了出来,经过与厂家软件显示的回波强度图对比,两者间的差别较小。对雷达基数据的解析,有利于促进对基数据的二次开发利用,减少了利用雷达基数据进行其他气象产品开发的限制,大大增强了雷达基数据的可应用性和可扩展性。