强对流活动通常会伴随降水、降雹和龙卷风等现象,气象雷达常用于探测上述天气现象,并可以根据雷达观测数据采用外推等方法进行短临预报。
对于科学研究和天气预报来说非常重要。
气象雷达观测所产生的数据通常是二进制格式,需要根据对应的数据说明文档进行解码,然后生成雷达产品。
目前我国已经布设了较为密集的气象雷达观测网,针对不同的地区特点选择了不同波段雷达[1]。
用于处理气象雷达数据的Python库相对较多,比如PyART、wradlib、PyCINRAD等。
PyART和wradlib可以处理多种格式的雷达数据,但主要格式均为美国天气雷达数据格式。这两个库均提供了雷达数据的校正功能,此外wradlib还可以根据雷达回波进行粒子识别和分类,还可以进行降雨估计及结果调整。
PyCINRAD为国内开发者利用Python开发的用于处理国内常见气象雷达格式的开源库,目前实现了数据处理和可视化功能。
PyART和wradlib的用户较多,而且不少额外的雷达产品库(比如雷达风场反演、湍流的检测评估等)都提供了相应的接口直接处理PyART的输出对象。
为了更好的利用Python的气象雷达生态库,添加了国内常见的雷达数据格式处理接口到PyART[2]中。目前已经实现了SA波段多普勒雷达和部分C波段双偏振多普勒雷达数据的处理接口。
双偏振雷达和普通多普勒雷达的区别在于:双偏振雷达可以在水平和垂直方向上发送和接收脉冲信号,而普通多普勒雷达仅能在水平方向上发送和接收脉冲信号。
SA雷达基数据存储结构较为简单,只需要根据格式说明文档进行顺序解码即可,具体的解码细节参考:pyart.io.sband_radar
。
以下为使用PyART处理SA雷达数据的示例:
import matplotlib.pyplot as plt
import pyart
from pyart.io.sband_archive import read_sband_archive
filename = 'Z_RADR_I_Z9250_20190409022800_O_DOR_SA_CAP.bin'
sradar = read_sband_archive(filename)
fig, ax = plt.subplots(figsize=(12, 9))
srdisplay = pyart.graph.radardisplay.RadarDisplay(sradar)
srdisplay.plot_ppi('reflectivity', 0, vmin=0, vmax=70)
fig.savefig('sa_radar.png', dpi=300, bbox_inches='tight')
0.5度仰角雷达反射率
相比于S波段雷达而言,C波段双偏振多普勒雷达具有不少优点,比如:
•在识别目标物的大小、形状和种类时具有更好的表现;•在降水估测方面具有更高的准确率;•能够区分强降雨、冰雹、雪和雨夹雪•改进了非气象回波的探测,比如地物阻挡、鸟群、龙卷带到空中的物体等;•飞机结冰条件的探测;•融化层(bright band)的识别等
由于双偏振雷达的观测量增多,其数据存储结构相对SA雷达而言也较为复杂,因此在处理起来相对SA雷达麻烦一些。关于C波段双偏振雷达的数据的具体解码细节可查看pyart.io.C98DRadFile
。
以下为使用PyART处理C波段双偏振雷达示例:
from pyart.io.c98d_archive import c98dfile_archive
cradar = c98dfile_archive('NUIST.20140928.070704.AR2')
cdisplay = pyart.graph.RadarDisplay(cradar)
fig = plt.figure(figsize=(12, 9))
# plot super resolution reflectivity
ax = fig.add_subplot(111)
cdisplay.plot('dBZ', 0, title='C-band WSR-98D Radar Reflectivity',
vmin=0, vmax=70, colorbar_label='reflectivity factor(dBZ)', ax=ax)
fig.savefig('dual_pol.png', dpi=300, bbox_inches='tight')
双偏振多普勒雷达反射率
Pyhton库中提供了多个基于气象雷达径向风的风场反演开源库,比如SingleDop、MultiDop、PyDDA等。SingleDop主要是针对单多普勒雷达的风场反演,MultiDop和PyDDA是基于多个多普勒雷达的风场反演工具。
上述三个库均可以和PyART无缝衔接,无需再进行过多的处理。以下以SingleDop反演SA雷达风场为例:
import singledop
wind = singledop.SingleDoppler2D(radar=sradar,
grid_spacing=0.25,
L=1,
sweep_number=1,
name_vr='velocity',
thin_factor=[4, 4],
grid_edge=120,
sigma=1
)
swdisplay = singledop.AnalysisDisplay(wind)
fig, ax = plt.subplots(figsize=(9, 9))
swdisplay.plot_velocity_vectors(ax=ax, legend=10)
ax.set_xlim([-100, 100])
ax.set_ylim([-100, 100])
fig.savefig('sa_wind.png', dpi=300, bbox_inches='tight')
SA反演风速
由于没有其他格式雷达数据的测试数据和说明文档,因此,目前仅支持SA和WSR-98D雷达数据的解码。
与PyDDA和PyTDA库的兼容还需要进行一些调整和测试。
关于SA波段和上述C波段WSR-98D雷达数据的说明文档可直接下载查看[3]
后台回复 pyart 获取完整示例代码和测试文件。完整示例代码为jupyter notebook,包含了反射率和径向速度的处理及风场反演,其中包含了一些推送中未提及的细节。