?

基于GPU的北斗B1寬帶復合信號實時發生器設計

2024-03-05 10:21王子涵巴曉輝蔡伯根
系統工程與電子技術 2024年3期
關鍵詞:線程內存載波

王子涵, 巴曉輝,2,3,*, 姜 維,2,3, 蔡伯根, 王 劍,2,3, 文 韜,2,3

(1. 北京交通大學電子信息工程學院, 北京 100044; 2. 北京交通大學軌道交通控制與安全國家 重點實驗室, 北京 100044; 3. 北京市電磁兼容與衛星導航工程技術研究中心, 北京 100044;4. 北京交通大學計算機與信息技術學院, 北京 100044)

0 引 言

隨著北斗衛星導航系統的建成,北斗三代系統完成了從區域系統向全球系統的升級。為了保證信號的后續兼容,北斗三代衛星仍需要在B1頻段發送傳統的B1I信號[1]。此外,北斗三代的B1頻段還新增了民用信號B1C,以提高系統的服務能力。為了節約衛星有效載荷資源和延長導航衛星的使用壽命,同一頻段的信號應盡可能共用一條發射鏈路[2]。因此,B1頻段的信號需要先組合成一個基帶復合信號,然后通過共享載波進行廣播。但由于傳統的B1I信號和新型B1C信號的中心頻率不同,以及北斗三號B1復合信號的恒定包絡限制,北斗三號B1頻段需要使用新的調制技術和復用技術,以滿足系統的要求和性能[3]。

單邊帶復數二進制偏移載波(single-sideband complex binary offset carrier, SCBOC)是一種用于衛星導航的多路復用技術,是在二進制偏移載波(binary offset carrier, BOC)的基礎上發展而來[4-6]。BOC調制將信號分為兩個邊帶,具有抗干擾性強、良好的多徑抑制能力等優點[7]。SCBOC采用單邊帶偏移二進載波調制,相較于BOC調制,調制信號只包含單邊帶的BOC信號分量。北斗-3 B1頻段以SCBOC(14,2)調制作為多頻復用技術,實現了與傳統B1I信號二進制相移鍵控(binary phase shift keying,BPSK)(2)調制信號的向后兼容,以提高衛星導航系統的可靠性和兼容性[8-9]。

全球導航衛星系統(global navigation satellite system, GNSS)由地面控制部分、空間衛星星座和地面用戶設備三部分組成[10]。其中,地面用戶設備起到了至關重要的作用。高性能的接收機對于系統的正常運行非常重要,而衛星信號模擬器的開發和調試是高性能接收機研發的關鍵要素之一。相比于接收機直接接收真實衛星信號或者使用信號回放儀回放衛星信號,衛星信號模擬器可以按照用戶的要求,模擬不同環境下的衛星信號,為接收機提供所需的測試環境[11]。此外,衛星導航也在軍事領域得到了廣泛的研究,如利用欺騙技術影響對方武器和設備的作戰能力。生成高效的實時衛星信號是研究這些技術的基礎,具有非常重要的意義[12-13]。

衛星信號模擬器由仿真控制軟件和信號生成硬件組成,用以模擬和生成GNSS信號[14]。仿真控制軟件負責配置載體運動軌跡和模擬場景,同時還能計算衛星的位置、速度等參數。信號生成硬件中,數字信號處理器(digital signal processing, DSP) 負責計算導航信息、狀態參數和控制參數。信號通過現場可編程門陣列(field programmable gate array, FPGA)進行編碼和直接序列擴頻調制,生成數字中頻信號,然后經由數模轉換和上變頻完成衛星信號的生成[15-16]。目前,市面上的衛星信號模擬器多基于FPGA進行設計,然而這種設計方法存在一些限制,如功能更改和拓展較為麻煩,對于后續新增的GNSS信號的支持也比較困難[17]。此外,由于FPGA的容量限制,支持多種信號的信號模擬器需要多張FPGA板卡。

近年來,基于軟件定義的無線電(software defined radio, SDR)的GNSS模擬器逐漸受到重視[18]。采用計算機仿真模擬軟件來代替DSP和FPGA生成數字中頻信號,衛星通道的數量僅與計算機處理器的計算能力有關,避免了FPGA容量限制對衛星通道和信號種類的限制[19-21]。此外,由于整個信號處理過程在軟件端完成,因此后續功能拓展也更加方便。但是,在需要多通道、高采樣率衛星信號的場景下,普通的中央處理器(central processing unit, CPU)難以實時生成模擬的GNSS信號,因此采用圖形處理器(graphics processing unit, GPU)加速以滿足實時、多通道、高速率的GNSS信號模擬需求已成為很多人的選擇[22-24]。

