崔群超, 荊文芳
(1.中國(guó)科學(xué)院國(guó)家授時(shí)中心, 西安 710600; 2.中國(guó)科學(xué)院大學(xué), 北京 100049)
GNSS驗(yàn)證系統(tǒng)(GNSS verification system,GVS)是中國(guó)具有自主知識(shí)產(chǎn)權(quán)的一種新衛(wèi)星導(dǎo)航體制[1],該系統(tǒng)基于衛(wèi)星轉(zhuǎn)發(fā)地面站所產(chǎn)生的導(dǎo)航信號(hào)的工作模式實(shí)現(xiàn)衛(wèi)星導(dǎo)航定位。GVS具有高精度載波相位授時(shí)功能,GNSS驗(yàn)證系統(tǒng)授時(shí)指標(biāo)(GNSS verification system timing indicator,GVSTI)是實(shí)現(xiàn)GVS載波相位授時(shí)的關(guān)鍵性能指標(biāo),對(duì)分析GVS載波相位授時(shí)精度和誤差具有重要意義,同時(shí)為GVS基帶調(diào)控發(fā)射信號(hào)參數(shù)提供重要數(shù)據(jù)支持。目前對(duì)GVSTI的分析主要基于MATLAB軟件,研究人員需要從采集數(shù)據(jù)開始進(jìn)行大量的重復(fù)工作,耗時(shí)耗力并增加了出錯(cuò)概率,且不能實(shí)時(shí)獲取GVSTI性能。因此,為提高GVSTI分析效率、降低人為失誤,需要一個(gè)實(shí)時(shí)分析GVSTI的系統(tǒng)軟件。使用設(shè)計(jì)模式可以幫助開發(fā)人員設(shè)計(jì)出一種更加靈活、更加模塊化的、可復(fù)用和易于理解的軟件[2]。MVC模式[3-4]最早在Smalltalk-80程序語言設(shè)計(jì)中被提出,MVC開發(fā)模式是一種“分治”思想,它將數(shù)據(jù)的訪問和數(shù)據(jù)的表現(xiàn)進(jìn)行了分離。通過這種模式,可以開發(fā)一個(gè)具有伸縮性、便于擴(kuò)展、便于整個(gè)流程維護(hù)的平臺(tái)[5]。本文應(yīng)用MVC模式自主設(shè)計(jì)并開發(fā)GVSTI系統(tǒng)軟件。
MVC模式包括模型(model)、視圖(view)和控制器(controller)三部分[6],分別對(duì)應(yīng)數(shù)據(jù)處理、數(shù)據(jù)表示和輸入輸出控制[7],MVC模式結(jié)構(gòu)如圖1所示。
圖1 MVC模式結(jié)構(gòu)圖Fig.1 MVC mode structure diagram
模型是與問題相關(guān)的數(shù)據(jù)邏輯抽象,代表對(duì)象的內(nèi)在屬性,是整個(gè)模式的核心。模型作用為:抽象應(yīng)用程序功能,封裝程序數(shù)據(jù)的結(jié)構(gòu)及操作;為控制器提供對(duì)數(shù)據(jù)的訪問;為視圖提供數(shù)據(jù)索引,接受視圖的數(shù)據(jù)操作;當(dāng)模型中數(shù)據(jù)變化時(shí),通知視圖數(shù)據(jù)改變,但不關(guān)心數(shù)據(jù)如何顯示。
視圖提供界面顯示,負(fù)責(zé)與用戶交互[8]。一個(gè)模型可以對(duì)應(yīng)一個(gè)或者多個(gè)視圖[9],如圖形用戶界面視圖、命令行視圖等。視圖為用戶提供輸入方式,觸發(fā)業(yè)務(wù)邏輯運(yùn)行,同時(shí)將業(yè)務(wù)邏輯運(yùn)行結(jié)果顯示給用戶。當(dāng)模型變化時(shí),視圖也作出相應(yīng)變化。視圖作用為:將模型中的數(shù)據(jù)以特定方式顯示給用戶,獲得用戶輸入;將用戶數(shù)據(jù)轉(zhuǎn)發(fā)給控制器;接收來自模型的“數(shù)據(jù)已更新”通知,并顯示信息;對(duì)數(shù)據(jù)顯示部分進(jìn)行抽象。
控制器是視圖和模型的接口。一方面,它處理來自視圖的輸入,將其解釋為系統(tǒng)能夠理解的對(duì)象,同時(shí)識(shí)別用戶動(dòng)作,將其解釋為對(duì)模型方法的調(diào)用;另一方面,它處理來自模型的事件,選擇適當(dāng)?shù)囊晥D為用戶提供反饋。控制器的作用為:抽象用戶交互;將用戶輸入映射為程序的動(dòng)作,并發(fā)送給模型;根據(jù)用戶輸入和模型的業(yè)務(wù)邏輯,選擇適當(dāng)?shù)囊晥D來顯示數(shù)據(jù)。
圖2 GVS組成結(jié)構(gòu)示意圖Fig.2 Schematic diagram of GVS structure
GVS由空間星座部分、地面監(jiān)控部分、用戶設(shè)備部分組成,其結(jié)構(gòu)如圖2所示??臻g星座部分利用地球同步軌道(geosynchronous orbit,GEO)衛(wèi)星和傾斜地球同步軌道(inclined geosynchronous satellite orbit,IGSO)衛(wèi)星作為導(dǎo)航星[10],它們共同轉(zhuǎn)發(fā)地面站發(fā)射的導(dǎo)航信號(hào)。地面監(jiān)控部分由分布在中國(guó)各地的測(cè)軌站和位于西安的地面站組成,測(cè)軌站通過衛(wèi)星雙向時(shí)間傳遞對(duì)導(dǎo)航星進(jìn)行精確定軌,精度優(yōu)于2 m[11],定軌數(shù)據(jù)傳遞給西安地面站,地面站有高精度原子鐘,穩(wěn)定度為1×10-14~1×10-15[12],地面站以原子鐘為時(shí)頻基準(zhǔn),將產(chǎn)生的導(dǎo)航電文發(fā)射給導(dǎo)航星,地面站同時(shí)接收導(dǎo)航星轉(zhuǎn)發(fā)的導(dǎo)航信號(hào),在地面站基帶中對(duì)導(dǎo)航信號(hào)進(jìn)行閉環(huán)控制。用戶設(shè)備部分接收導(dǎo)航星轉(zhuǎn)發(fā)的信號(hào),并產(chǎn)生位置、速度、時(shí)間等信息。
GVS定位原理同GPS類似,采用三星測(cè)距交會(huì)實(shí)現(xiàn)定位。不同之處在于GVS導(dǎo)航信號(hào)由地面站生成,導(dǎo)航星上不需要高性能的原子鐘,導(dǎo)航信號(hào)經(jīng)衛(wèi)星轉(zhuǎn)發(fā)器轉(zhuǎn)發(fā),播發(fā)給用戶。這種衛(wèi)星對(duì)導(dǎo)航信號(hào)轉(zhuǎn)發(fā)的工作模式破壞了衛(wèi)星天線相位中心出口處的載波頻率連續(xù)性和碼相位與載波相位一致性(簡(jiǎn)稱“碼載一致性”),為高精度載波相位授時(shí)帶來了困擾。
為實(shí)現(xiàn)高精度載波相位授時(shí),在西安地面站的基帶中必須實(shí)現(xiàn)對(duì)載波頻率連續(xù)性和碼載一致性的實(shí)時(shí)監(jiān)測(cè)。研究的軟件具備以下幾個(gè)方面功能:①基帶數(shù)據(jù)管理;②載波和碼指標(biāo)分析處理;③操作異常管理。
GVSTI軟件基于Windows操作系統(tǒng)、采用Qt開發(fā)環(huán)境進(jìn)行GVSTI軟件的開發(fā),具體開發(fā)運(yùn)行環(huán)境包括:C++開發(fā)語言,Qt4.7開發(fā)平臺(tái),Qt Creator2.4開發(fā)調(diào)試環(huán)境,Windows10操作系統(tǒng)。
GVSTI軟件架構(gòu)如圖3所示。軟件界面主要由view層構(gòu)建,包括界面控制、參數(shù)設(shè)置、指標(biāo)分析和數(shù)據(jù)編輯等。controller層負(fù)責(zé)view和model間的交互,控制軟件流程。model層主要負(fù)責(zé)載波和碼數(shù)據(jù)解析后的存儲(chǔ)和組織。數(shù)據(jù)源層DataSource負(fù)責(zé)接收和解析數(shù)據(jù)。四層架構(gòu)之間的耦合性很低,如果有新功能需求,分析新需求屬于那一層,改變此層而其他層次基本不用改動(dòng),只需要單元測(cè)試改動(dòng)層次就可以,節(jié)約了開發(fā)成本。例如當(dāng)數(shù)據(jù)來源更改時(shí),如數(shù)據(jù)來源從網(wǎng)絡(luò)更改為數(shù)據(jù)庫、串口、文件等來源時(shí),僅需改動(dòng)數(shù)據(jù)層即可。
軟件主要模塊組成圖如圖4所示。主要為界面及界面下的菜單模塊,分為文件操作、數(shù)據(jù)編輯、視圖、文件數(shù)據(jù)、數(shù)據(jù)分析、幫助。其中數(shù)據(jù)分析為軟件組成的核心部分。
圖3 GVSTI軟件架構(gòu)圖Fig.3 GVSTI software architecture diagram
圖4 軟件組成圖Fig.4 Software composition diagram
2.3.1 基于 Qt技術(shù)的實(shí)現(xiàn)
Qt是一個(gè)跨平臺(tái)的圖形用戶界面應(yīng)用程序框架,其特有的qmake編譯機(jī)制使得Qt具有“一次編寫,隨處編譯”功能,Qt編寫的源代碼可以不經(jīng)修改在多種不同操作系統(tǒng)平臺(tái)編譯運(yùn)行,包括Windows、Linux、Unix等。
圖5 信號(hào)與槽機(jī)制原理圖Fig.5 Schematic diagram of the signal and slot mechanism
在GVSTI軟件設(shè)計(jì)和實(shí)現(xiàn)中,利用了Qt的信號(hào)與槽機(jī)制,其原理如圖5所示,信號(hào)是操作Qt對(duì)象后,由操作系統(tǒng)產(chǎn)生的消息,槽是程序中的消息處理函數(shù),兩者通過Qt提供的connect函數(shù)操作連接。信號(hào)與槽機(jī)制實(shí)現(xiàn)了程序內(nèi)部模塊間的信息傳遞,包括視圖和模型、模型和控制器、控制器和視圖之間。Qt特有的信號(hào)與槽機(jī)制代替?zhèn)鹘y(tǒng)的回調(diào)技術(shù),使得Qt事件定義和響應(yīng)非常方便,最大限度弱化類之間的耦合性,為以后程序的功能擴(kuò)展奠定了基礎(chǔ)。
2.3.2 核心模塊設(shè)計(jì)
(1)解析數(shù)據(jù)。根據(jù)數(shù)據(jù)源的不同,分別解析數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)到程序可識(shí)別的不同類中。
(2)存儲(chǔ)數(shù)據(jù)。根據(jù)數(shù)據(jù)源的不同,設(shè)置不同的類分別存儲(chǔ)數(shù)據(jù),并注重?cái)?shù)據(jù)的封裝。
(3)組織數(shù)據(jù)。將存儲(chǔ)的數(shù)據(jù)對(duì)象按照不同的方式組織起來,提供給視圖層使用。
(4)處理數(shù)據(jù)。根據(jù)視圖層參數(shù)設(shè)置的不同,采用不同算法處理模型中存儲(chǔ)的數(shù)據(jù)。
針對(duì)以上核心模塊的不同功能,給出GVSTI軟件核心模塊及對(duì)應(yīng)的類如圖6所示。數(shù)據(jù)解析、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)組織、數(shù)據(jù)處理模塊對(duì)應(yīng)類分別為DataSource、DataInfo、DataInfoModel、QCustomPlot。
圖6 GVSTI軟件架構(gòu)及其對(duì)應(yīng)類Fig.6 GVSTI software architecture and its corresponding class
圖7 DataSource類設(shè)計(jì)狀態(tài)圖Fig.7 DataSource class design state diagram
DataSource類設(shè)計(jì)狀態(tài)圖如圖7所示。setDataPaht()函數(shù)獲取文件路徑,read()函數(shù)讀取文件數(shù)據(jù),parse()函數(shù)解析數(shù)據(jù),并將解析好的數(shù)據(jù)存放到DataInfo類中,模型類調(diào)用fetchData()函數(shù),組織解析好的數(shù)據(jù)。這里采用操作fetchData拿走數(shù)據(jù)而非getData獲取數(shù)據(jù),是為了有更多的空間容納將要到達(dá)的數(shù)據(jù)。模型對(duì)應(yīng)類DataInfoModel將解析的數(shù)據(jù)類DataInfo組織到模型當(dāng)中。
DataInfo類設(shè)計(jì)狀態(tài)圖如圖8所示。主要保存解析好的數(shù)據(jù),second()、minute()、hour()、day()、data()函數(shù)分別獲取秒、分、時(shí)、天、數(shù)據(jù)等信息。
圖8 DataInfo類設(shè)計(jì)狀態(tài)圖Fig.8 DataInfo class design state diagram
DataInfoModel類設(shè)計(jì)狀態(tài)圖如圖9所示。add(DataInfo)為add(QList
圖9 DataInfoModel類設(shè)計(jì)狀態(tài)圖Fig.9 DataInfoModel class design state diagram
圖10 DataProcess類設(shè)計(jì)狀態(tài)圖Fig.10 DataProcess class design state diagram
DataProcess類設(shè)計(jì)狀態(tài)圖如圖10所示。DataProcess類中的主要算法功能函數(shù)為onDataCarrierFreAccuracy()、onDataCarrierAllanVariance()、onDataCodeCarrierResidual()、onDataResidualFFT()、onDataResidualFitting(),通過這些功能函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的處理。
onDataCarrierFreAccuracy()函數(shù)實(shí)現(xiàn)載波頻率準(zhǔn)確性算法,主要利用地面站接收的載波頻率數(shù)據(jù)減去上行多普勒頻率推算衛(wèi)星出口處的實(shí)時(shí)載波頻率,上行多普勒頻率采用對(duì)碼相位數(shù)據(jù)求導(dǎo)方式獲得。
onDataCarrierAllanVariance()函數(shù)實(shí)現(xiàn)載波頻率穩(wěn)定性算法,首先獲取衛(wèi)星出口處的實(shí)時(shí)載波頻率數(shù)據(jù),然后利用阿蘭方差公式計(jì)算載波頻率穩(wěn)定性。
onDataCodeCarrierResidual()函數(shù)實(shí)現(xiàn)碼載一致性算法,在數(shù)據(jù)解析后,直接將碼相位減去載波相位,得到衛(wèi)星出口處的碼載一致性。
onDataResidualFFT()函數(shù)實(shí)現(xiàn)碼載一致性的快速傅里葉變換,首先獲得碼載一致性殘差數(shù)據(jù),采用FFTW[13](fastest fourier transform in the west)軟件包實(shí)現(xiàn),該軟件包由麻省理工學(xué)院Frigo M博士和Johoson S G博士開發(fā),完全免費(fèi),MATLAB中的離散傅里葉變換即調(diào)用FFTW實(shí)現(xiàn)。
onDataResidualFitting()函數(shù)實(shí)現(xiàn)碼載一致性的數(shù)據(jù)擬合,首先獲得碼載一致性殘差數(shù)據(jù),采用高斯消去法進(jìn)行碼載一致性數(shù)據(jù)擬合。
圖11 核心模塊交互序列圖Fig.11 Core module interaction sequence diagram
核心模塊的交互如圖11所示。DataSource類首先通過setDataPath()函數(shù)獲取數(shù)據(jù),然后通過read()函數(shù)對(duì)數(shù)據(jù)源進(jìn)行讀取,之后通過parse()函數(shù)對(duì)數(shù)據(jù)源進(jìn)行解析,而后將解析數(shù)據(jù)存入DataInfo類中,最后通過fetchData()函數(shù)拿走數(shù)據(jù)源;DataInfoModel模型將fetchData()函數(shù)獲得的數(shù)據(jù)添加到模型中,DataProcess類通過getDataInfoModel()函數(shù)獲得模型,并通過onDataCarrierFreAccuracy()函數(shù)得到衛(wèi)星出口處載波頻率數(shù)據(jù),DataProcess類中的其他算法函數(shù)同onDataCarrierFreAccuracy()函數(shù)類似,在序列圖中省略。
將開發(fā)的軟件應(yīng)用于GVS基帶中,對(duì)GVS衛(wèi)星轉(zhuǎn)發(fā)器發(fā)射天線相位中心出口處載波頻率準(zhǔn)確性、載波頻率穩(wěn)定性、碼載一致性、碼載一致性數(shù)據(jù)擬合、碼載一致性頻域特性進(jìn)行實(shí)驗(yàn),軟件界面及實(shí)驗(yàn)結(jié)果如圖12所示。
經(jīng)過圖12分析可知,GVS衛(wèi)星轉(zhuǎn)發(fā)器發(fā)射天線相位中心出口處載波頻率準(zhǔn)確性和碼載一致性為10-10量級(jí),載波頻率在1 000 s穩(wěn)定性為10-4量級(jí),穩(wěn)定性較差,碼載一致性殘差數(shù)據(jù)擬合良好,可以為地面站控制衛(wèi)星出口處碼載一致性提供數(shù)據(jù)支持,碼載一致性頻域噪聲主要分布在0.1 Hz以內(nèi),這對(duì)基帶從頻域入手進(jìn)行碼載一致性殘差的反饋控制,有重要的指導(dǎo)意義。
軟件可以實(shí)現(xiàn)GNSS驗(yàn)證系統(tǒng)衛(wèi)星出口處載波頻率和碼載一致性的分析,為GVS載波相位高精度授時(shí)走向工程化提供了一定技術(shù)支持。
提出了一種基于MVC模式的GVSTI軟件設(shè)計(jì)思想和實(shí)現(xiàn)方法,并將研發(fā)的軟件應(yīng)用于GVS基帶中。實(shí)驗(yàn)結(jié)果證明該軟件可以完成載波授時(shí)關(guān)鍵指標(biāo)的定量分析。采用MVC模式使得軟件層次明晰,便于快速開發(fā)和后續(xù)維護(hù)升級(jí),對(duì)其他系統(tǒng)的軟件研發(fā)具有借鑒意義。
圖12 GVSTI軟件實(shí)驗(yàn)結(jié)果Fig.12 GVSTI software experiment results