眭超亞, 唐毅謙, 羅正華, 曹文繼
(1.成都大學(xué) 信息科學(xué)與工程學(xué)院, 四川 成都 610106; 2.成都大學(xué) 機(jī)械工程學(xué)院, 四川 成都 610106)
氣象雷達(dá)的實(shí)時(shí)測(cè)量包含了大量數(shù)據(jù),必須通過相應(yīng)的處理才能獲得有用的信息.在氣象雷達(dá)的數(shù)據(jù)處理前端,原始測(cè)量的電壓數(shù)據(jù)必須通過數(shù)字信號(hào)處理算法,將其轉(zhuǎn)換成對(duì)應(yīng)時(shí)刻的頻譜;而數(shù)據(jù)處理的后端獲得原始數(shù)據(jù)后,必須根據(jù)前期已知的情況對(duì)數(shù)據(jù)進(jìn)行修正與控制,然后,利用對(duì)應(yīng)的相關(guān)算法來獲取風(fēng)速、風(fēng)向、云的類型及降雨量的大小等氣象參數(shù).氣象雷達(dá)數(shù)據(jù)的處理、校正與分析涵蓋了廣泛的計(jì)算科學(xué)領(lǐng)域.氣象雷達(dá)在采集數(shù)據(jù)的同時(shí)也完成了一定的數(shù)據(jù)預(yù)處理工作,后端的服務(wù)器軟件對(duì)大量的數(shù)據(jù)進(jìn)行處理和分析.在氣象雷達(dá)持續(xù)提供大量數(shù)據(jù)與信息的情況下,擁有靈活可擴(kuò)展的后端處理軟件就顯得十分重要.該后端軟件需要滿足不同類型用戶的需求,包括從基本的數(shù)據(jù)可視化到復(fù)雜數(shù)據(jù)處理算法的開發(fā).理想情況下,該軟件對(duì)常規(guī)數(shù)據(jù)可視化處理十分方便,同時(shí),可以對(duì)開發(fā)者提供更強(qiáng)大的可擴(kuò)展功能.
Py-ART是一個(gè)可對(duì)氣象雷達(dá)數(shù)據(jù)進(jìn)行讀取、可視化、校準(zhǔn)和分析的軟件包.Py-ART開始僅僅是為了滿足大氣輻射測(cè)量氣候研究機(jī)構(gòu)的使用需求,目前,Py-ART已經(jīng)發(fā)展成為一個(gè)基于Python的氣象雷達(dá)數(shù)據(jù)通用處理框架.該軟件包建立在包括NumPy、SciPy、Matplotlib等強(qiáng)大的科學(xué)計(jì)算庫之上,同時(shí),Py-ART可以利用Cython與C語言編寫的雷達(dá)數(shù)據(jù)處理庫進(jìn)行交互,加速特定算法對(duì)計(jì)算速度的要求.
Py-ART是一個(gè)基于Python的雷達(dá)數(shù)據(jù)處理軟件包,該軟件包的整體架構(gòu)如圖1所示.
圖1 Py-ART整體框架
1)pyart.core.該模塊主要包含Radar和Grid 2個(gè)子類,是整個(gè)軟件的基礎(chǔ)核心.在從天氣雷達(dá)的原始數(shù)據(jù)中提取出海拔、方位角、距離坐標(biāo)等有用信息的過程中,Radar和Grid 2個(gè)對(duì)象貫穿始終.Radar類使用不同的格式將雷達(dá)數(shù)據(jù)存儲(chǔ)在內(nèi)存中,其具體格式由磁盤上雷達(dá)數(shù)據(jù)的存儲(chǔ)格式所決定,一般為CF/Radial格式[1].該模塊還包含了對(duì)雷達(dá)數(shù)據(jù)進(jìn)行增加、修改與可視化等數(shù)據(jù)處理的功能函數(shù).
2)pyart.io.該模塊能識(shí)別常見的雷達(dá)數(shù)據(jù)文件格式,并將其讀取到Radar和Grid對(duì)象中,方便后續(xù)的數(shù)據(jù)處理.同時(shí),該模塊能將Radar和Grid對(duì)象處理完成后的數(shù)據(jù)以NetCDF格式文件寫入磁盤中.與該模塊相比,該軟件包的其他子程序所支持的雷達(dá)數(shù)據(jù)格式要少一些.
3)pyart.correct.該模塊包含修正雷達(dá)數(shù)據(jù)的各種算法.具體包括:利用極化方式進(jìn)行數(shù)據(jù)的衰減校準(zhǔn)[2];利用線性規(guī)劃進(jìn)行相位修正[3];消除數(shù)據(jù)中的多普勒頻移.其中,用于消除多普勒頻移的算法具體又包括FourDD算法、多相位解纏等[4-5].
4)pyart.graph.該模塊包含雷達(dá)數(shù)據(jù)可視化的類和功能函數(shù).RadarDisplay類可繪制氣象雷達(dá)以平面位置顯示(Plan position indicator,PPI)或距離高度顯示(Range-height indicator,RHI)掃描方式獲取的數(shù)據(jù).RadarMapDisplay或GridMapDisplay類可將從PPI、RHI掃描方式或笛卡爾坐標(biāo)獲取的數(shù)據(jù)在地圖上進(jìn)行匹配并可視化.同時(shí),該模塊還包含了RadarDisplay_Airborne類,該類可用于機(jī)載雷達(dá)數(shù)據(jù)的可視化,通過不同的顏色來標(biāo)識(shí)不同時(shí)刻機(jī)載雷達(dá)獲取的數(shù)據(jù).
5)pyart.map.該模塊包含了將一個(gè)或多個(gè)雷達(dá)數(shù)據(jù)映射到笛卡爾坐標(biāo)系的功能函數(shù).在相應(yīng)精度要求范圍內(nèi),該函數(shù)可選擇Cressman[6]或Barnes[7]提出的不同算法對(duì)坐標(biāo)系中的雷達(dá)數(shù)據(jù)進(jìn)行插值.
6)pyart.retrieve.該模塊可檢索多個(gè)雷達(dá)數(shù)據(jù)之間的相關(guān)信息,包括微分相位、根據(jù)反射率計(jì)算出的信噪比、圓形去極化比率與降水率估計(jì)值等.
7)pyart.filters.該模塊在收到原始數(shù)據(jù)后,將不需要的數(shù)據(jù)進(jìn)行過濾,以提高數(shù)據(jù)處理的效率.
Py-ART基礎(chǔ)功能強(qiáng)大,已擁有了畫圖、坐標(biāo)轉(zhuǎn)換與數(shù)據(jù)存儲(chǔ)等常見功能.Py-ART是基于Python的,本研究的實(shí)驗(yàn)環(huán)境基于Linux系統(tǒng),使用Anaconda的Jupyter Notebook來完成.
Py-ART擁有強(qiáng)大的畫圖功能,能快速創(chuàng)建高質(zhì)量的雷達(dá)時(shí)刻圖,可支持PPI和RHI等數(shù)據(jù)格式的顯示.
1)PPI.雷達(dá)固定仰角,天線以全方位掃描的方式獲取數(shù)據(jù),然后以雷達(dá)站為中心建立極坐標(biāo),采用不同顏色來表示數(shù)據(jù)的大小和方向,如圖2所示.
實(shí)現(xiàn)代碼:
import matplotlib.pyplot as plt
import pyart
filename = ‘XSW110520105408.RAW7HHF'
//使用RadarDisplay創(chuàng)建繪圖
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.雷達(dá)固定方位角,天線通過俯仰掃描的探測(cè)方式獲得數(shù)據(jù),然后以雷達(dá)為坐標(biāo)原點(diǎn)建立極坐標(biāo),用不同色標(biāo)來表示數(shù)據(jù)的大小和方向.此掃描方式可用于監(jiān)測(cè)強(qiáng)對(duì)流天氣系統(tǒng)中經(jīng)常會(huì)出現(xiàn)的某些強(qiáng)度回波分布形態(tài),如圖3所示.
實(shí)現(xiàn)代碼:
import matplotlib.pyplot as plt
import pyart
import netCDF4
filename = ‘XSW110520113537.RAW7HHL'
# 使用RadarDisplay創(chuàng)建繪圖
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)
雷達(dá)通常以天線坐標(biāo)形式采集數(shù)據(jù),但天線坐標(biāo)形式的數(shù)據(jù)不利于數(shù)據(jù)處理.Py-ART將從雷達(dá)獲取的數(shù)據(jù)映射到笛卡爾網(wǎng)格中,能有效提高數(shù)據(jù)處理能力.Py-ART使用最近鄰距離加權(quán)插值對(duì)來自一個(gè)或多個(gè)雷達(dá)不同時(shí)刻的數(shù)據(jù)進(jìn)行網(wǎng)格化映射,然后將生成的數(shù)據(jù)存儲(chǔ)在Grid對(duì)象中.圖4是將2個(gè)雷達(dá)數(shù)據(jù)映射到笛卡爾網(wǎng)格中的實(shí)現(xiàn).
核心代碼:
import pyart
# 讀取2個(gè)雷達(dá)的數(shù)據(jù)
radar-sw=yart.io.read-cfradial(‘swx-20120520-0641.nc')
radar-se=pyart.io.read-cfradial(‘sex-20120520-0641.nc')
# 執(zhí)行笛卡爾映射
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雷達(dá)映射
Py-ART包含了多種用于雷達(dá)數(shù)據(jù)處理的程序,同時(shí),在此基礎(chǔ)上,可快速開發(fā)新型數(shù)據(jù)處理算法.
基于Z-PHI的衰減校正過程如圖5所示.
核心代碼:
import pyart
//讀取數(shù)據(jù)
radar=pyart.io.read-cfradial('sgpcsaprsurcmacI7.c0.2011020.
095101.nc')
//執(zhí)行衰減校正
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描述了線性規(guī)劃相位處理的過程.
核心代碼:
import pyart
radar = pyart.io.read-mdv(‘095636.mdv')
//使用線性規(guī)劃進(jìn)行相位校正
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線性規(guī)劃相位處理
圖7給出了FourDD算法退除多普勒速度的處理過程.
核心代碼:
import matplotlib.pyplot as plt
import netCDF4
import pyart
SOND-NAME=‘sgpinterpolatedsondeC1.c1.201 10510.000000.cdf'
RADAR-NAME = ‘095636.mdv'
# 讀取數(shù)據(jù)
radar = pyart.io.read-mdv(RADAR-NAME)
dt,profile=pyart.io.read-arm-sonde-vap(SOND-NAME,
radar=radar)
#設(shè)置濾波器閾值
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是一個(gè)基于Python科學(xué)計(jì)算的軟件包,能夠?qū)崿F(xiàn)不同格式雷達(dá)數(shù)據(jù)可視化、數(shù)據(jù)校正與數(shù)據(jù)分析等功能.Py-ART提供了一個(gè)通用的氣象雷達(dá)數(shù)據(jù)處理框架,可以實(shí)現(xiàn)各種復(fù)雜的一體化數(shù)據(jù)處理與分析.Py-ART可用于前沿理論的研究,在現(xiàn)有算法基礎(chǔ)上,用于快速改進(jìn)算法、提高算法性能或者針對(duì)特定場(chǎng)景開發(fā)驗(yàn)證新的算法.同時(shí),對(duì)工程實(shí)踐領(lǐng)域,集成Py-ART到實(shí)際應(yīng)用系統(tǒng)中,可以降低開發(fā)復(fù)雜度,縮短開發(fā)周期,并提高成功率.
成都大學(xué)學(xué)報(bào)(自然科學(xué)版)2018年3期