關于GPU生成衛星信號的算法,前人已經進行了一些研究。文獻[25] 對利用GPU并行加速生成GNSS信號的方法進行了系統性的總結,并通過相同條件下比較CPU和CPU+GPU的運行時間充分體現了GPU對于GNSS信號加速生成的重要作用。文獻[26]和文獻[27]針對衛星中頻信號的結構以及調制特點,設計并優化了程序的并行線程結構以及內存分配方式,利用GTX580實現了50 MHz采樣率、8通道下全球定位系統(global positioning system,GPS) L1C/A中頻信號的實時生成。文獻[28]設計了一種數據結構,通過節約擴頻碼、導航電文的內存占用,加快數據訪問速度,利用Quaro M5000實現了50 MHz采樣率、16通道下北斗B1I信號的實時生成。文獻[29]提出了一種基于統一計算設備架構流(compute unified device architecture stream, CUDA)技術的直接數字頻率合成(direct digital frequency synthesizer, DDFS)加速算法。通過對計算任務的算法、數據結構、代碼邏輯等方面進行優化,利用GTX285實現了58 MSPS采樣率下衛星信號的實時模擬。但是,前人研究的對象多集中于GPS L1C/A、北斗B1I等傳統信號體系,且優化的方向主要在程序并行線程結構、內存訪問方式和數據存儲方法等針對GPU執行部分,程序在執行核函數之外的命令時,仍然采取串行運行的方式,這造成了算力資源的浪費。因此,本文在繼承前人并行線程結構、內存訪問方式優化思想的基礎上,提出了基于異步運算的加速采樣點數據計算的CUDA優化計算方案,實現北斗B1寬帶復合信號的生成。

本文闡述了一種SDR-GNSS信號模擬器的結構框架。該框架中,仿真控制軟件基于本文提出的優化算法,構建基于“CPU+GPU”異構運算架構的中頻信號生成算法,快速實時生成GNSS數字中頻信號,并送入通用軟件無線電設備(universal software radio peripheral, USRP)中。由USRP完成數模轉換、正交校正、上變頻,將數字中頻信號轉換為射頻信號發射,模擬生成真實GNSS信號。由于中頻信號的生成在軟件端完成,整個系統具有很好的擴展性,方便測試和驗證。

1 信號發生器體系結構

1.1 系統總體架構

信號模擬器由軟件端和硬件端兩個部分組成,如圖1所示。軟件端通過仿真控制軟件實時控制、計算可見衛星的相關參數(如載波相位、偽碼相位和信號幅度),并產生對應時間段的數字中頻信號。信號經過高速數據傳輸接口傳輸信號到硬件端,硬件端對信號進行處理后通過射頻前端發出,生成模擬GNSS信號。

圖1 GNSS信號模擬器體系結構Fig.1 Architecture of GNSS signal simulator system

1.2 中頻信號結構

由于北斗B1I信號和B1C信號分別處于不同的頻點,在一條發射鏈路中同時發射兩種信號需要采用新的調制和復用技術。具體來說,B1C信號采用正交復用二進制偏移載波調制(quadrature multiplexed binary offset carrier,QMBOC)(6, 1, 1/11)調制,B1I信號采用SCBOC(14, 2)調制,以滿足頻譜約束,最后運用交調構建恒甩絡復用(constant envelope multiplexing via intermodulation construction,CEMIC)技術[30-31]實現寬帶恒包絡信號的生成。北斗三代B1寬帶復合信號基帶表達式如下:

(1)

式中:SB1I(t)、SB1C_data(t)、SB1C_pilot(t)分別表示B1I信號分量以及B1C信號的數據分量和導頻分量。本文以隨機選擇的碼速率為2.046 MHz的Gold碼序列代替SB1Q(t)。SB1I(t)、SB1C_data(t)和SB1C_pilot(t)的表達式如下所示:

sB1I(t)=cB1I(t)dB1I(t)

(2)

(3)

(4)

