眭超亞, 唐毅謙, 羅正華, 曹文繼
(1.成都大學 信息科學與工程學院, 四川 成都 610106; 2.成都大學 機械工程學院, 四川 成都 610106)
氣象雷達的實時測量包含了大量數據,必須通過相應的處理才能獲得有用的信息.在氣象雷達的數據處理前端,原始測量的電壓數據必須通過數字信號處理算法,將其轉換成對應時刻的頻譜;而數據處理的后端獲得原始數據后,必須根據前期已知的情況對數據進行修正與控制,然后,利用對應的相關算法來獲取風速、風向、云的類型及降雨量的大小等氣象參數.氣象雷達數據的處理、校正與分析涵蓋了廣泛的計算科學領域.氣象雷達在采集數據的同時也完成了一定的數據預處理工作,后端的服務器軟件對大量的數據進行處理和分析.在氣象雷達持續提供大量數據與信息的情況下,擁有靈活可擴展的后端處理軟件就顯得十分重要.該后端軟件需要滿足不同類型用戶的需求,包括從基本的數據可視化到復雜數據處理算法的開發.理想情況下,該軟件對常規數據可視化處理十分方便,同時,可以對開發者提供更強大的可擴展功能.
Py-ART是一個可對氣象雷達數據進行讀取、可視化、校準和分析的軟件包.Py-ART開始僅僅是為了滿足大氣輻射測量氣候研究機構的使用需求,目前,Py-ART已經發展成為一個基于Python的氣象雷達數據通用處理框架.該軟件包建立在包括NumPy、SciPy、Matplotlib等強大的科學計算庫之上,同時,Py-ART可以利用Cython與C語言編寫的雷達數據處理庫進行交互,加速特定算法對計算速度的要求.
Py-ART是一個基于Python的雷達數據處理軟件包,該軟件包的整體架構如圖1所示.

