彭華仁,房鵬飛
(中電科思儀科技股份有限公司,山東青島,266555)
隨著無線電通信技術(shù)以及無線電子設(shè)備的發(fā)展,城市環(huán)境下的電磁環(huán)境越來越復(fù)雜,不同無線電系統(tǒng)間干擾以及人為干擾頻發(fā),非法異常信號干擾人們正常生活的現(xiàn)象頻繁發(fā)生。為了更加高效的利用頻譜資源、保護人們的信息安全,就需要對無線電信號進(jìn)行監(jiān)測和管理,對非法的無線電干擾信號進(jìn)行查處。監(jiān)測接收機是進(jìn)行無線電頻譜監(jiān)測、查找干擾源的重要工具。其中,小型化的手持式監(jiān)測接收機是進(jìn)行現(xiàn)場干擾源搜索與查找的必備工具,具備一個友好的人機交互界面將有助于其發(fā)揮更好的作用。
干擾就是使用非法的信號占用合法信號的頻率資源,造成合法信號通信的中斷,對信號頻域的分析是查找干擾信號的有效手段。利用手持式監(jiān)測接收機進(jìn)行干擾信號的現(xiàn)場查找時,就是使用接收機掃描一定頻段內(nèi)的信號,分析得到信號頻譜,通過觀察頻譜圖來發(fā)現(xiàn)干擾信號,對于間歇性的干擾信號可通過三維瀑布圖進(jìn)行查找。由此可見,頻譜圖和瀑布圖的顯示是手持式監(jiān)測接收機人機界面必須具備的功能。同時,由于掃描速度是手持式監(jiān)測接收機的一項重要指標(biāo),掃描速度越快越有利于發(fā)現(xiàn)干擾信號,這就對頻譜圖和瀑布圖的刷新速度提出了很高的要求。本文將基于Qt 開發(fā)環(huán)境設(shè)計一款人機交互軟件,實現(xiàn)手持式監(jiān)測接收機頻譜圖和瀑布圖的高效刷新顯示。
Qt 是一個跨平臺的用于創(chuàng)建精彩用戶界面和強大原生應(yīng)用的框架,它包括一套跨平臺的類庫、一套整合的開發(fā)工具和一個跨平臺的集成開發(fā)環(huán)境Qt Creator,是進(jìn)行人機交互界面開發(fā)的最佳選擇之一,與其他圖形界面開發(fā)工具相比,它具有更優(yōu)秀的跨平臺特性,能夠?qū)崿F(xiàn)“一次編寫,隨處編譯”。Qt 中提供了兩種開發(fā)人機交互界面的方式:Qt Widgets 和Qt Quick。其中,Qt Quick 是Qt 提供的一種高級用戶界面工具包,它包括描述性語言QML、大量的用戶界面元素、C++與QML 混合編程等眾多技術(shù),使用它可輕松完成移動應(yīng)用、嵌入式設(shè)備等用戶界面的開發(fā)。
本文所要設(shè)計的手持式監(jiān)測接收機人機交互界面需要具備頻譜圖與瀑布圖的高效刷新顯示,還需要具備友好的人機交互,支持觸控以及手勢操作,方便用戶操控設(shè)備,對顯示圖形進(jìn)行縮放操作,觀看頻譜細(xì)節(jié)。其中,頻譜圖與瀑布圖的顯示需要涉及大量的數(shù)據(jù)運算,比如頻譜數(shù)據(jù)的插值抽取與坐標(biāo)映射、瀑布圖數(shù)據(jù)的顏色映射等。對于復(fù)雜的數(shù)據(jù)運算,使用C++實現(xiàn)能夠充分發(fā)揮其性能優(yōu)勢,而對于圖形的觸控縮放操作以及刷新顯示則更加適合用QML 語言進(jìn)行開發(fā)。為此,本文將使用Qt Quick 進(jìn)行手持式監(jiān)測接收機人機交互界面的開發(fā),利用其提供的C++與QML 混合編程技術(shù)實現(xiàn)數(shù)據(jù)的快速處理以及頻譜圖與瀑布圖的高效刷新顯示。在人機交互界面的設(shè)計中,C++與QML 混合編程技術(shù)的使用以及瀑布圖的高效刷新技術(shù)是其中設(shè)計難點,本文將重點從這兩個方面展開論述。
人機交互界面軟件采用C++與QML 混合編程技術(shù)進(jìn)行設(shè)計,分為數(shù)據(jù)處理層和界面顯示層。數(shù)據(jù)處理層用C++實現(xiàn),主要負(fù)責(zé)從底層控制端獲取接收機實時產(chǎn)生的頻譜數(shù)據(jù)以及將頻譜數(shù)據(jù)轉(zhuǎn)換為用于顯示的坐標(biāo)數(shù)據(jù)、瀑布圖顏色數(shù)據(jù)等,界面顯示層用QML 實現(xiàn),主要負(fù)責(zé)與用戶的交互以及頻譜圖、瀑布圖的繪制等。數(shù)據(jù)交互層與界面顯示層需要密切配合才能實現(xiàn)人機界面的高效刷新,二者是一種平行關(guān)系,除模塊劃分、多線程技術(shù)外,相互之間的數(shù)據(jù)交換等將嚴(yán)格遵照以下設(shè)計原則,具體如圖1 所示。
圖1 C++與QML 混合編程分層架構(gòu)圖
其中,界面顯示層負(fù)責(zé)實現(xiàn)如下功能:
(1)負(fù)責(zé)與用戶的交互,包括鼠標(biāo)、鍵盤、觸摸手勢;
(2)負(fù)責(zé)繪制頻譜圖與瀑布圖等圖形顯示元素;
(3)負(fù)責(zé)各個圖形顯示元素的布局管理,可靈活根據(jù)窗口數(shù)量調(diào)整窗口布局,并調(diào)整各顯示元素大小和位置;
(4)混合編程通信管理:負(fù)責(zé)建立QML 與C++之間的通信。
數(shù)據(jù)處理層負(fù)責(zé)實現(xiàn)如下功能:
(1)測量分析處理:將從底層控制端獲取的數(shù)據(jù)進(jìn)行頻譜映射、插值抽取等處理,得到最終測量結(jié)果數(shù)據(jù);
(2)顯示數(shù)據(jù)變換:將測量結(jié)果數(shù)據(jù)計算為用于繪圖的顯示數(shù)據(jù),包含頻譜圖的坐標(biāo)數(shù)據(jù)以及瀑布圖的顏色數(shù)據(jù)等;
(3)狀態(tài)存儲:負(fù)責(zé)測量結(jié)果數(shù)據(jù)的文件保存等;
(4)數(shù)據(jù)傳輸:負(fù)責(zé)與底層之間的數(shù)據(jù)傳輸。
界面顯示層與數(shù)據(jù)處理層之間的數(shù)據(jù)通信通過Qt 元對象系統(tǒng)實現(xiàn),具體技術(shù)為:
(1)信號槽:實現(xiàn)跨語言的線程通信;
(2)方法注冊、方法調(diào)用:由QML 調(diào)用C++封裝的方法,主要實現(xiàn)狀態(tài)查詢,測量結(jié)果查詢;
(3)環(huán)境注冊、類調(diào)用:由QML 使用C++聲明的類,主要實現(xiàn)數(shù)據(jù)類的緩沖;
(4)上下文屬性、對象調(diào)用:由QML 使用C++定義的類對象,主要實現(xiàn)數(shù)據(jù)共享;
(5)元對象調(diào)用方法:由C++調(diào)用QML 對象所定義的方法,主要實現(xiàn)特殊的窗口管理。
瀑布圖也稱為三維頻譜,代表的是頻譜隨時間的變化,其橫軸表示頻率,縱軸為時間,垂直于橫軸和縱軸的是幅度,用顏色表示。瀑布圖對于手持式監(jiān)測接收機查找干擾信號是非常有用的,尤其是對于出現(xiàn)時間較短的間歇性信號。為此,瀑布圖的高效刷新是手持式監(jiān)測接收機人機交互界面設(shè)計的重點。人機界面采用的是C++與QML 混合編程架構(gòu),瀑布圖顯示在QML 端完成,瀑布圖數(shù)據(jù)的處理在C++端完成。瀑布圖的數(shù)據(jù)處理與顯示繪制流程如圖2 所示。
圖2 瀑布圖繪制流程
當(dāng)人機界面接收到底層控制端發(fā)來的測量數(shù)據(jù)準(zhǔn)備好信號后,在其槽函數(shù)中進(jìn)行數(shù)據(jù)處理然后保存該組數(shù)據(jù),并記錄當(dāng)前存儲瀑布圖數(shù)據(jù)的幀數(shù)和最新數(shù)據(jù)在瀑布圖數(shù)據(jù)數(shù)組中的索引,為改進(jìn)瀑布圖刷新效率,防止底層頻繁發(fā)送測量數(shù)據(jù)準(zhǔn)備好信號造成人機界面無法響應(yīng),人機界面端進(jìn)行了壓縮處理,即人機界面收到測量結(jié)果準(zhǔn)備好信號后,只負(fù)責(zé)保存頻譜數(shù)據(jù)及設(shè)置瀑布圖更新標(biāo)記值,同時增加一個定時器,定時器定時周期設(shè)置為30ms,每隔30ms 人機界面主動去查詢是否有瀑布圖更新標(biāo)記值,若有則根據(jù)當(dāng)前存儲瀑布圖數(shù)據(jù)的幀數(shù)和最新數(shù)據(jù)在瀑布圖數(shù)據(jù)數(shù)組中的索引從瀑布圖數(shù)據(jù)區(qū)讀取數(shù)據(jù)到瀑布圖繪圖緩存區(qū),并發(fā)送計算顏色數(shù)據(jù)信號給計算線程,在計算線程的槽函數(shù)中計算瀑布圖顏色數(shù)據(jù),計算完成后發(fā)送瀑布圖更新信號給QML 端,QML 端調(diào)用瀑布圖繪圖更新函數(shù)進(jìn)行瀑布圖的更新。
為了提高瀑布圖的刷新效率,對于存儲瀑布圖數(shù)據(jù)的數(shù)組,采用了循環(huán)列表的數(shù)據(jù)結(jié)構(gòu),每個列表中的元素是一個一維數(shù)組,以節(jié)省數(shù)據(jù)的存儲時間;對于數(shù)據(jù)的處理采用了多線程的處理方案,數(shù)據(jù)的存儲與瀑布圖顏色數(shù)據(jù)的計算分別運行于兩個線程中,以節(jié)省數(shù)據(jù)處理的時間。
手持式監(jiān)測接收機人機交互界面的軟件實現(xiàn)是依據(jù)上述的設(shè)計架構(gòu)以及實現(xiàn)流程,在此基礎(chǔ)上對各個界面功能進(jìn)行一一編程實現(xiàn)。本軟件使用Qt Creator 進(jìn)行開發(fā),使用C++編寫數(shù)據(jù)處理部分的代碼,使用QML 編寫界面各個顯示控件的代碼,最終完成了整個人機交互界面軟件的代碼編寫。該人機交互界面軟件支持單擊、拖動、雙擊、放大、縮小、長按等常用觸摸手勢操作,可方便的實現(xiàn)顯示頻譜的放大、縮小、平移等操作。人機界面主界面的實現(xiàn)效果如圖3 所示。
圖3 人機界面實現(xiàn)效果圖
該人機交互界面軟件實現(xiàn)后,已成功應(yīng)用于國產(chǎn)某手持式監(jiān)測接收機產(chǎn)品上,在該產(chǎn)品的硬件平臺上,筆者對人機界面頻譜圖和瀑布圖的刷新效率進(jìn)行了測試驗證,測試代碼如圖4 所示。
圖4 人機界面刷新速度測試代碼
頻譜圖和瀑布圖的刷新速度測試結(jié)果分別如圖5 和圖6所示。
圖5 頻譜圖刷新速度測試結(jié)果
圖6 瀑布圖刷新速度測試結(jié)果
經(jīng)過實際測試,人機界面頻譜圖的刷新速度可達(dá)到45幀/s 左右,瀑布圖的刷新速度可達(dá)到30 幀/s 左右,實現(xiàn)了頻譜圖和瀑布圖的高效刷新顯示。
本文依據(jù)手持式監(jiān)測接收機設(shè)備的功能要求,利用Qt的C++與QML 混合編程技術(shù),對手持式監(jiān)測接收機人機交互界面軟件進(jìn)行了設(shè)計與實現(xiàn),該軟件在國產(chǎn)某手持式監(jiān)測接收機產(chǎn)品上進(jìn)行了使用,運行穩(wěn)定,并且得到了用戶的充分肯定。同時,基于Qt 優(yōu)良的跨平臺特性,該軟件已經(jīng)成功的移植到了平板電腦上,作為手持式監(jiān)測接收機的外控軟件,更加方便了用戶的使用。