式中:dB1I(t)、dB1C(t)分別為B1I和B1C信號的導航電文;cB1I(t)、cB1C_data(t)、cB1C_pilot(t)分別為B1I信號的擴頻碼、B1C信號數據通道和導頻通道的擴頻碼;scB1C_data(t)和scB1C_pilot(t)的表達式如下所示:

scBIC _data(t)=sign(sin(2πfsc,at))

(5)

(6)

式中:fsc,a=f0;fsc,b=6f0;f0=1.023 MHz為衛星信號的基準頻率; sign(·)表示取符號函數,當x≥0時取1,當x<0時取-1。

副載波scd(t)和scp(t)的表達式分別為

(7)

(8)

式中:fs=7.161 MHz為副子載波頻率。通過對scd(t)和scp(t)復子載波的幅度和相位進行改進,修正最終結果的幅度值,實現信號幅度的恒定。

1.3 中頻信號產生

生成數字中頻信號的方法是每次生成T時間(仿真步長)的數據。假設采樣率為FS,每個仿真步長時間內生成的GNSS采樣點的數量為N=FS·T。即為保證信號的實時生成,模擬器必須保證能在T時間內至少產生N個采樣數據。

由第1.2節可知,中頻信號的基本構成,中頻信號產生必須得到B1I、B1C信號對應的擴頻碼、導航電文以及載波相位和碼相位。擴頻碼和導航電文可以根據對應的接口控制文件(interface control document, ICD)和星歷文件計算得到,中頻信號產生的關鍵在于信號的碼相位和載波相位的計算。本文通過一階線性插值的方法得到對應信號的偽碼和載波相位。采樣數據生成過程如下。

(1) 多普勒頻偏計算。根據衛星星歷和設置的本地接收時間,通過迭代計算的方法得到衛星位置,算出衛星與用戶之間的偽距,最后得到載波多普勒頻偏:

(9)

(10)

式中:v表示所求的徑向速度;r1和r0表示兩個相鄰時刻的偽距;dt表示兩偽距的時間差,在這里等于仿真步長T;fdc表示載波的多普勒頻移;c表示光速;fL1=1 575.42 MHz,為B1頻點的載波頻率。

B1I信號的碼多普勒fdcode,B1I和子載波多普勒fdsc,B1I為

(11)

B1C信號的碼多普勒fdB1C,code和子載波多普勒fdB1C,sc為

(12)

式中:fcode,B1I=2.046 MHz,fcode,B1C=1.023 MHz,分別為B1I信號和B1C信號的碼頻率;fB1I,sc、fsc,a和fsc,b分別為B1I信號和B1C信號的子載波頻率,其中fsc,B1I=14.322 MHz,fsc,a=1.023 MHz,fsc,b=6.138 MHz。

(2) 確定偽碼步進、載波步進和子載波步進。步進的計算方法是由偽碼頻率或中頻載波頻率除以信號采樣率,得到每前進一個采樣點對應碼相位和載波相位的變化量,即碼相位和載波相位的步進。計算過程如下所示:

(13)

(14)

(15)

式中:φSi、θSi和ΨSi為所求的碼步進、載波步進和子載波步進;fc為中頻載波頻率;FS為采樣率;fcode為擴頻碼的頻率;fsc為子載波頻率;fd,code和fd,sc為對應信號的碼多普勒和子載波多普勒。

(3) 計算每顆被分配通道的可見星任意采樣點時刻的偽碼相位和載波相位,如下所示:

φi[k]=φFi+k·φSi

(16)

θi[k]=θFi+k·θSi

(17)

Ψi[k]=ΨFi+k·ΨSi

(18)

式中:φi[k]、θi[k]和Ψi[k]分別表示通道i衛星第k個采樣點的碼相位、載波相位以及子載波相位;φFi、θFi和ΨFi表示碼相位、載波相位和子載波相位每個采樣點之間的增長量。

2 GPU加速算法

2.1 異構運算架構

為了提高GPU的計算效率,本文通過劃分各線程的計算任務以及優化線程內存訪問速度兩個方面對GPU程序進行優化?!癈PU+GPU”異構運算架構下的中頻信號各個采樣點的計算過程如圖2所示。

圖2 軟件并行運算架構Fig.2 Software parallel computing architecture

中頻信號的生成過程可以劃分為CPU運算和GPU運算兩個部分:對于CPU運算部分,根據用戶輸入的廣播星歷和本地時間,通過迭代計算的方法得到每個T時間段起始時刻對應的精確發射時間、衛星位置和偽距。接著,根據衛星位置和用戶位置計算初始載波相位,根據發射時間計算碼相位,根據偽距和用戶運動軌跡計算載波多普勒和碼多普勒,得到載波步進和碼步進。

