郭紹光 李紀(jì)云 朱人杰 勞保強(qiáng) 陸 揚(yáng) 楊 穎
(1 中國(guó)科學(xué)院上海天文臺(tái)上海200030)
(2 中國(guó)科學(xué)院射電天文重點(diǎn)實(shí)驗(yàn)室南京210023)
(3 中國(guó)科學(xué)院國(guó)家授時(shí)中心西安710600)
甚長(zhǎng)基線干涉測(cè)量(Very Long Baseline Interferometry, VLBI)是目前角分辨率最高的天文觀測(cè)技術(shù), 通過這種技術(shù), 世界各地許多射電望遠(yuǎn)鏡的信號(hào)可以組合在一起, 產(chǎn)生極高的角分辨率, 使其在天文觀測(cè)、大地測(cè)量和深空探測(cè)中得到了廣泛的應(yīng)用[1–3]. 作為在VLBI接收系統(tǒng)中重要的數(shù)字設(shè)備之一的數(shù)字基帶轉(zhuǎn)換器(Digital Base-Band Converter, DBBC)承擔(dān)著頻段選擇、數(shù)據(jù)采集等任務(wù)[4], 其把接收機(jī)接收的寬帶中頻信號(hào)數(shù)字化后分成多個(gè)通道并轉(zhuǎn)換為基帶信號(hào), 以供相關(guān)處理機(jī)進(jìn)行后續(xù)處理. 基帶信號(hào)格式比如MarkIV、Mark5B和VDIF(VLBI Data Interface Format)1https://www.aoc.nrao.edu/software/sched/labelSECRECSYSRecordingSystems.html, 是目前國(guó)際上VLBI領(lǐng)域使用最普遍的格式. 射電天文VLBI基帶數(shù)據(jù)基本都遵循一定的規(guī)則, 每個(gè)數(shù)據(jù)幀包含幀頭和數(shù)據(jù), 或者同時(shí)包含原始二進(jìn)制數(shù)據(jù)和ASCII描述文件. 雖然規(guī)則相同, 但細(xì)節(jié)不同. 因此, 在使用這些數(shù)據(jù)之前, 我們應(yīng)該先對(duì)這些原始數(shù)據(jù)進(jìn)行解碼和分析, 然后將數(shù)據(jù)發(fā)送到硬件相關(guān)處理機(jī)[5]或軟件相關(guān)處理機(jī)[6–7]進(jìn)行相關(guān)生成可見度數(shù)據(jù).
為了滿足我國(guó)后續(xù)深空探測(cè)及測(cè)地觀測(cè)對(duì)不同VLBI數(shù)據(jù)格式的支持, 本文描述了一個(gè)讀取解析射電基帶數(shù)據(jù)的框架庫(kù), 以簡(jiǎn)化數(shù)據(jù)處理使其標(biāo)準(zhǔn)化. 該框架庫(kù)名為L(zhǎng)ibrary for Baseband data, 簡(jiǎn)稱lbb軟件庫(kù).lbb軟件庫(kù)對(duì)不同的基帶數(shù)據(jù)將提供統(tǒng)一的讀寫接口, 方便用戶調(diào)用, 并支持通過后綴名與解析幀頭信息來(lái)自動(dòng)判定數(shù)據(jù)格式并調(diào)用解析函數(shù). 框架支持添加新的數(shù)據(jù)格式, 只需按照標(biāo)準(zhǔn)格式添加一些新的代碼格式說(shuō)明.lbb軟件庫(kù)使用C語(yǔ)言開發(fā), 可以運(yùn)行在多數(shù)類Unix系統(tǒng)中.
本文第2節(jié)將概述現(xiàn)有的射電天文基帶數(shù)據(jù)格式, 第3節(jié)將對(duì)lbb軟件庫(kù)的設(shè)計(jì)和實(shí)現(xiàn)進(jìn)行詳細(xì)闡述, 第4節(jié)將使用真實(shí)數(shù)據(jù)進(jìn)行實(shí)驗(yàn)測(cè)試分析, 最后對(duì)本文進(jìn)行總結(jié)和展望.
首先對(duì)基帶數(shù)據(jù)記錄系統(tǒng)進(jìn)行介紹, 然后對(duì)基帶數(shù)據(jù)進(jìn)行闡述.
數(shù)據(jù)終端采集和記錄系統(tǒng)是VLBI的重要部分, 采集系統(tǒng)負(fù)責(zé)數(shù)據(jù)的采集和編碼, 記錄系統(tǒng)負(fù)責(zé)對(duì)終端的輸出數(shù)據(jù)進(jìn)行高速的存儲(chǔ). 為了應(yīng)對(duì)未來(lái)對(duì)高輸出速率、多種記錄模式、海量數(shù)據(jù)的要求, 終端記錄系統(tǒng)一直在更新迭代. 目前主流的為美國(guó)的Mark系列.
美國(guó)從1967年開始研發(fā)記錄系統(tǒng), 第1代為Mark1, 記錄速率僅為1 Mbps, 隨著技術(shù)的發(fā)展, 從2007年開始, 磁帶系統(tǒng)被硬盤媒介代替, 記錄速率也得到了質(zhì)的提高. 因?yàn)镸ark5B系統(tǒng)使用VLBI標(biāo)準(zhǔn)接口(VLBI Standard Interface, VSI)來(lái)記錄數(shù)據(jù), 改進(jìn)了磁帶系統(tǒng)遺留下來(lái)的格式化問題. 在每個(gè)模組中包含8個(gè)硬盤, 此時(shí)的記錄速率達(dá)到了1 Gbps. 從2013年初開始, VLBA (Very Long Baseline Array)逐漸停止使用Mark5A系統(tǒng), 并將大部分工程轉(zhuǎn)移到Mark5C系統(tǒng). 其他一些天文臺(tái)也在逐步遷移到Mark5C系統(tǒng)[8–9]. 同時(shí)隨著國(guó)際和國(guó)內(nèi)新開發(fā)的數(shù)字基帶轉(zhuǎn)換器, 比如美國(guó)的DBE(Digital Backend)、歐洲的EVN (European VLBI Network) DBBC[10]以及我國(guó)的CDAS2 (Chinese Data Acquisition System 2), 均不再使用輸出速率受限的VSI接口,而是使用10GbE網(wǎng)絡(luò)接口, 數(shù)據(jù)記錄設(shè)備可以采用具有相關(guān)接口的設(shè)備或通用存儲(chǔ)設(shè)備[11–12]. 經(jīng)過50 yr的不斷更新和發(fā)展,目前已經(jīng)研發(fā)升級(jí)到了Mark6系統(tǒng),支持16 Gbps(4 Gbps/端口)的穩(wěn)定記錄速率和32 Gbps的爆發(fā)記錄速率[8].
除了美國(guó)的Mark系列系統(tǒng),日本使用自研的K系列系統(tǒng)[13],澳大利亞使用類PCEVN(Personal Computer European VLBI Network)系統(tǒng).中國(guó)也使用自研的VLBI網(wǎng)絡(luò)(China VLBI Network, CVN)記錄系統(tǒng)系列CVRS(China VLBI Recorder System), CVRS目前已經(jīng)最大支持到4 Gbps/臺(tái)站的記錄速率, 在探月工程及其他項(xiàng)目中已經(jīng)得到應(yīng)用.
下面將主要針對(duì)最常用的Mark5B和VDIF的基帶數(shù)據(jù)進(jìn)行闡述.
Mark5B數(shù)據(jù)格式為基于硬盤的VLBI數(shù)據(jù)系統(tǒng)Mark5B的輸出格式. 采樣數(shù)據(jù)類型為實(shí)數(shù), 且只有一種固定格式, 該數(shù)據(jù)格式的每一幀包含一個(gè)16字節(jié)的幀頭和10000字節(jié)的數(shù)據(jù), 幀頭信息中第1個(gè)字為同步字, 固定為0xEDDEADAB (大端模式, 小端反之), 第2個(gè)字的比特0到比特14為從0開始的秒內(nèi)幀號(hào), 第3個(gè)字以及第4個(gè)字為VLBI的BCD (Binaray-Coded Decimal)碼(精確到1 ms)和循環(huán)冗余校驗(yàn)碼(Cyclical Redundancy Check Code, CRCC).
Mark5B數(shù)據(jù)支持2N比特采樣, 其中0 ≥N≥5, 并且每一個(gè)秒內(nèi)幀號(hào)為0的數(shù)據(jù)均為該時(shí)間的精確起點(diǎn)(精確到秒). 通道數(shù)為有效比特流除以每次采樣的比特?cái)?shù)(目前通常設(shè)置為1或者2), 當(dāng)前版本假定所有有效比特流均有效. 另外Mark5B系統(tǒng)也會(huì)輸出有效比特流掩碼、秒內(nèi)幀號(hào)及其他觀測(cè)元數(shù)據(jù), 當(dāng)前l(fā)bb軟件庫(kù)版本暫時(shí)不讀取這些信息, 需要指定這些參數(shù).
2.3.1 VDIF簡(jiǎn)介
隨著新的VLBI數(shù)據(jù)采集與存儲(chǔ)系統(tǒng)的發(fā)展, 與日俱增的數(shù)據(jù)交互需求以及實(shí)時(shí)與近實(shí)時(shí)的高速網(wǎng)絡(luò)的需要, 都需要一個(gè)新的數(shù)據(jù)格式來(lái)解決這些問題, 此時(shí)出現(xiàn)了繼VSI硬件接口協(xié)議(VSI Hardware, VSI-H)和VSI軟件接口協(xié)議(VSI Software, VSI-S)之后的VSI-E接口協(xié)議(其中E是electronic-VLBI的含義), VSI-E基于標(biāo)準(zhǔn)的RTP/RTCP網(wǎng)絡(luò)協(xié)議, 指定了數(shù)據(jù)格式和數(shù)據(jù)傳輸協(xié)議. 但由于VSI-E的復(fù)雜性, 并未被VLBI社區(qū)正式采納. 此時(shí)就出現(xiàn)了VDIF, 該格式最早在2009年定義, 主要為了標(biāo)準(zhǔn)化VLBI數(shù)據(jù)的傳輸和存儲(chǔ)并提升VLBI基帶數(shù)據(jù)的可擴(kuò)展性, VDIF的目標(biāo)與VSI-E不太一樣, VDIF不定義數(shù)據(jù)傳輸協(xié)議, 僅僅定義了一種不依賴于傳輸協(xié)議的數(shù)據(jù)交換格式, 這個(gè)格式匹配所有的VLBI數(shù)據(jù)傳輸, 包含實(shí)時(shí)與近實(shí)時(shí)的e-VLBI. VDIF的可擴(kuò)展性主要體現(xiàn)在自定義擴(kuò)展字, 可用于存儲(chǔ)下列數(shù)據(jù)組合:
?Fully Corner-Turned Data (FCTD): 即一個(gè)thread包含多個(gè)通道;
?Not Corner-Turned Data (NCTD): 即多個(gè)threads, 每個(gè)thread包含一個(gè)通道;
?Partially Corner-Turned Data (PCTD): 即多個(gè)threads, 每個(gè)thread含多個(gè)通道.
上面的3種數(shù)據(jù)理論上可以通過軟件進(jìn)行重新組合來(lái)滿足相關(guān)處理需要的, 可以很方便地將FCTD轉(zhuǎn)換為NCTD和PCTD. 但是在將NCTD和PCTD的數(shù)據(jù)轉(zhuǎn)換為FCTD數(shù)據(jù)時(shí), 可能存在數(shù)據(jù)有效標(biāo)記位無(wú)法表明VDIF數(shù)據(jù)是否有效的問題, 因?yàn)槎鄠€(gè)threads的數(shù)據(jù)標(biāo)記位可能是不同的, 這就會(huì)引起部分?jǐn)?shù)據(jù)權(quán)重不對(duì)造成的相關(guān)處理問題.
考慮到易識(shí)別性, VDIF文件的命名一般以vdif作為文件的后綴名, 格式為
2.3.2 VDIF數(shù)據(jù)格式描述
與2.2節(jié)描述的Mark5B格式類似, VDIF數(shù)據(jù)文件也有一系列的數(shù)據(jù)幀組成. 每個(gè)數(shù)據(jù)幀由幀頭(Data Frame Header)和數(shù)據(jù)(Data Array)組成, 統(tǒng)稱為數(shù)據(jù)幀(VDIF Data Frame).
VDIF的數(shù)據(jù)來(lái)源如果只有一臺(tái)設(shè)備, 比如DBBC或者CDAS2[8], 這種情況下數(shù)據(jù)是嚴(yán)格意義上按照時(shí)間來(lái)排序的, 但是如果有多路輸入數(shù)據(jù)流, 并且數(shù)據(jù)傳輸經(jīng)過了交換機(jī)或者網(wǎng)絡(luò)就不能保證數(shù)據(jù)到達(dá)的順序了. VDIF數(shù)據(jù)不強(qiáng)制要求數(shù)據(jù)幀的次序, 但是對(duì)于某些比較舊的相關(guān)處理設(shè)備可能有這個(gè)需要, 目前仍舊在更新的軟件基本可以處理并對(duì)部分?jǐn)?shù)據(jù)進(jìn)行重新排序處理[7].
如2.3.1節(jié)所述, 數(shù)據(jù)包含單通道與多通道模式, 下面將分別闡述. 對(duì)于單通道而言,VDIF的采樣比特?cái)?shù)目可以從1到32, 實(shí)數(shù)按照比特采樣遞增, 而復(fù)數(shù)是按照成對(duì)比特采樣出現(xiàn)的, 所以對(duì)于復(fù)數(shù)形式的數(shù)據(jù)而言, 最大支持的比特?cái)?shù)其實(shí)為16, 如果大于該值,將會(huì)占用2個(gè)相鄰的字來(lái)描述. 雖然VDIF不強(qiáng)制要求采樣比特?cái)?shù), 但對(duì)于標(biāo)準(zhǔn)的VLBI而言, 一般取1–4, 6–8和11–32.
對(duì)于多通道而言, 為了與VLBI數(shù)據(jù)格式兼容, 數(shù)據(jù)只支持2n個(gè)通道, 2k個(gè)采樣比特(其中n與k均為整數(shù)), 最大的支持通道為231, 最大的采樣比特為32. 對(duì)于多通道而言,是按照一個(gè)完整的采樣來(lái)描述的, 比如對(duì)于所有通道的一次實(shí)數(shù)采樣, 包含2n×2k個(gè)比特. 對(duì)于所有通道的一次復(fù)數(shù)采樣, 包含2×2n×2k個(gè)比特.
考慮到VDIF的數(shù)據(jù)流最大可以支持1024個(gè)數(shù)據(jù)線程, 通常的使用方法為一個(gè)數(shù)據(jù)線程包含一個(gè)通道或者多個(gè)通道. 為了區(qū)分多線程的數(shù)據(jù)流, 定義了simple和compound數(shù)據(jù)流. 其中simple數(shù)據(jù)流包含2種類型: (1)含有相同采樣率和采樣比特?cái)?shù)的一個(gè)或多個(gè)單通道線程; (2)含有相同通道數(shù)、采樣率和采樣比特?cái)?shù)的一個(gè)或多個(gè)多通道線程. 對(duì)于simple類型的數(shù)據(jù)而言, 每個(gè)數(shù)據(jù)線程必須包含相同的通道數(shù)、采樣比特?cái)?shù)和數(shù)據(jù)類型(實(shí)數(shù)或者復(fù)數(shù))、秒內(nèi)幀號(hào)、數(shù)據(jù)幀頭和數(shù)據(jù)負(fù)載長(zhǎng)度. 對(duì)于描述VDIF數(shù)據(jù)一般格式為-
2.3.3 VDIF文件幀頭
與Mark5B格式的幀頭不同, VDIF的幀頭由8個(gè)32位的字共計(jì)32個(gè)字節(jié)(legacy VDIF除外, 依舊為16字節(jié)長(zhǎng))組成, 不同于Mark5B, VDIF數(shù)據(jù)的長(zhǎng)度從32字節(jié)到134 M字節(jié)不等,由幀頭信息確定.所有的信息均為小端設(shè)置. 在同一個(gè)觀測(cè)中,所有的VDIF文件幀頭的前4個(gè)字遵循同樣的定義規(guī)則, 但是后面的4個(gè)字由用戶自定義. 這4個(gè)字的布局由文件擴(kuò)展數(shù)據(jù)版本(Extended Data Version, EDV)來(lái)決定.
幀頭的第1個(gè)字包含從參考紀(jì)元開始的秒數(shù), 第2個(gè)字包含參考?xì)v元及從0開始的秒內(nèi)幀號(hào), 第3個(gè)字包含VDIF的版本號(hào)、數(shù)據(jù)通道以及數(shù)據(jù)幀長(zhǎng), 第4個(gè)字包含采樣比特?cái)?shù)、線程號(hào)、臺(tái)站號(hào)等. 需要注意的是對(duì)于臺(tái)站數(shù)目巨大的項(xiàng)目, 比如平方公里陣列望遠(yuǎn)鏡(Square Kilometre Array, SKA)[13], 該值將作為數(shù)字對(duì)待, 這種情況下, 8比特的值應(yīng)該大于483https://www.skatelescope.org/. 后面的4個(gè)字為VDIF的擴(kuò)展字(EDV), 這里對(duì)于用戶自己生成的數(shù)據(jù)很有幫助, 通過指定EDV的版本也可以使得解碼軟件自動(dòng)識(shí)別數(shù)據(jù)格式, 目前提交的擴(kuò)展版本參考圖1, 如果不使用這4個(gè)字, 那么EDV將被設(shè)置為0, 其他的擴(kuò)展也被設(shè)置為全0. 目前EDV已經(jīng)有多個(gè)版本, 如圖1所示, 詳細(xì)的解析參考2.3.2節(jié).
圖1 VDIF擴(kuò)展數(shù)據(jù)版本示意圖(圖中縮寫見3.2.2節(jié)定義)Fig.1 Scheme of VDIF extended data version (abbreviations are defined in Sec. 3.2.2)
軟件的開發(fā)受到其他一些軟件的啟發(fā), 比如mark5access4https://github.com/demorest/mark5access, baseband5https://github.com/mhvk/baseband等. 考慮到可移植性, 軟件全部使用C語(yǔ)言開發(fā)完成, 不依賴于任何程序庫(kù), 經(jīng)測(cè)試可以在主流發(fā)行版上編譯運(yùn)行并使用. 考慮到易用性, 軟件配套發(fā)布了基于Python的圖形用戶界面(Graphical User Interface, GUI)供用戶方便調(diào)用. 軟件數(shù)據(jù)解析核心代碼使用C語(yǔ)言開發(fā), 保證了軟件的運(yùn)行效率, GUI開發(fā)使用Python, 提高了開發(fā)效率.lbb軟件庫(kù)的整體架構(gòu)如圖2所示. 當(dāng)前l(fā)bb軟件庫(kù)支持的基帶數(shù)據(jù)格式為Mark5B和VDIF數(shù)據(jù)格式, 目前這兩種數(shù)據(jù)格式最為通用. 探月工程中CVN的4個(gè)臺(tái)站使用Mark5B數(shù)據(jù)格式, VLBI測(cè)地觀測(cè)中使用VDIF數(shù)據(jù)格式. 最近已經(jīng)開展了基于Mark6記錄系統(tǒng)的觀測(cè)實(shí)驗(yàn)[8].
圖2 lbb軟件庫(kù)架構(gòu)示意圖Fig.2 General view of lbb architecture
由于終端基帶數(shù)據(jù)的格式基本為幀頭及數(shù)據(jù)組成的數(shù)據(jù)幀, 所以lbb軟件庫(kù)主要分為解析幀頭和解析數(shù)據(jù)兩種情況.
lbb軟件庫(kù)主要提供了9個(gè)API (Application Programming Interface)供用戶調(diào)用, 分別為:
?read\_frame: 讀取數(shù)據(jù)幀(自動(dòng)判定數(shù)據(jù)格式, 包含幀頭與數(shù)據(jù));
?read\_frame\_header: 讀取數(shù)據(jù)幀頭(自動(dòng)判定數(shù)據(jù)格式);
?read\_frame\_data: 讀取數(shù)據(jù)(自動(dòng)判定數(shù)據(jù)格式);
?read\_mark5b\_frame: 讀取Mark5B數(shù)據(jù)幀(包含幀頭與數(shù)據(jù));
?read\_mark5b\_frame\_header: 讀取Mark5B幀頭;
?read\_mark5b\_frame\_data: 讀取Mark5B數(shù)據(jù);
?read\_vdif\_frame: 讀取VDIF數(shù)據(jù)幀(包含幀頭與數(shù)據(jù));
?read\_vdif\_frame\_header: 讀取VDIF幀頭;
?read\_vdif\_frame\_data: 讀取VDIF數(shù)據(jù);
除了這9個(gè)主要的API以外, 還根據(jù)幀頭信息增加了諸如read\_mark5b\_frame\_number (讀取Mark5B幀號(hào))、read\_mark5b\_mjd (讀取Mark5B簡(jiǎn)化儒略日)等函數(shù).
3.2.1 Mark5B數(shù)據(jù)格式解析
Mark5B一個(gè)數(shù)據(jù)幀為10016字節(jié), 超過了最大傳輸單元(Maximum Transmission Unit, MTU)的限制, 一般需要分為兩組數(shù)據(jù)來(lái)傳輸, 每組數(shù)據(jù)包含5008字節(jié), 這就導(dǎo)致數(shù)據(jù)可能不從每一個(gè)起始幀開始, 也可能不是一個(gè)整幀結(jié)束, 所以需要首先定位到第1個(gè)幀以及最后一幀的偏移量. 為了避免數(shù)據(jù)的跳幀情況, 此處的方法為確認(rèn)連續(xù)的3幀均為正常幀, 即認(rèn)為數(shù)據(jù)是連續(xù)的, 且第1幀為數(shù)據(jù)的起始幀.
圖3和4分別展示了定位第1幀以及最后一幀的示意圖, 其中紅色為可能的偏移量(該值可能為0), 分別在第1幀和最后一幀出現(xiàn), 綠色為幀頭信息(Frame Header, FH), 黃色表示10000字節(jié)的數(shù)據(jù)信息, 中間為多組數(shù)據(jù)幀.
圖3 Mark5B數(shù)據(jù)的第1幀偏移值Fig.3 First frame offset of Mark5B data
圖4 Mark5B數(shù)據(jù)的最后一幀偏移量Fig.4 Last frame offset of Mark5B data
在解析定位到數(shù)據(jù)幀頭的同時(shí), 實(shí)際的數(shù)據(jù)也會(huì)存在系統(tǒng)緩存中, 在每次重新定位到下一幀的同時(shí)將同一秒的數(shù)據(jù)寫入到一個(gè)文件中直到到達(dá)數(shù)據(jù)幀尾. 這個(gè)數(shù)據(jù)將用于后續(xù)的相關(guān)處理.
3.2.2 VDIF數(shù)據(jù)格式解析
如2.3.3節(jié)所述目前VDIF的解析支持5種擴(kuò)展數(shù)據(jù)格式, 對(duì)于VDIF格式的數(shù)據(jù), 一般認(rèn)定第1幀即為起始幀或者作為一個(gè)偏移參數(shù)來(lái)進(jìn)行處理, 對(duì)于VDIF的擴(kuò)展版本也可以通過同步字來(lái)進(jìn)行識(shí)別和判斷.
VDIF數(shù)據(jù)的解析流程如圖5所示, 其中FS為Frame Size的簡(jiǎn)稱, 為幀長(zhǎng)度; FH為Frame Header的簡(jiǎn)稱, 為幀頭, 正常情況下如果不指定offset, 默認(rèn)前32字節(jié)為第1幀的幀頭信息; MFS為Max Frame Size的簡(jiǎn)稱, 一般設(shè)定為20組最大FS的數(shù)據(jù)大小; 詳細(xì)的流程為, 首先程序?qū)?duì)輸入的參數(shù)進(jìn)行解析, 如果對(duì)數(shù)據(jù)的偏移有指定, 需要跳過該部分?jǐn)?shù)據(jù)到達(dá)VDIF數(shù)據(jù)的幀頭部分, 解析的參數(shù)也需要根據(jù)2.3.3節(jié)所述滿足一定的條件, 比如數(shù)據(jù)的幀長(zhǎng)必須是8的倍數(shù), 且其表示的數(shù)據(jù)大小需要在32 kB到134 MB之間, 否則將作為異常處理, 另外程序還指定了詳細(xì)的解析級(jí)別用于后續(xù)的數(shù)據(jù)完備性分析和檢查.
圖5 VDIF文件處理流程Fig.5 Processing flow of VDIF file
目前VDIF的EDV版本有5種, 在解析出EDV版本后, 不同的版本有不同的處理流程, 其中對(duì)于使用Mark6設(shè)備將Mark5B在線轉(zhuǎn)換為VDIF數(shù)據(jù)的流程單獨(dú)處理, 各個(gè)版本EDV的具體描述信息如下. 當(dāng)EDV的版本為1時(shí), 表示日本國(guó)家信息與通訊技術(shù)研究所(National Institute of Information and Communications Technology, NICT)定義的擴(kuò)展版本, 其中KM(kHz MHz)標(biāo)記采樣率占1比特, 為0時(shí)表示kHz, 為1時(shí)表示MHz,這主要是因?yàn)镵5/VSSP系統(tǒng)的采樣率從40 kHz到64 MHz[14]; Sampling Rate根據(jù)KM的單位, 最大可以表示超過100 GHz的采樣率; Word5為同步字0XACABFEED, 用于查找VDIF文件的幀頭位置; Word6和Word7共計(jì)8個(gè)字節(jié)用于描述數(shù)據(jù)采集系統(tǒng)或者臺(tái)站的信息.
當(dāng)EDV的版本為2時(shí), 表示阿塔卡瑪毫米/亞毫米波陣列望遠(yuǎn)鏡(The Atacama Large Millimeter/submillimeter Array, ALMA)定義的擴(kuò)展版本, ALMA使用所謂的相位接口卡(Phasing Interface Cards, PIC)連接到基線觀測(cè)相關(guān)處理中心輸出數(shù)據(jù). 其中Magic/Sync為ALMA測(cè)試的子版本, 可以通過這個(gè)參數(shù)來(lái)定義PICs觀測(cè)、Mark6測(cè)試等其他應(yīng)用; Word5用于指定PIC的狀態(tài)或者定位Mark6的狀態(tài), Word6和Word7分別為VDIF傳輸協(xié)議(VDIF Transport Protocol,VTP)封包序列數(shù)(Packet Sequence Number,PSN)的最低有效位(Least significant word, LSW)和最高有效位(Most significant word, MSW).
當(dāng)EDV的版本為3時(shí), 表示VLBA/VLA (The Very Large Array)與GBT (Green Bank Telescope)定義擴(kuò)展版本, 對(duì)于這個(gè)版本, 有一些默認(rèn)設(shè)置, 比如每個(gè)VDIF數(shù)據(jù)幀長(zhǎng)為5000, 所以每幀的長(zhǎng)度為5032字節(jié), 每個(gè)VDIF線程包含一個(gè)單獨(dú)的基帶通道; 采樣率與同步字采用NICT的版本, 這個(gè)版本新增了數(shù)字后端優(yōu)化頻率(注意不是天空頻率), 對(duì)于應(yīng)用在美國(guó)國(guó)立射電天文臺(tái)(National Radio Astronomy Observatory,NRAO)的ROACH數(shù)字后端系統(tǒng)(ROACH Digital Backend System, RDBE)而言, 這個(gè)值的范圍為512 MHz到1024 MHz. 第6個(gè)字表示本振頻率(Local Oscillator Intermediate Frequency, LOIF), IF表示中頻輸入的數(shù)字后端設(shè)備, Sub Band表示DBE的子通道, ESB (Electronic SideBand)表示IF的上邊帶(為1)與下邊帶(為0). 進(jìn)階的Major Rev(Revision)和Minor Rev為EDV3的主版本修訂號(hào)和次版本修訂號(hào), 后面的字節(jié)表示固件的類型與版本, 其中對(duì)于Personality Type而言, 0X00表示多相濾波器組(polyphase filter banks, PFB), 0X80表示數(shù)字下變頻器(Digital Down Converter, DDC) Mark5B,0X81表示DDC complex, 0X82表示DDC VDIF.
當(dāng)EDV的版本為4時(shí), Validity mask length為1到64的整數(shù), 表示數(shù)據(jù)有效比特的掩碼, 另外還有16比特用于預(yù)留將來(lái)的功能擴(kuò)展, 其中同步字為32比特的0XACABFEED,與EDV1和EDV3一致, 位于第5個(gè)字, 用于確保VDIF數(shù)據(jù)流的同步, 第6和7個(gè)字表示各個(gè)通道的數(shù)據(jù)是否有效, 64比特分別對(duì)應(yīng)64個(gè)通道, 設(shè)置為1表示有效, 反之無(wú)效.
其實(shí)除了上面描述的4個(gè)擴(kuò)展版本, 還有一個(gè)版本號(hào)為0XAB的擴(kuò)展版本. 在Mark6的處理中, 會(huì)將輸入的Mark5B格式的數(shù)據(jù)直接轉(zhuǎn)換為VDIF格式[8], 因?yàn)镸ark5B有16字節(jié)的幀頭和10000字節(jié)的數(shù)據(jù), 網(wǎng)絡(luò)傳輸分為2組5008的數(shù)據(jù). 在轉(zhuǎn)換為VDIF格式時(shí), 16字節(jié)的幀頭會(huì)復(fù)制一份作為32字節(jié)的VDIF格式的幀頭, 10000字節(jié)的數(shù)據(jù)緊隨其后, 此時(shí)數(shù)據(jù)幀為10032字節(jié), 因?yàn)镸ark5B的同步字為0XABADDEED, 所以版本號(hào)為0XAB.
在VDIF進(jìn)行解析的時(shí)候還有一點(diǎn)需要特別注意, VDIF的數(shù)據(jù)是可以不連續(xù)的, 比如對(duì)于脈沖星觀測(cè)而言, 只有在有pulsar pulse時(shí)才有數(shù)據(jù), 所以對(duì)于此處需要特別注意,此時(shí)就需要與當(dāng)時(shí)的觀測(cè)綱要文件進(jìn)行比對(duì)以確定數(shù)據(jù)的詳細(xì)情況.
考慮到軟件的易用性, 也開發(fā)了相應(yīng)的圖形用戶界面GUI, 該GUI運(yùn)行環(huán)境為L(zhǎng)inux發(fā)行版本. 用戶調(diào)用操作流程圖如圖6所示.
圖6 基帶數(shù)據(jù)讀取識(shí)別流程圖Fig.6 Flow chart of reading and identifying baseband data
該GUI界面使用Python語(yǔ)言開發(fā), Python是一個(gè)互動(dòng)性及面向?qū)ο蟮哪_本語(yǔ)言,開發(fā)速度快. 該用戶界面的開發(fā)使用PyQt6https://www.riverbankcomputing.com/software/pyqt/intro、matplotlib7https://matplotlib.org/等Python模塊. 如圖7所示,GUI軟件目前具備的功能分別為: 輸入文件區(qū)域、輸出信息區(qū)域、控制區(qū)域及數(shù)據(jù)完整性可視化結(jié)果分析區(qū)域. 其中輸入文件區(qū)域?yàn)檩斎虢?jīng)數(shù)據(jù)處理后的結(jié)果文件; 輸出信息部分主要包括數(shù)據(jù)的時(shí)間信息和幀頭信息; 控制顯示區(qū)域主要為切換不同時(shí)間段及不同幀號(hào)并顯示當(dāng)前進(jìn)度; 可視化區(qū)域主要為可視化輸出當(dāng)前數(shù)據(jù)的分析結(jié)果, 方便用戶根據(jù)可視化區(qū)域快速定位數(shù)據(jù)問題.
lbb軟件庫(kù)及相關(guān)測(cè)試軟件已經(jīng)在Linux系統(tǒng)的發(fā)行版CentOS7、Ubuntu18, 同時(shí)也在MacOSX上進(jìn)行了測(cè)試. 鑒于lbb軟件庫(kù)的設(shè)計(jì), 該軟件庫(kù)可以運(yùn)行在大部分的主流Linux發(fā)行版上.
為了驗(yàn)證lbb軟件庫(kù)的通用性, 本章節(jié)將展示lbb軟件庫(kù)在探月工程VLBI測(cè)軌系統(tǒng)硬件相關(guān)處理機(jī)配置項(xiàng)的使用以及與mark5access、baseband相比所新增的功能和效率分析. baseband為加拿大多倫多大學(xué)Marten H. van Kerkwijk教授開發(fā)的一套基于Python的基帶數(shù)據(jù)庫(kù); mark5access為美國(guó)國(guó)家射電天文臺(tái)Walter Bristen教授及一批天文學(xué)家共同維護(hù)開發(fā)的基帶數(shù)據(jù)庫(kù), 目前已經(jīng)用于軟件相關(guān)處理機(jī)DiFX (Distributed FX software correlator)[7].
圖7 VDIF數(shù)據(jù)分析用戶界面Fig.7 Graphical user interface of VDIF data analysis
lbb軟件庫(kù)在相關(guān)處理機(jī)的應(yīng)用主要為將CDAS2采集到的數(shù)據(jù)去幀頭, 將時(shí)間信息發(fā)送給主控程序, 在幾個(gè)測(cè)站的相關(guān)處理時(shí)間同步后, 開始進(jìn)行相關(guān)處理操作;lbb軟件庫(kù)在VLBI全球觀測(cè)系統(tǒng)(VLBI Global Observation System, VGOS)數(shù)據(jù)處理中的應(yīng)用主要為將CDAS2終端輸出的數(shù)據(jù)格式轉(zhuǎn)換為滿足VGOS國(guó)際聯(lián)測(cè)任務(wù)的數(shù)據(jù)格式, 用來(lái)進(jìn)行條紋檢測(cè)和后續(xù)的相關(guān)處理.
測(cè)試使用相對(duì)復(fù)雜的VDIF數(shù)據(jù)格式進(jìn)行解析對(duì)比, 使用的數(shù)據(jù)為VGOS的測(cè)地?cái)?shù)據(jù), 任務(wù)代號(hào)v9715a, 終端使用CDAS2, 數(shù)據(jù)格式為VDIF, 數(shù)據(jù)速率16 Gbps, 觀測(cè)時(shí)間為2 h. 本案例將對(duì)幾種不同大小的數(shù)據(jù)進(jìn)行解析并輸出秒級(jí)文件同時(shí)分析出數(shù)據(jù)完備性.
測(cè)試環(huán)境為L(zhǎng)inux的CentOS發(fā)行版本, 版本號(hào)CentOS7.4, 基于i7 CPU、32 GB RAM、16核的運(yùn)行環(huán)境.
使用基于lbb軟件庫(kù)自研的軟件, 可以對(duì)數(shù)據(jù)進(jìn)行解秒操作, 同時(shí)對(duì)數(shù)據(jù)的完整性進(jìn)行解析并輸出結(jié)果圖像. 如圖7所示對(duì)輸出數(shù)據(jù)的秒內(nèi)幀號(hào)進(jìn)行解析, 并用紅色標(biāo)記出記錄中缺失的數(shù)據(jù)幀. 同時(shí)基于lbb軟件庫(kù)還研發(fā)了支持一次性讀取多個(gè)文件作為輸入, 自動(dòng)對(duì)這一批數(shù)據(jù)進(jìn)行處理和分析, 并自動(dòng)生成對(duì)應(yīng)的文件結(jié)果信息. 每個(gè)結(jié)果信息均可以使用lbb-GUI進(jìn)行查看, 極大地方便了用戶使用.
在實(shí)例測(cè)試的同時(shí), 將lbb軟件庫(kù)與目前通用的mark5access以及baseband進(jìn)行效率測(cè)試, 對(duì)比結(jié)果如圖8所示.
在和mark5access的比較中,因?yàn)榫褂肅語(yǔ)言開發(fā),效率基本一致,而使用Python開發(fā)的baseband, 可以看出在對(duì)小數(shù)據(jù)分析時(shí), 花費(fèi)時(shí)間區(qū)別不大, 但是隨著數(shù)據(jù)量的增長(zhǎng), baseband對(duì)于數(shù)據(jù)的解析效率相較于lbb/mark5access就開始降低, 隨著數(shù)據(jù)量的增大這個(gè)差距會(huì)繼續(xù)加大.
圖8 測(cè)試效率對(duì)比Fig.8 Comparison of the analysis efficiency
本文探討了射電天文基帶數(shù)據(jù)的歷史及發(fā)展, 并對(duì)通用的兩種數(shù)據(jù)格式進(jìn)行了相關(guān)的解析, 為后續(xù)的數(shù)據(jù)處理提供了通用的軟件庫(kù), 方便直接調(diào)用. 測(cè)試表明, 該軟件庫(kù)可以在通用的Linux發(fā)行版上正常使用, 可以對(duì)將來(lái)軟件的開發(fā)與發(fā)展提供參考.
考慮到后續(xù)相關(guān)工程任務(wù)對(duì)實(shí)時(shí)數(shù)據(jù)處理的要求, VGOS常規(guī)數(shù)據(jù)觀測(cè)8 Gbps或更高記錄速率的觀測(cè)以及諸如SKA等所產(chǎn)生的海量數(shù)據(jù)都對(duì)當(dāng)前的軟件和程序提出了更高的要求, 直接輸出數(shù)據(jù)流的方式可能會(huì)更有利于數(shù)據(jù)的處理.