李 強,張 超,錢 鷗
(中國船舶集團有限公司第八研究院,南京 211153)
隨著部隊作戰(zhàn)使用需求不斷提高,對雷達的主被動探測能力提出了新的需求,其中就包括艦船一維像的繪制。一維像獲取方式簡單,并具有很高的實時性。通過一維像可直觀地觀察遠距離艦船目標(biāo)的特性,并對艦船目標(biāo)進行識別分類,對海上偵察及警戒有著重要意義。因此,研究艦船一維距離像的實時繪制具有現(xiàn)實意義。
現(xiàn)代化雷達對程序的可移植性要求不斷提高,傳統(tǒng)的在單一平臺運行的一維像繪制程序已不能滿足應(yīng)用的需求。此外,隨著現(xiàn)代化雷達信息傳輸速率和數(shù)據(jù)處理實時性能力的提高,終端軟件的運行及繪制效率也應(yīng)不斷進步。因此,在各平臺上進行復(fù)雜圖形的繪制急需一個功能強大且高效的圖形開發(fā)標(biāo)準(zhǔn)。
針對現(xiàn)代化雷達對艦船一維像繪制的需求,將QT和開放式圖形庫(Open Graphics Library,OpenGL)繪圖工具相結(jié)合,提出了一種基于國產(chǎn)化的艦船一維像繪制方法。通過與雷達傳統(tǒng)一維像繪制方法比較,本文提出的方法在滿足軟件可跨平臺的同時繪制效率也有了顯著提高,滿足現(xiàn)代化雷達對國產(chǎn)化的要求,具有重要的工程應(yīng)用價值。
雷達系統(tǒng)一般為微波高分辨率雷達,其工作頻率位于高頻區(qū),工作波長遠小于艦船的尺寸。此時艦船目標(biāo)將連續(xù)占據(jù)多個距離單元,散射的回波形成可視化的目標(biāo)圖形,又稱一維距離像。[1]如圖1所示,它是目標(biāo)精細的結(jié)構(gòu)特征,描述了目標(biāo)散射中心沿視線方向的分布。
圖1 目標(biāo)的一維距離像示意圖
顯控終端顯示的距離像為功率距離像,是實數(shù)的一維距離像。雷達回波在經(jīng)過 Dechirp處理后在 FPGA中完成 I/Q正交工作, I/Q正交之后復(fù)信號再經(jīng)過IFFT加窗處理后即可形成艦船目標(biāo)的一維距離像。[2]顯控終端通過網(wǎng)絡(luò)報文接收和存儲一維像數(shù)據(jù),并通過繪圖軟件將一維像圖形顯示在終端界面中。
雷達傳統(tǒng)的一維像繪制方法有兩種,一種是基于MFC開發(fā)環(huán)境使用D3D(Direct 3D)工具進行繪制,另一種基于QT開發(fā)環(huán)境使用QPaint工具進行繪制。為適應(yīng)現(xiàn)代化雷達的應(yīng)用需求,本文結(jié)合上述兩種方法的優(yōu)點設(shè)計了基于QT開發(fā)環(huán)境使用OpenGL工具進行繪制的方法。
D3D是一款基于Windows系統(tǒng)的繪制3D圖形的應(yīng)用程序接口。它具有良好的硬件兼容性和友好的編程方式等優(yōu)點,現(xiàn)在幾乎所有具有3D加速功能的主流顯卡都能夠和D3D良好的兼容。D3D工具最主要的缺點是只支持Windows平臺,這極大地限制了嵌入式設(shè)備的選擇,同時也有使用復(fù)雜等缺陷。
QPaint是QT二維圖形繪制引擎的基類,包含了大量高度優(yōu)化后的繪制函數(shù)。無論是簡單的線還是復(fù)雜的形狀都可調(diào)用里面的函數(shù)進行繪制,并可在多平臺進行移植。由于QPaint利用CPU資源和軟件技術(shù)結(jié)合,在高頻繪畫時占用CPU資源較高,會造成繪制復(fù)雜圖形時卡頓的現(xiàn)象。
OpenGL是一個專業(yè)的圖形程序接口,具有跨編程語言、跨平臺的優(yōu)點。[3]它獨立于窗口系統(tǒng)和操作系統(tǒng),擁有一個調(diào)用方便、功能強大的底層圖形庫,集成了曲面造型、圖形變換、紋理、融合、霧化等一系列復(fù)雜的圖形函數(shù)。[4]OpenGL的工作流程如圖2所示。
圖2 OpenGL基本工作流程圖
如圖3所示,一維像的繪制過程包括數(shù)據(jù)接收與轉(zhuǎn)存、圖像繪制、操控響應(yīng)及重繪4個過程。一維像圖形可根據(jù)數(shù)據(jù)處理軟件發(fā)送的一維像數(shù)據(jù)報文進行實時更新。
圖3 一維像繪制流程
雷達前端設(shè)備在獲取回波信息后由數(shù)據(jù)處理分機轉(zhuǎn)換成實數(shù)數(shù)據(jù)通過網(wǎng)絡(luò)報文發(fā)送至顯控終端。顯控終端在對數(shù)據(jù)預(yù)處理后存儲在緩存區(qū)域中,便于軟件調(diào)用及修改。本文通過UDP通訊方式進行數(shù)據(jù)的傳輸。由于UDP單包發(fā)送數(shù)據(jù)量有限,將單幅一維像數(shù)據(jù)拆分成不同數(shù)據(jù)包進行發(fā)送,并通過報文觸發(fā)號進行數(shù)據(jù)拼接實現(xiàn)全部信息的獲取。報文數(shù)據(jù)接收格式如下:
Unsigned short usTriggerNum
unsigned short usCurrTriggerNo
unsigned char bykdfxData[DATASIZE]
其中,usTriggerNum為報文觸發(fā)總數(shù),用來告知接收方一維像數(shù)據(jù)拆分成的報文個數(shù);usCurrTriggerNo為當(dāng)前報文的觸發(fā)序號,用來進行數(shù)據(jù)的拼接;bykdfxData為存儲一維像的數(shù)據(jù)結(jié)構(gòu)體;DATASIZE為每條報文中傳輸一維像數(shù)據(jù)的大小。
將接收到的報文個數(shù)與觸發(fā)總數(shù)進行對比判斷報文傳輸?shù)臏?zhǔn)確性,若數(shù)據(jù)傳輸無誤則通過觸發(fā)序號進行數(shù)據(jù)的拼接。拼接后的數(shù)據(jù)格式包含10個一維原始像,其數(shù)據(jù)格式如下:
float*m_XData[HorReserveNum]
float*m_YData[HorReserveNum]
其中,m_XData用來存儲X軸數(shù)據(jù);m_YData用來存儲Y軸數(shù)據(jù);HorReserveNum值為10。最終,將拼接后的數(shù)據(jù)轉(zhuǎn)存為繪制一維像圖像的數(shù)據(jù)格式,格式為GLfloat vertices[verNum][2]。數(shù)據(jù)結(jié)構(gòu)為二維數(shù)組,verNum為所需繪制點的總個數(shù),vertices[i][0]為點i在X軸上的坐標(biāo)位置,vertices[i][1]為點i在Y軸上的坐標(biāo)位置。
完整的一維像顯示界面應(yīng)包含一維距離像、對應(yīng)的坐標(biāo)網(wǎng)格、兩點測距線及相關(guān)的文字描述。一維距離像數(shù)據(jù)成周期性變化,而其對應(yīng)的坐標(biāo)網(wǎng)格及文字描述基本不變,加上兩點測距信息根據(jù)人工操作實時改變,對界面的刷新造成一定的困難。本文將上述圖形分為不同的圖層進行顯示。繪制單幅一維像時,不同一維距離像幅度和距離變化范圍不同,需計算每副一維像的坐標(biāo)網(wǎng)格及兩點距離。繪制10副一維距離像時需計算10副一維像的綜合坐標(biāo)網(wǎng)格信息。最終,將轉(zhuǎn)存后的數(shù)據(jù)調(diào)用OpenGL中的繪制函數(shù),完成視頻的最終繪制。
3.2.1 圖形分層
QT提供基于圖元的Model/View架構(gòu)的GraphicsView框架,可將繪制的圖形分層,并依據(jù)圖層的層疊順序使用Graphics Scene進行管理。完整的一維像圖形包括以下功能:一維像的繪制、描述文字的繪制、兩點測距線的繪制及坐標(biāo)網(wǎng)格的繪制,依據(jù)上述功能可分為描述文字圖層、測距線圖層、坐標(biāo)網(wǎng)格圖層及一維像圖層。如圖3所示,圖層的層疊順序由上而下依次是:
(1) 描述文字圖層:繪制輔助文字,如坐標(biāo)軸單位、測量距離信息等;
(2) 測距線圖層:實現(xiàn)兩點測距功能,并繪制測距線;
(3) 坐標(biāo)網(wǎng)格圖層:繪制一維像的X軸、Y軸以及輔助網(wǎng)格線;
(4) 一維像圖層:繪制一維距離像。
圖4 一維像繪制分層架構(gòu)
3.2.2 繪制一維像的計算公式
(1) 坐標(biāo)網(wǎng)格
繪制坐標(biāo)網(wǎng)格時,需計算出X軸及Y軸的最大值及最小值。以計算Y軸(幅度)最大值為例,計算公式為
MaxY=max (MaxY1,MaxY2,…,MaxY10)
(1)
式中,MaxYi為單幅一維像的幅度最大值,每副一維像都包含151 024組數(shù)據(jù),計算公式為
MaxYi=max (Yi1,Yi2,…,Yi151024)
(2)
(2) 兩點測距
兩點測距線的繪制需計算兩點間距離,具體方法是兩點間的像素點個數(shù)與每個像素點距離的乘積,以計算Y軸幅度差值為例,其計算公式為
(3)
式中,NP為單幅一維像圖形Y軸所需像素點,Y1、Y2分別為起點和終點的位置信息。
(3) 數(shù)據(jù)的轉(zhuǎn)存
需將拼接后的數(shù)據(jù)轉(zhuǎn)存為繪制一維像坐標(biāo)位置的二維數(shù)組,以計算第i個點的Y軸坐標(biāo)為例,其計算公式為
vertices[i][1]=((YData[i]-MinY/fYCell)+
TopSize)/AllSize
(4)
式中,YData[i]為第i個點的Y軸數(shù)據(jù),TopSize為繪制一維像界面窗口相對于總體界面上端距離的像素點數(shù),AllSize為總體界面寬度所具有的像素點個數(shù),fYCell為單個像素點代表的Y值,其計算公式為
fYCell=(MaxY-MinY)/(AllSize-TopSize-DownSize)
(5)
式中,DownSize為繪制一維像界面窗口相對于總體界面下端距離的像素點數(shù)。
3.2.3 視頻繪制
調(diào)用OpenGL繪圖工具使用轉(zhuǎn)存后的數(shù)據(jù)進行繪制一維像圖像,具體方法如下:
(1) glBegin(GL_LINE_STRIP)開始調(diào)用OpenGL工具進行圖像的繪制;
(2) glEnableClientState( GL_VERTEX_ARRAY)啟用頂點數(shù)組進行圖像的繪制;
(3) glVertexPointer( 2, GL_FLOAT, 0, vertices)將轉(zhuǎn)存后的一維像數(shù)組數(shù)據(jù)上傳至OpenGL工具中;
(4) glDrawArrays( GL_LINE_STRIP, 0, count)進行繪制一維距離像圖像。
一維像圖形的操控主要包括兩點測距、圖形放大、圖形還原及一維像圖形切換。
(1) 兩點測距操控
將異形刀片加工成形,安裝到實際割草車上開展試驗研究,驗證其割草效果。雖刀片扭矩有一定下降,但刀口的切割速度依然很高,實際割草效果仍能達到要求。經(jīng)試驗測試結(jié)果表明,優(yōu)化后刀片上的扭矩減小了18%左右,與仿真計算的誤差小于5%,證明仿真結(jié)果有效。另外刀片功率減小了216 W,節(jié)能約8.5%,達到了滿意的節(jié)能效果。圖15(a)是試驗用割草車,圖15(b)是優(yōu)化后的異形刀片。
mousePressEvent(QMouseEvent*event)用來處理鼠標(biāo)單擊事件的響應(yīng)函數(shù)。當(dāng)鼠標(biāo)在一維像圖形上進行右擊時將該點設(shè)置為需進行測距的點,連續(xù)點擊兩次表示依次選取測距的起點和終點。
(2) 圖形放大操控
mouseReleaseEvent(QMouseEvent*event)用來處理圖像放大時間的響應(yīng)函數(shù)。當(dāng)使用鼠標(biāo)進行區(qū)域選擇操作時將該事件的起始點信息作為需放大的圖像的起始范圍。
(3) 圖形還原操控
mouseDoubleClick(QMouseEvent*ev)用來處理鼠標(biāo)雙擊事件的響應(yīng)函數(shù)。當(dāng)鼠標(biāo)在一維像圖形上雙擊時該一維像圖形還原成原始圖形。
(4) 一維像圖形切換操控
一維像的重繪包括定時器的調(diào)用、窗口的重新布置及重新繪制等函數(shù),具體函數(shù)如下:
(1) initializeGL()用來初始化窗口部件,例如設(shè)置顯示窗口大小,給一維像數(shù)據(jù)開辟存儲空間等。
(2) paintGL()用來繪制OpenGL的窗口。數(shù)據(jù)產(chǎn)生變化需更新圖像時調(diào)用該函數(shù),里面包含繪制10個一維像的函數(shù)和繪制單個一維像的函數(shù)。
(3) resizeGL(int width, int height)為用來處理窗口大小變換的函數(shù),width和height分別表示新窗口的寬和高。
(4) timeEvent(QTimeEvent *ev)為定時器函數(shù),每兩秒判斷一次,若有新數(shù)據(jù)更新或有鍵盤、鼠標(biāo)等圖形操控等事件發(fā)生調(diào)用圖形更新程序。
模擬器讀取存于本地文件中的一維像數(shù)據(jù),通過UDP報文形式發(fā)送至顯控終端來進行仿真實驗。一組一維像數(shù)據(jù)包含10副一維像圖形,每副一維像圖形又分為10個UDP數(shù)據(jù)包,每幅一維像的數(shù)據(jù)大小為151 024 Bit,以圖形標(biāo)識號進行區(qū)分。
圖5、6和7分別為使用D3D繪制、使用QPaint繪制和使用OpenGL繪制的一維像圖形。
圖5 D3D繪制單幅一維像效果圖
圖6 QPaint繪制單幅一維像效果圖
圖7 OpenGL繪制單幅一維像效果圖
使用OpenGL繪制單幅一維像圖形幅度介于0~122之間,距離介于0~35 000 m之間,與D3D及QPaint繪制的一維像圖形基本一致。
進一步查看操控后的一維像圖形實時繪制功能,圖8和圖9分別為使用OpenGL畫的10副一維像圖像和維像放大后的圖像。
圖8 OpenGL繪制10副一維像效果圖
圖9 OpenGL繪制10副一維像區(qū)域放大效果圖
在繪制10副一維像和進行放大操控時,繪制執(zhí)行時間小于10 ms,整體運行流暢無卡頓。其他方法繪制效果統(tǒng)計如表1所示。
表1 各方法繪制效果統(tǒng)計表
由表1可知,在繪制能力上,D3D與OpenGL方法繪制效率較高,繪制方法比較穩(wěn)定;QPaint方法只適用于繪制簡單圖像。在可移植性能上,QPaint與OpenGL方法可移植性高,適用于大多數(shù)系統(tǒng);而D3D方法只適用Windows系統(tǒng)。綜上所述,本文提出的方法滿足現(xiàn)代化高分辨率雷達對一維距離像的繪制要求,可應(yīng)用于國產(chǎn)化平臺。
實驗表明,本文提出的基于QT與OpenGL的艦船一維像繪制方法能夠有效解決一維像的繪制效率問題及程序的可移植性問題,滿足現(xiàn)代化雷達顯示軟件國產(chǎn)化的需求。目前,該一維像繪制軟件實現(xiàn)了窄帶、寬帶雷達一維距離像繪制,將來可擴展應(yīng)用作為寬帶一維像圖形識別研究的基礎(chǔ)。