對于GPU運算部分:將上述得到的B1I信號和B1C信號的碼相位、載波相位及其步進送入線程中。然后,將擴頻碼、導航電文和正弦余弦表送入GPU的紋理內存,以便訪問。接下來,線程根據獲取的信息以及中頻信號計算公式,計算出每個采樣點對應的輸出結果。最后,線程通過共享內存數據合并輸出,并將結果傳回到CPU的頁鎖定內存中,提供給射頻端。

受限于GPU內存大小的限制,不可能通過調用一次GPU核函數完成全部中頻信號采樣點的計算,有必要對數據進行分塊。理想情況下,每個采樣點都會對應單獨的傳播時延,但若要單獨計算每一個傳播時延,這樣對計算機的算力要求過大??紤]到在一個較短的時間T內,傳播時延的變化量非常小,故可以認為T時間內的傳播時延以及多普勒頻偏保持不變,以此作為數據分塊的依據。在T時間內,根據起始時刻的初始相位和步進,得到任意采樣點中頻信號的輸出值。由此得到GPU并行計算模型,如圖3所示。

圖3 GPU并行計算模型Fig.3 GPU parallel computing model

l、m、n分別表示單個block中線程的行數和列數以及所使用的線程塊的個數,滿足下列關系:

(19)

式中:l的值取決于可見星的數目,并決定單個線程塊的行數;FS是信號采樣率;T為信號仿真步長;m為單個線程塊的列數;n為分配的線程塊的數目,其值取決于FS、T和m。所述并行架構設計優化就在于對m的值進行設計。

2.2 并行線程架構設計

線程并行架構設計主要考慮以下兩個方面。

(1) 確保使用了足夠多的線程束,以及CUDA流多處理器(streaming multiprocessor, SM)沒有進入空閑。SM可看作GPU的心臟,線程束是GPU并行計算的基本單元,一個線程束包含32個并行線程,這32個線程同時執行同一條指令,一個線程束中的線程必須在同一個block中。一個SM中,并不一定會一次性執行完線程束中的所有內容,這個時候就切換到別的線程束進行計算,由此可以避免等待的時間。理論上,當一個SM中有足夠多的線程束進行切換時,就可以避免因為SM等待而造成的時間浪費。

(2) 基本上線程束分組的行為是由SM以連續的方式自行進行的,最后不足32的部分獨立組成一個線程束,這可能會導致算力的浪費。所以系統應盡量確保block中使用的線程數量為32的整數倍,以節約計算機的運行資源。

2.3 內存結構優化

一般情況下,CPU與GPU各自的內存中的數據無法互相直接讀取。將CPU內存稱為主機內存,GPU內存稱為設備內存,獲取GPU計算結果需要經過如下步驟。

步驟 1從主機內存向到設備內存中傳輸數據。將T時刻對應的碼相位、載波相位及其步進等輸入信息傳輸到設備內存中。

步驟 2GPU內的各個線程并行執行核函數,而后將各個線程的計算結果合并,得到最終結果。

步驟 3從設備內存向主機內存傳輸數據。將各個采樣點的輸出結果由設備內存拷貝到主機內存中。

不同于CPU,GPU內有足夠多的算術邏輯單元(arithmetic and logic unit, ALU),因此程序運行速度的快慢主要受到內存訪問速度的影響,程序在步驟1~步驟3的內存讀取過程中花費了大量時間。因此,程序優化的重點,在于針對上述問題進行優化。

頁鎖定主機內存也稱為固定內存或不可分頁內存。其優勢在于操作系統不會對此內存進行分頁以交換到磁盤,因此該內存不會被破壞或重新定位。相比之下,GPU在應用直接內存訪問(direct memory access, DMA)技術與主機之間傳輸數據的過程中,主機可能會移動可分頁數據,這會對DMA操作造成延遲。頁鎖定主機內存的性能比標準可分頁內存的性能高出約2倍,通過使用頁鎖定內存完成步驟1和步驟3中的數據傳輸工作,可以顯著提高程序的運行效率。

在中頻信號的生成過程中,常會用到較長時間內不會發生改變的量,如導航電文、擴頻碼、正余弦表等。這些數據本身數量較多,直接訪問所需的時間較長。本文采用紋理內存的方式對此類信息進行加速。

