李宇宏,李 超
(1.中國電子科技集團公司第五十四研究所,石家莊 050081;2.衛星導航系統與裝備技術國家重點實驗室,石家莊 050081;3.北京衛星導航中心,北京 100094)
衛星導航信號模擬器是一種高精度的標準信號源,可以為導航接收機的研制開發、測試提供仿真環境。其中一個重要仿真項是導航接收機的天線方向圖仿真。所謂天線方向圖,是指在離天線一定距離處,輻射場的相對場強(歸一化模值)隨方向變化的圖形,天線方向圖是衡量天線性能的重要圖形,可以從天線方向圖中觀察到天線的各項參數。設計并實現接收機天線方向圖軟件可以提供對天線方向圖的簡單建模,從而模擬真實的接收機天線,提高衛星導航信號模擬器的真實環境仿真能力。本文結合業務需求,運用面向對象思想完成了軟件開發,并在軟件設計中引入設計模式,通過測試驗證軟件可行。
天線方向圖軟件采用所見即所得的設計理念,分為命令區域、編輯區域、二維可視化區域、三維可視化區域。在命令區域,可通過下拉菜單、工具欄也可以進行上鏡像、下鏡像、左鏡像、右鏡像操作;在編輯區域,用戶可以對視窗內的數據進行編輯,可以進行單點改變、行改變、列該變、矩形改變;二維可視化區域用于顯示天線方向圖的平面效果;三維可視化區域顯示天線在三維世界中的狀態。如圖1所示:

圖 軟件界面
天線方向圖軟件涉及設計模式、OpenGL、Qt 等技術,本文主要討論該軟件和設計模式相關的兩個部分:多界面的顯示同步和用戶操作。
我們在對天線方向圖的任何編輯操作,如點操作、行操作、鏡像操作,同時要求在二維可視化區域、三維可視化區域、編輯區域同時得到顯示。這正是觀察者模式能夠解決的問題,這一模式中的關鍵對象是目標和觀察者。一個目標可以有任意數目的依賴它的觀察者。一旦目標的狀態發生改變,所有的觀察者都得到通知。作為對這個通知的響應,每個觀察者都將查詢目標以使其狀態與目標的狀態同步。
天線方向圖的UML 靜態結構圖,如圖2 所示。

圖2 觀察者模式在軟件中應用
和觀察者模式有些差異的是,觀察者接口有兩個接口可以獲取到當前狀態更新,一個是數據本身發生改變,另一個是觀察區域發生改變。
由于天線方向圖的編輯比較復雜,在軟件使用過程中,進行了錯誤的操作也是不可避免的,這就要求軟件支持命令的撤銷、重做。這是典型的命令模式需求:將一個請求封裝為一個對象,從而使你可用不同的請求對客戶進行參數化;對請求排隊或記錄請求日志,以及支持可撤消的操作。在交互應用中撤銷和重做能力是很重要的。為了撤銷和重做一個命令,我們在AbstractCommand 接口中增加 unexecute 操作。unexecute 操作是execute 的逆操作,它使用上一次execute 操作所保存的取消信息來消除execute 操作的影響。如圖3所示:

圖3 命令模式在軟件中應用
軟件結合使用備忘錄模式來保存信息,在execute 中保存,在unexecute 中恢復。由于天線方向圖數據量不大,生成備忘錄時拷貝并存儲小量的信息,用戶不會非常頻繁地創建備忘錄和恢復原發器狀態,所以使用備忘錄模式是合理的。這里的AbstractCommand 本身是備忘錄模式的Caretaker,負責保存好備忘錄,不能對備忘錄的內容進行操作或檢查。而AntennaData 則是Originator,用于創建一個備忘錄,記錄當前時刻它的內部狀態。AntennaMemento 是備忘錄本身。如圖4所示:

圖4 備忘錄模式在軟件中應用
到此,每一個AbstractCommand 的unexecute 直接調用設置備忘錄即可。

由于每一個AbstractCommand 在execute 操作中必須先創建備忘錄,再開始執行,這里可以使用模板模式。模板模式定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。如下所示,每一個AbstractCommand 本身的execute 操作分為兩步分,第一步創建備忘錄,第二部真正執行操作,這一步由子類實現。而每一個AbstractCommand 的unexcute 則直接執行恢復備忘錄。

本文運用面向對象思想設計了一款天線方向圖軟件,在實現基本功能的基礎上,運用設計模式實現了低耦合、高內聚的軟件設計。研究結果表明:該軟件可以模擬用戶機天線方向圖、衛星天線方向圖,可滿足衛星導航模擬器軟件的使用需求,極大極高了該軟件的真實環境仿真能力,具有良好的應用前景。