圖1 Py-ART整體框架
1)pyart.core.該模塊主要包含Radar和Grid 2個子類,是整個軟件的基礎核心.在從天氣雷達的原始數據中提取出海拔、方位角、距離坐標等有用信息的過程中,Radar和Grid 2個對象貫穿始終.Radar類使用不同的格式將雷達數據存儲在內存中,其具體格式由磁盤上雷達數據的存儲格式所決定,一般為CF/Radial格式[1].該模塊還包含了對雷達數據進行增加、修改與可視化等數據處理的功能函數.
2)pyart.io.該模塊能識別常見的雷達數據文件格式,并將其讀取到Radar和Grid對象中,方便后續的數據處理.同時,該模塊能將Radar和Grid對象處理完成后的數據以NetCDF格式文件寫入磁盤中.與該模塊相比,該軟件包的其他子程序所支持的雷達數據格式要少一些.
3)pyart.correct.該模塊包含修正雷達數據的各種算法.具體包括:利用極化方式進行數據的衰減校準[2];利用線性規劃進行相位修正[3];消除數據中的多普勒頻移.其中,用于消除多普勒頻移的算法具體又包括FourDD算法、多相位解纏等[4-5].
4)pyart.graph.該模塊包含雷達數據可視化的類和功能函數.RadarDisplay類可繪制氣象雷達以平面位置顯示(Plan position indicator,PPI)或距離高度顯示(Range-height indicator,RHI)掃描方式獲取的數據.RadarMapDisplay或GridMapDisplay類可將從PPI、RHI掃描方式或笛卡爾坐標獲取的數據在地圖上進行匹配并可視化.同時,該模塊還包含了RadarDisplay_Airborne類,該類可用于機載雷達數據的可視化,通過不同的顏色來標識不同時刻機載雷達獲取的數據.
5)pyart.map.該模塊包含了將一個或多個雷達數據映射到笛卡爾坐標系的功能函數.在相應精度要求范圍內,該函數可選擇Cressman[6]或Barnes[7]提出的不同算法對坐標系中的雷達數據進行插值.
6)pyart.retrieve.該模塊可檢索多個雷達數據之間的相關信息,包括微分相位、根據反射率計算出的信噪比、圓形去極化比率與降水率估計值等.
7)pyart.filters.該模塊在收到原始數據后,將不需要的數據進行過濾,以提高數據處理的效率.
Py-ART基礎功能強大,已擁有了畫圖、坐標轉換與數據存儲等常見功能.Py-ART是基于Python的,本研究的實驗環境基于Linux系統,使用Anaconda的Jupyter Notebook來完成.
Py-ART擁有強大的畫圖功能,能快速創建高質量的雷達時刻圖,可支持PPI和RHI等數據格式的顯示.
1)PPI.雷達固定仰角,天線以全方位掃描的方式獲取數據,然后以雷達站為中心建立極坐標,采用不同顏色來表示數據的大小和方向,如圖2所示.
實現代碼:
import matplotlib.pyplot as plt
import pyart
filename = ‘XSW110520105408.RAW7HHF'
//使用RadarDisplay創建繪圖
radar = pyart.io.read-rsl(filename)
display = pyart.graph.RadarDisplay(radar)
fig = plt.figure()
ax = fig.add-subplot(111)
display.plot('reflectivity',0, vmin=-32, vmax=64)
display.plot-range-rings([10, 20, 30, 40])
display.plot-cross-hair(5)
plt.show()
圖2平面位置顯示(PPI)
2)RHI.雷達固定方位角,天線通過俯仰掃描的探測方式獲得數據,然后以雷達為坐標原點建立極坐標,用不同色標來表示數據的大小和方向.此掃描方式可用于監測強對流天氣系統中經常會出現的某些強度回波分布形態,如圖3所示.
實現代碼:
import matplotlib.pyplot as plt
import pyart
import netCDF4
filename = ‘XSW110520113537.RAW7HHL'
# 使用RadarDisplay創建繪圖
radar = pyart.io.read-rsl(filename)
display = pyart.graph.RadarDisplay(radar)
fig = plt.figure(figsize=[10, 4])
ax = fig.add-subplot(111)
instrument-name=radar.metadata[‘instrument
name'].decode(‘utf-8')
time-start=netCDF4.num2date(radar.time[‘data'] [0], radar.
time [‘units'])
time-text = ‘ ' + time-start.isoformat() + ‘Z '
azimuth = radar.fixed-angle [‘data'] [0]
title = ‘RHI ' + instrument-name + time-text + Azimuth %.
2f % (azimuth)
display.plot(‘reflectivity', 0, vmin=-32, vmax=64, title=title,
colorbar-flag=False, ax=ax)
display.set-limits(ylim=[0, 17])
cax = fig.add-axes([.9, .1, 0.02, .8])
colorbar-label = ‘Eq refl fact (dBz)'
display.plot-colorbar(fig=fig,cax=cax,label=colo rbar-label)
plt.show()

圖3距離高度顯示(RHI)
雷達通常以天線坐標形式采集數據,但天線坐標形式的數據不利于數據處理.Py-ART將從雷達獲取的數據映射到笛卡爾網格中,能有效提高數據處理能力.Py-ART使用最近鄰距離加權插值對來自一個或多個雷達不同時刻的數據進行網格化映射,然后將生成的數據存儲在Grid對象中.圖4是將2個雷達數據映射到笛卡爾網格中的實現.
核心代碼:
import pyart
# 讀取2個雷達的數據
radar-sw=yart.io.read-cfradial(‘swx-20120520-0641.nc')
radar-se=pyart.io.read-cfradial(‘sex-20120520-0641.nc')
# 執行笛卡爾映射
grid=pyart.map.grid-from-radars((radar-se,radar-sw),
grid-shape=(1,201,201),
grid-limits=((1000,1000),(-50000,40000),(-60000,
40000)),
grid-origin = (36.57861, -97.363611),
fields=‘corrected-reflectivity-horizontal',
max-refl=100.)

圖4雷達映射
Py-ART包含了多種用于雷達數據處理的程序,同時,在此基礎上,可快速開發新型數據處理算法.
基于Z-PHI的衰減校正過程如圖5所示.
核心代碼:
import pyart
//讀取數據
radar=pyart.io.read-cfradial('sgpcsaprsurcmacI7.c0.2011020.
095101.nc')
//執行衰減校正
spec-at,cor-z=pyart.correct.calculate-attenuation(radar, 0)
radar.fields[‘specific-attenuation']=spec-at
radar.fields[‘corrected-reflectivity-horizonta']=
cor-z

圖5基于Z-PHI的衰減校正
圖6描述了線性規劃相位處理的過程.
核心代碼:
import pyart
radar = pyart.io.read-mdv(‘095636.mdv')
//使用線性規劃進行相位校正
phidp, kdp = pyart.correct.phase-proc-lp(radar, 0.0,
debug=True)
radar.add-field('corrected-differential-phase',
phidp)
radar.add-field(‘corrected-specific-diff-phase', kdp)

圖6線性規劃相位處理
圖7給出了FourDD算法退除多普勒速度的處理過程.
核心代碼:
import matplotlib.pyplot as plt
import netCDF4
import pyart
SOND-NAME=‘sgpinterpolatedsondeC1.c1.201 10510.000000.cdf'
RADAR-NAME = ‘095636.mdv'
# 讀取數據
radar = pyart.io.read-mdv(RADAR-NAME)
dt,profile=pyart.io.read-arm-sonde-vap(SOND-NAME,
radar=radar)
#設置濾波器閾值
gatefilter = pyart.filters.GateFilter(radar)
gatefilter.exclude-transition()
gatefilter.exclude-invalid(‘velocity')
gatefilter.exclude-invalid(‘reflectivity')
gatefilter.exclude-outside(‘reflectivity', 0, 80)
# 濾值處理
dealias-data = pyart.correct.dealias-fourdd
(radar,sonde-profile=profile, gatefilter=gatefilter)
radar.add-field(‘corrected-velocity', dealias-data)

圖7 FourDD算法退除多普勒速度
Py-ART是一個基于Python科學計算的軟件包,能夠實現不同格式雷達數據可視化、數據校正與數據分析等功能.Py-ART提供了一個通用的氣象雷達數據處理框架,可以實現各種復雜的一體化數據處理與分析.Py-ART可用于前沿理論的研究,在現有算法基礎上,用于快速改進算法、提高算法性能或者針對特定場景開發驗證新的算法.同時,對工程實踐領域,集成Py-ART到實際應用系統中,可以降低開發復雜度,縮短開發周期,并提高成功率.