紋理內存是專門針對具有大量空間局部性內存訪問模式的圖形應用程序而設計的。具體來說,當線程讀取的位置與周圍線程的讀取位置非常接近時,將設備內存綁定為紋理內存可以減少內存請求次數,提高內存帶寬的利用效率。對于擴頻碼、導航電文等存在空間局部性的數據訪問,紋理內存的特性非常契合,能夠顯著提升設備內存的訪問速度。

此外,在步驟2線程計算和合并中頻數據時,需要涉及線程內部的累乘和線程間的累加操作。線程內部的累乘操作可以快速完成,使用寄存器內存即可;線程間的累加則需要借由外部的設備內存完成,設備內存中可用于線程間通信的共有全局內存和共享內存兩種。在一般情況下,可以選擇全局內存,因為其空間充足,但訪問延遲較高。然而,若進行線程間累加,共享內存是更好的選擇。這是因為共享內存存放于片上,相比于全局內存,擁有較高的帶寬和很低的延時,非常適合線程間累加的操作。圖4為設備內存模型。

圖4 GPU內存模型Fig.4 GPU memory model

2.4 CUDA流加速

CUDA流在加速程序方面扮演著重要的角色。每個CUDA流表示一個GPU操作隊列,隊列中的操作按照指定的順序執行。系統可以在流中添加一些操作,例如核函數調用、內存復制以及事件的啟動和結束等。每一個CUDA流的執行都可以視為GPU的一個任務,這些任務可以彼此異步的運行。將流視為有序的操作隊列,其中包含有一個或多個內存復制引擎,以及一個核函數調用引擎,這些引擎彼此獨立運行。CUDA程序按照操作順序將代碼調用到硬件上執行,圖5說明了這種依賴關系,其中從核函數到復制操作的箭頭表示,復制操作必須要等待核函數執行完成后才能開始。

圖5 CUDA流執行的依賴性Fig.5 Dependency of CUDA stream execution

因此,需要安排合理的隊列順序,特別是在同一個流中。為避免堵塞,另一個流的內存復制或核函數調用操作,CUDA流采用寬度優先的方式來調度所有操作。假設內存復制時間與核函數運行時間大致相當,程序的執行時間線如圖6所示。

圖6 CUDA流程序執行時間線Fig.6 Execution timeline of CUDA stream program

如果不做特別的處理,CUDA會默認只使用一個Default Stream,這會導致單個流的操作隊列順序必須嚴格執行,也就是說在執行內存復制操作時,核函數將進入等待,而在執行核函數調用時,內存復制引擎也將空閑,這會極大地造成資源的浪費。

CUDA流正是解決這類問題的重要工具,具有如下顯著特性:① 數據傳遞和核函數調用可以在不同的流中同時進行。② 所有的流會在程序運行過程中同時啟動,并由GPU來決定調用的順序。

圖7可以充分體現使用CUDA流加速帶來的程序加速方面的好處。多個CUDA流可以使數據傳輸與計算并行執行,相比Default Stream狀態下增加了相當多的數據吞吐量,對于大規模數據運算具有重要意義。

圖7 CUDA流加速效果對比Fig.7 Comparison of CUDA stream acceleration effect

3 信號測試與驗證

3.1 信號測試與驗證流程

信號測試與驗證流程如圖8所示,系統根據用戶的輸入參數和配置文件,在“CPU+GPU”異構運算架構下實時生成衛星中頻信號。然后,將信號通過USRP轉化為射頻信號發送,最后由軟硬件接收機驗證信號的正確性。

3.1.1 頻譜圖驗證

對信號生成軟件輸出的中頻信號值進行頻譜分析,結果如圖9所示??梢郧逦吹紹1I信號和B1C信號的頻譜分量,頻譜特性與理論值一致。

圖8 信號測試與驗證流程Fig.8 Signal testing and verification process

圖9 中頻信號頻譜特性Fig.9 Spectrum characteristics of intermediate frequency signals

3.1.2 接收機驗證

將USRP發射出的射頻信號接到U-blox接收機中進行分析定位,驗證生成信號的正確性,接收機定位結果示意圖以及設備連接圖如圖10和圖11所示。

圖10 接收機驗證信號正確性Fig.10 Receiver verification of signal correctness

圖11 接收機測試驗證連線圖Fig.11 Receiver test verification wiring schematic

