彭葉飛 劉 亮 張龍敏 梁 猛
(陜西長(zhǎng)嶺電子科技有限責(zé)任公司產(chǎn)品開發(fā)部,陜西 寶雞 721006)
基于Qt的船用雷達(dá)簡(jiǎn)單模擬目標(biāo)生成及顯示
彭葉飛 劉 亮 張龍敏 梁 猛
(陜西長(zhǎng)嶺電子科技有限責(zé)任公司產(chǎn)品開發(fā)部,陜西 寶雞 721006)
使用Qt多線程及2D繪圖技術(shù)實(shí)現(xiàn)船用雷達(dá)簡(jiǎn)單模擬目標(biāo)生成及顯示軟件。為雷達(dá)顯控終端研制和調(diào)試提供快捷、低成本的生成摸擬目標(biāo)數(shù)據(jù)的方法。
Qt;多線程;2D繪圖;雷達(dá)目標(biāo)模擬
在雷達(dá)顯控終端的研制和調(diào)試中,使用真實(shí)目標(biāo)提供回波數(shù)據(jù)成本高,而通過軟件實(shí)現(xiàn)模擬目標(biāo)回波數(shù)據(jù),能更快捷、靈活及低成本地進(jìn)行雷達(dá)顯控終端的研制和調(diào)試。
隨著多處理器系統(tǒng)的普及,應(yīng)用程序中越來越多地采用多線程技術(shù),使應(yīng)用程序在處理數(shù)據(jù)密集事件時(shí),也能對(duì)圖形用戶界面保持響應(yīng)。本文在Windows系統(tǒng)上利用Qt的圖形界面繪圖及多線程技術(shù),采用C++編程,實(shí)現(xiàn)船用雷達(dá)簡(jiǎn)單模擬目標(biāo)生成及顯示功能軟件。
軟件由方位生成、目標(biāo)生成、圖像生成及界面顯示等模塊。方位生成主要模擬天線旋轉(zhuǎn)時(shí)的方位信息;目標(biāo)生成實(shí)現(xiàn)生成具有運(yùn)動(dòng)模擬目標(biāo)的回波數(shù)據(jù);圖像生成實(shí)現(xiàn)回波數(shù)據(jù)轉(zhuǎn)換為圖像數(shù)據(jù)的功能;界面顯示實(shí)現(xiàn)回波圖像的顯示功能。
回波數(shù)據(jù)設(shè)計(jì)為一維數(shù)組,大小為[距離×方位](采用距離為1024,方位為4096),每個(gè)數(shù)組元素表示回波在該位置處的幅度值。
2.1線程創(chuàng)建、啟動(dòng)
具有圖形界面的Qt程序中,主線程由GUI線程充當(dāng),可擁有一個(gè)或多個(gè)非GUI線程作為次線程,以處理數(shù)據(jù)密集事件。軟件中界面顯示作為GUI線程,目標(biāo)生成、方位生成及圖像生成作為次線程。
Qt中通過子類化QThread并且重新實(shí)現(xiàn)run()函數(shù)創(chuàng)建線程,run()函數(shù)中為事件處理循環(huán),通過調(diào)用start()啟動(dòng)線程。
2.2線程同步及通信
QMutex類提供一種保護(hù)一個(gè)變量或一段代碼的方法,使同一時(shí)間只有一個(gè)線程使用它。目標(biāo)生成和圖像生成對(duì)回波數(shù)據(jù)進(jìn)行讀寫,使用QMutex進(jìn)行回波數(shù)據(jù)保護(hù)及同步。線程間通過信號(hào)槽機(jī)進(jìn)行通信。
3.1方位生成
根據(jù)雷達(dá)天線掃描周期,創(chuàng)建新線程定時(shí)產(chǎn)生方位,通過信號(hào)發(fā)送方位至目標(biāo)生成及圖像生成線程。
若方位更新周期為30ms,雷達(dá)天線轉(zhuǎn)速為20轉(zhuǎn)/分,方位值范圍為0~4095(取正北為方位0,方位從0以順時(shí)針方向增長(zhǎng)),則每周期方位變化值可近似為41。
3.2目標(biāo)生成
離散時(shí)間系統(tǒng)下,勻速直線運(yùn)動(dòng)目標(biāo)狀態(tài)方程用矩陣可表示為:
X(k+1)=F(k)X(k)
其中X(k)和F(k)分別為狀態(tài)向量和系統(tǒng)狀態(tài)轉(zhuǎn)移矩陣,如下:
模擬目標(biāo)包含位置、大小、航速和航向等狀態(tài)信息,用距本船(雷達(dá))距離、距船艏(或正北)方位表征目標(biāo)位置,計(jì)算目標(biāo)各掃描周期內(nèi)的位置及大小。為方便計(jì)算,將位置、航速和航向信息轉(zhuǎn)換至直角坐標(biāo)系,計(jì)算目標(biāo)下一周期位置。
目標(biāo)只需在每個(gè)雷達(dá)掃描周期內(nèi)更新一次。線程啟動(dòng)前,計(jì)算目標(biāo)初始位置及下周期的位置并存儲(chǔ),線程啟動(dòng)后,結(jié)合接收到方位,提取目標(biāo)位置更新回波數(shù)據(jù),再計(jì)算下周期該目標(biāo)位置,實(shí)現(xiàn)目標(biāo)生成功能。
3.3圖像生成
Qt中QImage類提供了與硬件無關(guān)的圖像表示方法,它支持在非GUI線程中使用,允許在次線程中實(shí)現(xiàn)回波數(shù)據(jù)到圖像數(shù)據(jù)的轉(zhuǎn)換,完成圖像生成功能。
圖像生成應(yīng)能實(shí)時(shí)反應(yīng)天線掃描過區(qū)域內(nèi)圖像的變化,由于完全刷新整幅圖像數(shù)據(jù)占用資源過多,因此只需更新兩次天線信號(hào)之間回波數(shù)據(jù)發(fā)生變化的區(qū)域。
設(shè)置所顯示圖像大小,為回波數(shù)據(jù)的每個(gè)位置計(jì)算其對(duì)應(yīng)圖像上的坐標(biāo)。圖像中心對(duì)應(yīng)回波數(shù)據(jù)密集,遠(yuǎn)離中心稀疏,即圖像中一個(gè)像素既可能有多個(gè)回波數(shù)據(jù)與之對(duì)應(yīng),也可能與其周圍像素共享一個(gè)回波數(shù)據(jù)。圖像生成線程啟動(dòng)前,計(jì)算圖像數(shù)據(jù)與回波數(shù)據(jù)位置對(duì)應(yīng)表,線程啟動(dòng)后查找對(duì)應(yīng)表快速讀取回波數(shù)據(jù)生成圖像。結(jié)合回波數(shù)據(jù)([1024×4096])和圖像數(shù)據(jù)[800×800]大小分析,回波數(shù)據(jù)中一位置(用E表示),在圖像數(shù)據(jù)中均有與之對(duì)應(yīng)處,記為P,當(dāng)E處值發(fā)生變化時(shí),對(duì)應(yīng)圖像中P處像素值也發(fā)生變化,且圖像中每一點(diǎn)均能在回波數(shù)據(jù)中有一個(gè)或多個(gè)數(shù)據(jù)與之對(duì)應(yīng),則用下式表示P處圖像數(shù)據(jù)值:
其中Vp表示圖像數(shù)據(jù)P處值,VEn表示回波數(shù)據(jù)En處值,N表示對(duì)應(yīng)圖像位置P處回波數(shù)據(jù)個(gè)數(shù)且大于0。使用setPixel函數(shù)設(shè)置圖像像素,根據(jù)方位更新圖像數(shù)據(jù)。
3.4 界面顯示
QWidget類是Qt中所有用戶界面對(duì)象的基類,通過繼承QWidget,重新實(shí)現(xiàn)虛函數(shù)paintEvent,使用QPainter快速、方便地將圖像繪制在屏幕上。
Qt繪圖設(shè)備默認(rèn)坐標(biāo)系統(tǒng)是坐標(biāo)原點(diǎn)位于左上角,X軸向右增長(zhǎng),Y軸向下增長(zhǎng),而基于雷達(dá)回波數(shù)據(jù)轉(zhuǎn)換后的圖像數(shù)據(jù)的坐標(biāo)系統(tǒng)以雷達(dá)為坐標(biāo)原點(diǎn),X軸向右增長(zhǎng),Y軸向下增長(zhǎng)。通過仿射變換能方便實(shí)現(xiàn)對(duì)物體實(shí)施縮放、旋轉(zhuǎn)、平移操作。二維向量的變換可用一個(gè)3×3的矩陣來表示。在QTransform中定義變換矩陣及將一點(diǎn)變換為另一點(diǎn)公式如下:
其中m11和m22表示水平和垂直方向的比例;m12和m21表示水平和垂直方向的扭曲程度;m13和m23表示水平和垂直投影,m33為投影因子,(x,y)是變換前的點(diǎn),(x′,y′)是變換后點(diǎn)。
雷達(dá)圖像大小設(shè)置為800×800,Qt默認(rèn)左上角作為坐標(biāo)原點(diǎn),通過設(shè)置變換矩陣參數(shù),使Qt以圖像中心位置(400,400)作為直角坐標(biāo)系原點(diǎn)進(jìn)行繪圖,變換矩陣系數(shù)m11為1,m22為-1,m31和m32均為400,m33為1,其余均為0。
在Qt中,QImage主要是為圖像I/O、圖片訪問和像素修改設(shè)計(jì),而QPixmap主要用于繪圖,針對(duì)屏幕顯示而最佳化設(shè)計(jì)。為提高UI響應(yīng)速度,軟件在次線程中使用QImage將圖像加載,在GUI線程中轉(zhuǎn)換為QPixmap進(jìn)行顯示。
界面顯示作為GUI線程,接收方位、圖像數(shù)據(jù),通過定時(shí)器將方位線、圖像進(jìn)行更新,實(shí)現(xiàn)回波數(shù)據(jù)顯示功能。
在PC上編譯軟件程序并運(yùn)行,測(cè)試模擬扇區(qū)效果、若干運(yùn)動(dòng)目標(biāo)圖像顯示情況,測(cè)試結(jié)果如圖1所示,其中左為扇區(qū)效果圖,中為模擬目標(biāo)初始圖像,右為目標(biāo)運(yùn)動(dòng)一段時(shí)間后圖像。
本文介紹一種基于Qt多線程船用雷達(dá)簡(jiǎn)單模擬目標(biāo)生成及顯示的軟件。經(jīng)測(cè)試,軟件達(dá)到預(yù)期效果,實(shí)現(xiàn)模擬目標(biāo)數(shù)據(jù)生成及顯示功能,為雷達(dá)顯控終端提供快捷、低成本、靈活可控的模擬目標(biāo)數(shù)據(jù),對(duì)雷達(dá)回波顯示及導(dǎo)航跟蹤算法驗(yàn)證具有良好作用。
[1] Jasmin Blanchette, Mark Summerfield. C++ GUI Qt4編程(第二版)[M].北京:電子工業(yè)出版社,2008.
[2]蔡志明,盧傳富,李立夏.精通Qt4編程(第二版)[M].北京:電子工業(yè)出版社,2011.
[3]何友,修建娟,張晶煒,關(guān)欣.雷達(dá)數(shù)據(jù)處理及應(yīng)用[M].北京:電子工業(yè)出版社,2006.
TN957
A