實時軟件接收機中采集數(shù)據(jù)循環(huán)存儲與分發(fā)方法
【技術(shù)領(lǐng)域】
本發(fā)明涉及一種基于虛擬無線電技術(shù)的航天測控通信實時軟件接收機,具體為一種利用固定緩存器實現(xiàn)采集設(shè)備上報數(shù)據(jù)實時循環(huán)存儲與分發(fā)的方法。
【背景技術(shù)】
[0002]1999年美國學者Vanu Bose等人提出了虛擬無線電的概念。其基本思想與軟件無線電類似,都是利用軟件來實現(xiàn)無線信號的發(fā)射與接收,兩者的最大區(qū)別在于開發(fā)平臺的不同。軟件無線電技術(shù)主要采用專用可編程硬件平臺(如DSP、FPGA等)實現(xiàn)產(chǎn)品開發(fā)。虛擬無線電的開發(fā)平臺則采用通用計算機平臺,如以CPU和圖形處理器GPU為代表的通用處理器GPP計算平臺。近年來隨著通用處理器在計算速度、總線帶寬、低時延控制和并行計算等方面處理能力不斷提高,使得采用高性能計算平臺對通信信號進行軟件解調(diào)成為了可能。相比于基于專用平臺開發(fā)的數(shù)字接收機,基于通用計算平臺的軟件接收機除了數(shù)據(jù)采集模塊由硬件實現(xiàn)外,其余處理過程均由以高級開發(fā)語言編寫的軟件實現(xiàn),因此其具備了成本低、易于質(zhì)量控制且可移植性好的優(yōu)點。
[0003]與一般通信系統(tǒng)相比,航天測控通信系統(tǒng)的特點為:通信信號調(diào)制種類多,包括擴頻、調(diào)頻、線性相位調(diào)制等多種調(diào)制類型;信息速率范圍跨度大,航天測控通信系統(tǒng)一般的信息速率跨度范圍從Ikbps到lOMsps;接收信號動態(tài)大,需要在傳統(tǒng)的軟件接收機中加入信號捕獲模塊;信號解調(diào)的實時性要求強,為了實現(xiàn)飛行器的下發(fā)遙測信號與飛行器軌道信息及時解調(diào)與測量,要求軟件接收機的解調(diào)時延較小。上述特點增加了航天測控通信系統(tǒng)實時軟件接收機的設(shè)計難度。
[0004]目前,以GPS軟件接收機為代表的大部分虛擬無線電產(chǎn)品只能進行事后處理。普遍做法是將采集設(shè)備上報的數(shù)據(jù)存儲到硬盤上,然后軟件從硬盤中讀入數(shù)據(jù)進行軟件處理,即數(shù)據(jù)的流向為硬件先存入硬盤然后再被讀入內(nèi)存處理。這種處理方式的時間效率較低。航天測控通信系統(tǒng)的特點決定了實時軟件接收機不僅要實現(xiàn)不同調(diào)制體制、不同信息速率測控通信信號的實時存儲,還要與后面的捕獲以及解調(diào)模塊進行交互,保證數(shù)據(jù)的正確分發(fā)。因此為了實現(xiàn)實時數(shù)據(jù)采集與軟件解調(diào),需要設(shè)計一套合理的采集數(shù)據(jù)循環(huán)存儲與分發(fā)的方法。這種方法需要具備如下功能:首先要能在一塊固定大小的緩存器上進行實時數(shù)據(jù)存儲與分發(fā),其次要通過設(shè)計合理的讀寫控制流程保證緩存器的讀寫不沖突,最后還要能夠通過控制分發(fā)數(shù)據(jù)包的大小來適應(yīng)航天測控通信系統(tǒng)不同信息速率解調(diào)時延與實時軟件解調(diào)的要求。
【發(fā)明內(nèi)容】
[0005]為了實現(xiàn)航天測控通信信號實時采集與軟件解調(diào),針對后端不同處理線程數(shù)據(jù)分發(fā)的需求,本發(fā)明提供一種簡單高效,合理可靠,便于軟件處理,能對不同體制、不同速率測控通信信號進行實時循環(huán)存儲,緩存器讀寫不沖突,分發(fā)速率可控的數(shù)據(jù)循環(huán)存儲與分發(fā)的方法。
[0006]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種實時軟件接收機中采集數(shù)據(jù)循環(huán)存儲與分發(fā)方法,其特征在于包括如下步驟:首先,在計算機中分配一塊容量為每次中斷上報數(shù)據(jù)量整數(shù)倍的緩存器,對采集數(shù)據(jù)進行實時循環(huán)存儲;采集數(shù)據(jù)經(jīng)PCIE總線上報到計算機后,在循環(huán)存儲指針控制模塊控制下寫入緩存器;當啟動捕獲標志有效時,單次分發(fā)指針控制模塊啟動單次數(shù)據(jù)分發(fā)流程,向捕獲線程傳遞分發(fā)地址指針與分發(fā)數(shù)據(jù)長度,捕獲線程從分發(fā)地址指針處拷貝數(shù)據(jù)到GPU中進行信號捕獲操作;捕獲線程完成捕獲操作后,設(shè)置捕獲完成標志有效;當捕獲完成標志有效時,循環(huán)分發(fā)指針控制模塊判斷未分發(fā)數(shù)據(jù)塊計數(shù)變量是否大于0,如果未分發(fā)數(shù)據(jù)塊計數(shù)變量大于0,則啟動循環(huán)數(shù)據(jù)分發(fā)流程;每存儲標準分發(fā)數(shù)據(jù)長度個數(shù)據(jù)后,循環(huán)存儲指針控制模塊令未分發(fā)數(shù)據(jù)塊計數(shù)變量執(zhí)行加I操作,當數(shù)據(jù)存儲指針到達緩存器尾部時,循環(huán)存儲指針控制模塊令數(shù)據(jù)采集卡中斷次數(shù)循環(huán)計數(shù)變量歸0,數(shù)據(jù)存儲指針更新為緩存器首地址;當數(shù)據(jù)分發(fā)指針未到達緩存器尾部時,數(shù)據(jù)循環(huán)分發(fā)指針控制模塊分發(fā)標準分發(fā)數(shù)據(jù)長度個數(shù)據(jù)給解調(diào)線程,并令未分發(fā)數(shù)據(jù)塊計數(shù)變量執(zhí)行減I操作,同時依照分發(fā)數(shù)據(jù)長度更新循環(huán)分發(fā)地址指針,當分發(fā)數(shù)據(jù)地址指針達到緩存器尾部時,分發(fā)數(shù)據(jù)長度等于分發(fā)時刻分發(fā)地址指針至循環(huán)緩存器尾部之間的數(shù)據(jù)長度,數(shù)據(jù)分發(fā)完成后,數(shù)據(jù)循環(huán)分發(fā)指針控制模塊再更新數(shù)據(jù)循環(huán)分發(fā)指針等于緩存器首地址,分發(fā)數(shù)據(jù)長度等于標準分發(fā)數(shù)據(jù)長度。
[0007]本發(fā)明相比于現(xiàn)有技術(shù)具有如下有益效果。
[0008]簡單高效,合理可靠,便于軟件化處理。本發(fā)明通過在計算機中分配一塊容量為每次中斷上報數(shù)據(jù)量整數(shù)倍的緩存器以簡單高效的方式實現(xiàn)了采集數(shù)據(jù)實時循環(huán)存儲;通過判斷啟動捕獲與捕獲完成標志位的狀態(tài)分別進行單次與循環(huán)數(shù)據(jù)分發(fā),滿足了捕獲與解調(diào)線程對數(shù)據(jù)分發(fā)的需求;在循環(huán)數(shù)據(jù)分發(fā)過程中,通過判斷緩存器中未被分發(fā)數(shù)據(jù)量的大小來控制是否進行循環(huán)分發(fā),避免了緩存器的讀寫沖突。
[0009]能對不同體制、不同速率測控通信信號進行實時循環(huán)存儲與分發(fā)。本發(fā)明根據(jù)航天測控通信系統(tǒng)具有調(diào)制方式多,信息速率范圍大的特點,依據(jù)不同信息速率條件下數(shù)據(jù)循環(huán)分發(fā)數(shù)據(jù)長度需要依據(jù)解調(diào)時延的要求進行調(diào)整,數(shù)據(jù)循環(huán)分發(fā)數(shù)據(jù)長度不等于每次中斷上報數(shù)據(jù)長度,設(shè)計了一套循環(huán)分發(fā)數(shù)據(jù)包大小控制機制,針對不同信息速率,通過設(shè)置標準分發(fā)數(shù)據(jù)長度的大小適應(yīng)了不同信息速率解調(diào)時延與實時軟件解調(diào)最小處理時間的需求。
[0010]本發(fā)明還可以應(yīng)用于移動通信、衛(wèi)星通信、GPS等系統(tǒng)軟件接收機中。
【附圖說明】
[0011]圖1是本發(fā)明軟件接收機采集數(shù)據(jù)實時循環(huán)存儲與分發(fā)線程的組成示意圖。
[0012]圖2是本發(fā)明對應(yīng)的數(shù)據(jù)存儲與分發(fā)線程工作流程圖。
【具體實施方式】
[0013]下面結(jié)合附圖對本發(fā)明的技術(shù)方案進行詳細說明。本發(fā)明分配了一塊存儲容量大小等于每次中斷上報數(shù)據(jù)量整數(shù)倍的緩存器,為了更好說明數(shù)據(jù)循環(huán)存儲與分發(fā)流程,定義如下變量:
BufferAddr:緩存器首地址,緩存器分配后是一個定值; DMA_Cnt::緩存器內(nèi)存容量為DMA_Cnt個采集設(shè)備上報數(shù)據(jù)包大??;
BufferAddrEnd:緩存器尾地址,緩存器分配后是一個定值,
ffr i te_Cnt:數(shù)據(jù)采集卡中斷次數(shù)循環(huán)計數(shù)變量,以DMA_Cnt為模,取值為O到DMA_Cnt-
1。當數(shù)據(jù)存儲寫指針到達緩存器尾部時Write_Cnt自動歸O,寫指針更新為BufferAddr ;WriteSize:每次中斷上報數(shù)據(jù)包對應(yīng)的數(shù)據(jù)個數(shù),是個定值,緩存器尾地址BufferAddrEnd = BufferAddr+DMA_Cnt*ffriteSize:
ReadSize:標準分發(fā)數(shù)據(jù)長度,每當緩存器中存入ReadSize個數(shù)據(jù)令未分發(fā)數(shù)據(jù)塊變量加I ,ReadSize等于WriteSize整數(shù)倍。可以進行靈活調(diào)整以滿足不同信息速率解調(diào)時延與實時軟件解調(diào)最小處理時間的需求;
WritePointer:采集設(shè)備寫入緩存器的地址指針;
ReadPointer:從緩存器讀出數(shù)據(jù)地址指針;
DataLen:從緩存器中循環(huán)分發(fā)到解調(diào)線程數(shù)據(jù)大小,當讀指針沒有到緩存器尾部時DataLen 等于 ReadSize ;
RemainderCnt:緩存器中未分發(fā)數(shù)據(jù)塊數(shù)變量,緩存器中每寫入ReadSize個數(shù)據(jù)時加I,每分發(fā)出DataLen個數(shù)據(jù)時減I;
參閱圖1。在以下描述的實施例中,根據(jù)本發(fā)明所述軟件接收機采集數(shù)據(jù)實時循環(huán)存儲與分發(fā)方法,包括數(shù)據(jù)循環(huán)存儲流程、數(shù)據(jù)單次與循環(huán)分發(fā)流程。本發(fā)明技術(shù)方案通過軟件化的數(shù)據(jù)存儲與分發(fā)線程實現(xiàn)。數(shù)據(jù)存儲與分發(fā)線程主要控制單元為循環(huán)存儲指針控制模塊、單次分發(fā)指針控制模塊、循環(huán)分發(fā)指針控制模塊。各個模塊的主要控制變量為啟動捕獲標志、捕獲完成標志以及捕獲結(jié)果。數(shù)據(jù)存儲與分發(fā)線程向捕獲線程輸出單次分發(fā)讀地址指針和讀數(shù)據(jù)長度,向解調(diào)線程輸出循環(huán)分發(fā)讀地址指針和讀數(shù)據(jù)長度。
[0014]當每次中斷到來時,數(shù)據(jù)循環(huán)存儲流程在緩存器上實時循環(huán)存儲采集數(shù)據(jù),同時更新中斷次數(shù)循環(huán)計數(shù)變量Write_Cnt與存儲寫指針胃1';^6?0;[1^61'。當¥1';^6_&11:滿足捕獲線程所需數(shù)據(jù)量要求時,判斷啟動捕獲標志是否有效。如果啟動捕獲標志無效,則將其置為有效,開始進行單次數(shù)據(jù)分發(fā)操作。每存儲ReadSize個數(shù)據(jù)后,令RemainderCnt執(zhí)行加I操作。當存儲數(shù)據(jù)指針到達緩存器尾部時,令Write_Cnt歸O,寫指針WritePointer更新為BufferAddr0
[0015]當啟動捕獲標志有效時,單次數(shù)據(jù)分發(fā)流程開始向捕獲線程傳遞讀地址指針與讀數(shù)據(jù)長度。然后捕獲線程開始從讀地址指針處拷貝數(shù)據(jù)到GHJ中進行信號捕獲操作。捕獲完成后,設(shè)置捕獲完成標志有效,接著判斷未分發(fā)數(shù)據(jù)塊數(shù)是否大于O。如果未分發(fā)數(shù)據(jù)塊數(shù)大于0,則啟動循環(huán)數(shù)據(jù)分發(fā)流程。首次進行循環(huán)數(shù)據(jù)分發(fā)時,輸出給解調(diào)線程的讀地址指針需要利用捕獲結(jié)果來進行設(shè)定。如果是擴頻體制調(diào)制,則首次循環(huán)分發(fā)數(shù)據(jù)讀指針為PN相位等于O的數(shù)據(jù)地址,如果是調(diào)頻、線性相位調(diào)制,則首次循環(huán)分發(fā)數(shù)據(jù)讀指針等于符號起始地址。當分發(fā)數(shù)據(jù)讀指針未到達緩存器尾部時,分發(fā)數(shù)據(jù)長度DataLen為ReadSizeJi據(jù)分發(fā)完成后依照DataLen更新讀指針ReadPointer;如果分發(fā)數(shù)據(jù)讀指針達到數(shù)據(jù)尾部時,分發(fā)數(shù)據(jù)長度DataLen等于分發(fā)時刻讀指針至循環(huán)緩存器尾部之間的數(shù)據(jù)長度,然后再更新讀指針 ReadPo inter等于 BufferAddr ,DataLen 等于 ReadSi ze。
[0016]參閱圖2,在數(shù)據(jù)存儲與分發(fā)線程工作流程中,詳細工作流程如下:
步驟1、循環(huán)存儲指針控制模塊判斷PCIE中斷信號是否到來,如果出現(xiàn)中斷則轉(zhuǎn)步驟2,否則繼續(xù)等待。
[0017]步驟2、循環(huán)存儲