運用軟件接收機對6號和9號衛星B1I分量和B1C分量的載波多普勒頻移值分別進行跟蹤,結果如圖12和圖13所示。

圖12 6號星載波多普勒跟蹤結果Fig.12 Satellite carrier 6 Doppler tracking results

圖13 9號星載波多普勒跟蹤結果Fig.13 Satellite carrier 9 Doppler tracking results

測試結果表明,B1I分量和B1C分量信號多普勒頻移的變化趨勢一致,載波多普勒跟蹤值的比值與B1I信號和B1C信號載波頻率的比值一致。以9號星為例,t=1 s時刻,信號B1I分量載波多普勒跟蹤值為452.1 Hz,B1C分量載波跟蹤多普勒跟蹤值為456.2 Hz,二者的比值等于B1I頻點1 561.098 MHz與B1C頻點1 575.42 MHz之比,由此確定載波多普勒頻率結果符合理論值。

3.2 加速效果驗證

本文使用CUDA架構作為開發平臺,所采用的軟硬件型號及性能參數如表1所示。

表1 硬件型號及性能參數Table 1 Hardware model and performance parameters

本節對第2節所提到的GPU程序優化加速方法的效果進行驗證。圖14是在8顆可見衛星的情況下,統計不同采樣率下生成1 s衛星中頻信號所需花費的時間;圖15是在信號采樣率為30 MHz時,統計不同可見星下生成1 s衛星中頻信號所花費的時間。

圖14 不同采樣率下的加速效果Fig.14 Acceleration effect at different sampling rates

圖15 不同可見星下的加速效果Fig.15 Acceleration effect at different visible satellites

從圖14和圖15可以看出,針對信號采樣率的不同,采用內存優化方法后,程序運行速度相比優化前提升約7%,在CUDA流加速+內存優化方法下,程序運行速度提升約13%。針對可見星數目的不同,在采用內存優化方法后,程序運行速度提升了5%,采用CUDA流加速+內存優化方法下,程序運行速度提升了10%。

此外,圖15中程序優化效果的起伏波動較大,可能是因為可見星數目的變化影響了線程的并行結構,即第2.1節中的k值,針對設計程序并行架構對程序加速效果的影響如圖16所示。實驗條件為固定可見衛星的數量為8,信號采樣率固定為30 MHz,記錄m取值的不同對程序產生1 s中頻信號所花費時間的影響。

圖16 線程架構對程序運行時間的影響Fig.16 Impact of thread architecture on program runtime

從圖16可得,當m的值分別為8、12、16、20、24、28、32時,信號花費時間相比其他情況下更短,這是因為由于可見星的k值為8,當m取上述值時,單個線程塊中線程的總數為32的倍數,從而使得每個線程束中的線程都得到了充分的利用。本文m取值16,是在綜合考慮上述因素以及單個線程塊最大線程個數的限制后的選擇:如果取值更小,則更容易出現線程束的浪費;如果取值更大,則會限制最大可見星數量。

本文所涉及的信號生成加速方法已在GitHub上開源[32]。

4 結 論

本文設計了一種針對北斗B1寬帶復合信號的實時生成方案,構建了基于“CPU+GPU”異構運算架構下的中頻信號生成算法,實現了SCBOC調制下北斗-3 B1寬帶復合中頻信號的快速實時生成,并送到USRP中轉換為射頻信號播發。通過這種方式,實現了對真實衛星信號在地面情景下的精準實時復現,使用U-blox商用硬件接收機進行驗證,證實了信號的正確性。此外,本文還提出了一種基于CUDA流異步運算的GPU加速方法,從線程并行架構設計、設備內存優化方案、CUDA流異步加速3個角度,加速衛星數字中頻信號的計算過程,并通過實驗驗證了效果。實驗結果表明,本文采用的加速方法可以使程序運行速度相比優化前提升約10%。

猜你喜歡
線程內存載波
外部高速緩存與非易失內存結合的混合內存體系結構特性評測
“春夏秋冬”的內存
淺談linux多線程協作
應急廣播系統中副載波的構建與應用
低壓載波通訊測試儀的開發與應用
基于最優化搜索的迭代載波同步算法
基于內存的地理信息訪問技術
基于上下文定界的Fork/Join并行性的并發程序可達性分析*
一種雙頻載波相位周跳探測與修復的方法
Linux線程實現技術研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合