星通信原型系統(tǒng)搭建全指南)
從零開始搭建一套“MATLAB SDR OFDM”的衛(wèi)星通信原型系統(tǒng)聽起來(lái)像是只有專業(yè)實(shí)驗(yàn)室才能碰的事但只要把鏈路拆開看它本質(zhì)上就是一個(gè)“離線算法設(shè)計(jì) 射頻前端收發(fā)驗(yàn)證”的組合。MATLAB做調(diào)制解調(diào)和信道補(bǔ)償SDR硬件負(fù)責(zé)把數(shù)字基帶變成真實(shí)射頻信號(hào)。這個(gè)思路不僅適合在校學(xué)生做課程設(shè)計(jì)和畢業(yè)設(shè)計(jì)也是很多小團(tuán)隊(duì)在打衛(wèi)星通信功能樣機(jī)時(shí)最低成本的一條起步路徑。整套系統(tǒng)做下來(lái)你會(huì)把OFDM的原理、同步算法、射頻前端特性、鏈路預(yù)算這些平時(shí)“看書都會(huì)、做題就懵”的東西全部串成一條實(shí)打?qū)嵉男盘?hào)鏈。我可以負(fù)責(zé)任地說(shuō)這套原型調(diào)通之后再去讀那些動(dòng)不動(dòng)就是幾千行的通信系統(tǒng)代碼心態(tài)完全不一樣。1. 這個(gè)系統(tǒng)為什么值得搭OFDM衛(wèi)星通信的背景與價(jià)值1.1 衛(wèi)星通信的痛點(diǎn)與原型驗(yàn)證的必然性衛(wèi)星通信鏈路和地面蜂窩網(wǎng)有一個(gè)本質(zhì)區(qū)別地面基站可以隨時(shí)擴(kuò)容、換硬件而衛(wèi)星一旦發(fā)射出去鏈路的調(diào)制方式、編碼方案基本就定性了。所以衛(wèi)星通信系統(tǒng)在設(shè)計(jì)階段對(duì)調(diào)制算法、同步策略、抗多普勒能力的驗(yàn)證要求極其苛刻必須在地面上把盡可能多的真實(shí)信道因素摸清楚。然而純MATLAB仿真再完美也只是理想信道的驗(yàn)證。實(shí)際鏈路里有射頻前端的非線性失真、本振頻偏、晶振漂移、天線口面的阻抗失配這些硬件效應(yīng)是數(shù)學(xué)模型很難完整刻畫的。用SDR硬件把OFDM信號(hào)真正發(fā)到一個(gè)射頻環(huán)境里再收回來(lái)哪怕距離只有幾米它的信號(hào)流也已經(jīng)走過(guò)了“基帶編碼→DAC→上變頻→功率放大→自由空間傳播→接收前端→ADC→基帶處理”的完整路徑。這條路徑走一遍你會(huì)發(fā)現(xiàn)很多在仿真中線性單調(diào)的問(wèn)題在真實(shí)硬件上都是非線性的、帶偶然性的。1.2 為什么偏偏是OFDMOFDM的核心思想是把高速數(shù)據(jù)流拆成許多并行低速子載波每個(gè)子載波用很小的帶寬傳輸。因?yàn)樽虞d波間隔均勻、相互正交接收端可以用一次FFT把整個(gè)頻段里的所有子載波同時(shí)解出來(lái)。衛(wèi)星通信選擇OFDM有兩個(gè)關(guān)鍵原因。第一OFDM天然允許在頻域做均衡和資源調(diào)度而且加入了循環(huán)前綴CP之后對(duì)多徑延時(shí)擴(kuò)展不敏感。地面反射、雨衰散射造成的多徑延遲只要落在CP長(zhǎng)度以內(nèi)接收端都能直接消掉。第二OFDM支持靈活的子載波配置不同用戶、不同業(yè)務(wù)可以被分到不同的子載波資源塊上這在低軌衛(wèi)星通信直連手機(jī)場(chǎng)景里尤其重要因?yàn)椴煌脩粜诺啦町惙浅4?。?dāng)然OFDM不是沒有代價(jià)。它的峰均比PAPR偏高對(duì)射頻功放的線性度要求很高而衛(wèi)星上最缺的就是功率。所以實(shí)際衛(wèi)星系統(tǒng)里不少還是采用單載波的APSK調(diào)制。但如果做的是新體制衛(wèi)星通信、低軌衛(wèi)星直連手持終端這類項(xiàng)目OFDM基本是繞不開的一個(gè)選項(xiàng)因?yàn)樗孛?G波形能夠天然融合讓手機(jī)直接通過(guò)衛(wèi)星連接基站成為可能。1.3 用MATLAB和SDR做原型驗(yàn)證的完整鏈路MATLAB在整個(gè)項(xiàng)目里承擔(dān)兩個(gè)角色算法開發(fā)平臺(tái)和硬件控制平臺(tái)。在算法層面利用Communications Toolbox里的OFDM函數(shù)可以快速搭出發(fā)射機(jī)和接收機(jī)的模型完成BER/EVM等指標(biāo)的仿真。在硬件層面MATLAB通過(guò)硬件支持包直接驅(qū)動(dòng)SDR硬件不需要寫C或FPGA代碼就能讓算法跑在真實(shí)的射頻鏈路上。SDR硬件的角色則是把MATLAB算出來(lái)的IQ數(shù)據(jù)變成可發(fā)送的射頻波形或者把空口收到的射頻信號(hào)變成MATLAB能處理的IQ數(shù)據(jù)。它相當(dāng)于一個(gè)“透明”的射頻前端。這種架構(gòu)的最大優(yōu)勢(shì)是你想要修改調(diào)制方式、編碼率、導(dǎo)頻圖案只需改MATLAB腳本不需要?jiǎng)佑布壿?。迭代速度非??旌苓m合作為項(xiàng)目初期的功能驗(yàn)證平臺(tái)。2. 系統(tǒng)架構(gòu)與硬件選型動(dòng)手前的第一張藍(lán)圖2.1 整體信號(hào)鏈路拆解一套完整的OFDM衛(wèi)星通信原型系統(tǒng)收發(fā)射鏈路可以按如下的方式分解發(fā)射端鏈路比特源生成用戶數(shù)據(jù)信道編碼加冗余可以采用卷積碼或LDPC碼交織打散突發(fā)錯(cuò)誤按調(diào)制階數(shù)映射成QPSK/16QAM符號(hào)分配子載波、插入導(dǎo)頻通過(guò)IFFT將頻域符號(hào)變換為時(shí)域信號(hào)加循環(huán)前綴、加窗并串變換形成基帶OFDM符號(hào)流通過(guò)SDR硬件的DAC和射頻前端發(fā)送出去接收端鏈路SDR硬件接收射頻信號(hào)下變頻得到IQ基帶信號(hào)自動(dòng)增益控制時(shí)間同步找到OFDM符號(hào)的起始點(diǎn)載波頻率同步估計(jì)并補(bǔ)償頻偏去除循環(huán)前綴把時(shí)域樣本變成頻域符號(hào)信道估計(jì)與均衡獲得幅度和相位補(bǔ)償解映射、解交織、解碼得到數(shù)據(jù)這一整套鏈路如果全部手寫對(duì)一個(gè)初入通信算法的人來(lái)說(shuō)大約是兩周到一個(gè)月的工作量。但借助MATLAB現(xiàn)成的通信工具箱整個(gè)核心過(guò)程能把代碼量壓縮到幾百行以內(nèi)。2.2 SDR硬件怎么選SDR硬件是這套系統(tǒng)里最需要決策的環(huán)節(jié)。選錯(cuò)了后面做不了閉環(huán)驗(yàn)證選對(duì)了能省很多事。綜合我的實(shí)際使用經(jīng)驗(yàn)三類硬件比較有代表性USRP B210是最穩(wěn)妥的選擇。它是全雙工收發(fā)一體設(shè)備頻率覆蓋70 MHz到6 GHz瞬時(shí)帶寬最高到56 MHz完全夠用。而且MATLAB對(duì)USRP的支持最成熟comm.SDRuTransmitter和comm.SDRuReceiver這兩個(gè)系統(tǒng)對(duì)象能直接把MATLAB里的IQ數(shù)據(jù)和USRP的硬件流對(duì)接起來(lái)。唯一的問(wèn)題是價(jià)格不算低如果單位采購(gòu)不方便可以看看二手市場(chǎng)。RTL-SDR是接收專用的低成本方案。如果你的項(xiàng)目只需要驗(yàn)證接收機(jī)性能不要求發(fā)端靈活可控可以用RTL-SDR配合任意一臺(tái)信號(hào)發(fā)生器作為發(fā)射源。MATLAB同樣有接收支持包幾十塊到一百多塊錢的成本是它最大的優(yōu)勢(shì)。但RTL-SDR只能接收而且AGC行為對(duì)OFDM這種高峰均比信號(hào)并不友好做量化分析時(shí)誤差會(huì)偏大。HackRF One和LimeSDR屬于中間檔位。HackRF One也能收發(fā)但半雙工模式發(fā)送和接收不能同時(shí)進(jìn)行閉環(huán)測(cè)試不太方便。LimeSDR是全雙工但軟件生態(tài)沒有USRP那么健全MATLAB驅(qū)動(dòng)配置有時(shí)候會(huì)讓人抓狂適合有一定Linux驅(qū)動(dòng)經(jīng)驗(yàn)的玩家不推薦新手上來(lái)就用。如果你只做地面原型驗(yàn)證我建議條件允許的話直接上USRP B210兩臺(tái)更好一臺(tái)發(fā)、一臺(tái)收。這樣你可以同時(shí)操作發(fā)端和收端調(diào)試起來(lái)非常清晰。如果只有一臺(tái)也可以采用“先錄制發(fā)射端IQ樣本然后切換成接收模式再發(fā)送激勵(lì)信號(hào)、接收回波”的辦法。2.3 MATLAB側(cè)需要準(zhǔn)備的軟環(huán)境軟件部分的準(zhǔn)備并不是簡(jiǎn)單地裝個(gè)MATLAB就行需要的工具箱和硬件支持包一個(gè)都不能少?;A(chǔ)環(huán)境MATLAB版本R2022a以上為好因?yàn)樾掳姹緦?duì)SDR硬件的支持更全面。Communications Toolbox這是OFDM調(diào)制解調(diào)、信道編碼、同步算法實(shí)現(xiàn)的核心工具箱。DSP System Toolbox雖然非硬性要求但在做濾波器設(shè)計(jì)和多速率處理時(shí)會(huì)非常方便。Signal Processing Toolbox信號(hào)分析、窗函數(shù)設(shè)計(jì)的常用工具。對(duì)應(yīng)SDR硬件的Hardware Support Package在MATLAB Add-On Explorer里搜索硬件型號(hào)安裝后會(huì)自動(dòng)配置對(duì)應(yīng)的庫(kù)文件。這里有個(gè)細(xì)節(jié)很關(guān)鍵安裝硬件支持包之前建議先把SDR硬件的USB驅(qū)動(dòng)裝好并且拔掉硬件再執(zhí)行支持包的安裝向?qū)Х駝t支持包可能識(shí)別不到預(yù)留的USB接口類型。我遇到過(guò)不止一次因?yàn)橄炔逶O(shè)備后裝驅(qū)動(dòng)導(dǎo)致支持包安裝卡在最后一步的情況。2.4 關(guān)鍵設(shè)計(jì)參數(shù)預(yù)分配做OFDM系統(tǒng)的第一步不是寫代碼而是把參數(shù)表定下來(lái)。參數(shù)定死了后面所有模塊才能耦合起來(lái)。這里給出一個(gè)適合衛(wèi)星通信場(chǎng)景的參考參數(shù)配置參數(shù)項(xiàng)推薦數(shù)值設(shè)計(jì)理由系統(tǒng)帶寬5 MHz適合SDR前端硬件兼顧頻譜觀測(cè)和采樣率壓力FFT點(diǎn)數(shù)512子載波間隔約為9.765 kHz適中有效子載波數(shù)300與部分5G物理層參數(shù)接近留空子載波作保護(hù)帶循環(huán)前綴長(zhǎng)度64個(gè)采樣點(diǎn)對(duì)應(yīng)6.4微秒保護(hù)間隔覆蓋多徑延時(shí)擴(kuò)展調(diào)制方式QPSK / 16QAM初期用QPSK調(diào)通鏈路后期可以提升導(dǎo)頻圖案按資源塊間隔放置每個(gè)RB插入連續(xù)導(dǎo)頻便于頻域信道估計(jì)采樣率5 MHz與系統(tǒng)帶寬一致過(guò)采樣可以后續(xù)再加子載波間隔9.765 kHz在低速衛(wèi)星信道中抗多普勒能力可接受這里重點(diǎn)說(shuō)一下子載波間隔的選擇邏輯。子載波間隔越大系統(tǒng)對(duì)抗多普勒頻偏的能力就越強(qiáng)因?yàn)樽虞d波間隔拉大后同樣的頻偏引起的子載波間干擾比例變小。但子載波間隔越大循環(huán)前綴相對(duì)時(shí)長(zhǎng)占比就越高頻譜效率越低。5 MHz帶寬、512點(diǎn)FFT算下來(lái)9.7 kHz的子載波間隔是地面衛(wèi)星直連通信里經(jīng)常被提到的一個(gè)折中值它能在不影響太多頻譜效率的情況下容忍幾十kHz量級(jí)的多普勒頻偏。3. 基帶核心在MATLAB里先把OFDM收發(fā)機(jī)跑通3.1 OFDM發(fā)射機(jī)實(shí)現(xiàn)要點(diǎn)MATLAB里搭建OFDM發(fā)射機(jī)有兩條路一是用comm.OFDMModulator系統(tǒng)對(duì)象二是完全手寫IFFT和循環(huán)前綴操作。用現(xiàn)成系統(tǒng)對(duì)象的優(yōu)勢(shì)是代碼量極小幾行就能完成核心功能ofdmMod comm.OFDMModulator( ... FFTLength, 512, ... NumGuardBandCarriers, [52; 51], ... CyclicPrefixLength, 64, ... NumSymbols, 14, ... PilotInputPort, true);這個(gè)對(duì)象會(huì)自動(dòng)完成子載波映射、導(dǎo)頻插入、IFFT和加CP。但在實(shí)際項(xiàng)目中我建議即使你最終會(huì)使用這個(gè)對(duì)象前期也至少手寫一次完整的發(fā)射流程。原因很簡(jiǎn)單只有你自己寫一遍ifft、加CP、并串變換你才能真正理解矩陣中每一列代表一個(gè)OFDM符號(hào)、每一行代表一個(gè)子載波時(shí)頻域資源和時(shí)域樣本是怎么對(duì)應(yīng)的。尤其是后面要加自定義的前導(dǎo)序列和幀同步字段時(shí)手寫理解會(huì)給你省下大量DEBUG時(shí)間。插播一個(gè)容易搞混的點(diǎn)NumSymbols參數(shù)指一個(gè)時(shí)隙里的OFDM符號(hào)數(shù)通常在5G NR中設(shè)置為14對(duì)應(yīng)普通循環(huán)前綴下120 kHz子載波間隔的情況。但我們的同步字段和導(dǎo)頻字段都是要單獨(dú)插入的不能把這些也全部交給OFDMModulator對(duì)象否則接收端做同步會(huì)找不到明確的符號(hào)邊界。3.2 OFDM接收機(jī)實(shí)現(xiàn)要點(diǎn)接收機(jī)是整個(gè)系統(tǒng)最見功力的地方。因?yàn)榘l(fā)射機(jī)是你自己寫死的所有數(shù)據(jù)都是確定的但接收機(jī)面對(duì)的卻是“不知道信號(hào)什么時(shí)候到、頻率偏了多少、幅度衰減多少”的黑盒。用comm.OFDMDemodulator可以完成頻域變換基礎(chǔ)工作但同步需要自己寫。接收端處理流程應(yīng)該是第一步用前導(dǎo)序列做粗時(shí)間同步。前導(dǎo)序列通常采用一個(gè)已知的Zadoff-Chu序列或偽隨機(jī)序列接收端將其與接收信號(hào)做滑動(dòng)相關(guān)相關(guān)峰出現(xiàn)的位置就是幀起點(diǎn)。第二步用循環(huán)前綴做精細(xì)時(shí)間同步和分?jǐn)?shù)倍頻偏估計(jì)。OFDM信號(hào)自身的循環(huán)前綴特性可以被利用因?yàn)镃P是OFDM符號(hào)尾部數(shù)據(jù)的復(fù)制所以接收信號(hào)中相距N個(gè)采樣點(diǎn)的兩段數(shù)據(jù)在無(wú)噪聲時(shí)完全一樣它們的相位差正比于頻偏。最大似然估計(jì)公式如下頻偏估計(jì)值 -1/(2π) × angle(Σ 接收信號(hào)[n] × conj(接收信號(hào)[nN]))第三步對(duì)整數(shù)倍頻偏做頻域估計(jì)。因?yàn)榉謹(jǐn)?shù)倍頻偏只能補(bǔ)償循環(huán)前綴內(nèi)多出來(lái)的相位旋轉(zhuǎn)整倍子載波間隔的頻偏需要靠在頻域上找導(dǎo)頻位置的偏移來(lái)完成。通常在整數(shù)倍頻偏存在時(shí)所有導(dǎo)頻的位置會(huì)整體偏移若干子載波利用這一特性可以在頻域?qū)崿F(xiàn)粗校正。第四步信道估計(jì)和均衡。對(duì)每個(gè)OFDM符號(hào)利用已知導(dǎo)頻位置的接收符號(hào)與原始導(dǎo)頻的比值來(lái)估計(jì)信道響應(yīng)然后通過(guò)線性插值或MMSE估計(jì)得到所有子載波的信道系數(shù)。3.3 幀結(jié)構(gòu)與導(dǎo)頻設(shè)計(jì)幀結(jié)構(gòu)設(shè)計(jì)里最需要權(quán)衡的是導(dǎo)頻開銷和信道估計(jì)準(zhǔn)確性。導(dǎo)頻太多頻譜效率下降導(dǎo)頻太少在快速變化的低軌衛(wèi)星信道里估計(jì)值跟不上信道變化速度。我的建議是在原型系統(tǒng)里采用最簡(jiǎn)單的塊狀導(dǎo)頻結(jié)構(gòu)每一個(gè)時(shí)隙的第一個(gè)OFDM符號(hào)全部放導(dǎo)頻后面13個(gè)符號(hào)用于數(shù)據(jù)。這樣做的好處是信道估計(jì)實(shí)現(xiàn)非常簡(jiǎn)單只需對(duì)導(dǎo)頻符號(hào)做一次LS估計(jì)即可適合在低動(dòng)態(tài)或中低動(dòng)態(tài)信道下驗(yàn)證系統(tǒng)。代碼如下% 導(dǎo)頻OFDM符號(hào)全頻域放置已知QPSK符號(hào)歸一化幅度 pilotSym (1/sqrt(2)) * (2 * randi([0 1], 512, 1) - 1 ... 1j * (2 * randi([0 1], 512, 1) - 1)); pilotSym([1:52 461:512], :) 0; % 保護(hù)子載波置零后期如果要仿真高動(dòng)態(tài)低軌信道可以在時(shí)域上每隔幾個(gè)OFDM符號(hào)就插一個(gè)導(dǎo)頻符號(hào)形成梳狀塊狀的混合導(dǎo)頻這樣可以跟蹤較快的多普勒變化。但初期切入時(shí)不要一上來(lái)就做復(fù)雜的2D插值否則你會(huì)發(fā)現(xiàn)自己陷入濾波器設(shè)計(jì)的細(xì)節(jié)當(dāng)中遲遲推不進(jìn)整機(jī)聯(lián)調(diào)。3.4 同步參數(shù)設(shè)計(jì)與仿真驗(yàn)證同步模塊在純MATLAB環(huán)境下建議通過(guò)AWGN信道和簡(jiǎn)單多徑信道做一次完整的“發(fā)射-接收”循環(huán)觀察同步誤差的分布。粗同步用前導(dǎo)序列相關(guān)這里的相關(guān)窗口長(zhǎng)度決定了同步的精度和抗噪能力。窗口太短同步不穩(wěn)定窗口太長(zhǎng)多徑可能帶來(lái)多個(gè)相關(guān)峰導(dǎo)致誤判。常用的做法是將前導(dǎo)序列由相同的短序列重復(fù)多次在接收端用短序列延遲自相關(guān)來(lái)獲得粗同步這會(huì)比滑動(dòng)互相關(guān)更抗頻偏。我在仿真里經(jīng)常加的一道測(cè)試是人為向發(fā)射信號(hào)中加入一個(gè)固定的載波頻偏比如200 Hz然后觀察接收端頻率同步模塊能不能準(zhǔn)確估計(jì)出這個(gè)值。如果測(cè)出來(lái)的偏差大于20%就要考慮是不是局部極值問(wèn)題、估計(jì)窗口取錯(cuò)了或者信噪比過(guò)低。4. 從仿真到實(shí)機(jī)把波形送到SDR里4.1 硬件連接與參數(shù)配置把硬件接好之后第一件事不是寫代碼而是用MATLAB命令行確認(rèn)PC能識(shí)別到SDR。以USRP為例插上USB之后運(yùn)行finder sdrinfo(usrp, ID, usb0); disp(finder)如果能顯示出硬件序列號(hào)和固件版本說(shuō)明USB連接和驅(qū)動(dòng)正常。如果找不到設(shè)備重啟一下硬件或者換一個(gè)USB口很多時(shí)候是USB電源供電不足導(dǎo)致設(shè)備沒有枚舉成功。USRP B210通過(guò)USB 3.0連接時(shí)需要主板提供足夠的電流避免使用前置USB集線器。然后設(shè)置發(fā)射和接收端用到的硬件參數(shù)中心頻率、采樣率、增益。中心頻率的選擇要考慮衛(wèi)星通信常用的頻段。實(shí)際室內(nèi)驗(yàn)證建議用2.4 GHz ISM頻段這是SDR硬件支持最好、天線也是最容易買到的頻段。雖然它跟真實(shí)衛(wèi)星用的L頻段、S頻段有差別但用來(lái)驗(yàn)證通信鏈路完全足夠。4.2 發(fā)射端配置與波形發(fā)送用MATLAB驅(qū)動(dòng)USRP發(fā)射波形核心是用comm.SDRuTransmitter系統(tǒng)對(duì)象將前面生成的OFDM基帶IQ樣本直接推給硬件。txRadio comm.SDRuTransmitter(... Platform, B200, ... CenterFrequency, 2.4e9, ... Gain, 40, ... InterpolationFactor, 10, ... MasterClockRate, 50e6, ... TransportDataType, int16); txRadio(ofdmWaveform); % ofdmWaveform是生成的Nx1列向量這里需要特別理解InterpolationFactor和MasterClockRate的關(guān)系。USRP板卡上的DAC工作的主時(shí)鐘是MasterClockRate它不能直接被降成任意采樣率必須乘以整數(shù)因子做插值濾波。以50 MHz主時(shí)鐘為例發(fā)射基帶采樣率就是50 MHz / 10 5 MHz正好對(duì)應(yīng)前面預(yù)設(shè)的帶寬。硬件增益要謹(jǐn)慎設(shè)置尤其是USRP的發(fā)射增益。發(fā)射增益太大信號(hào)會(huì)在最后一級(jí)放大器中飽和產(chǎn)生非線性失真。OFDM又是高峰均比信號(hào)飽和削峰會(huì)造成嚴(yán)重的頻譜再生和帶內(nèi)誤差。我自己的經(jīng)驗(yàn)是第一步先設(shè)置低增益USRP B210盡量不開滿用頻譜儀看輸出頻譜確認(rèn)信號(hào)頻譜干凈、沒有明顯的IM3分量馬甲。4.3 接收端配置與數(shù)據(jù)抓取接收端使用comm.SDRuReceiver對(duì)象。一個(gè)容易被忽略的問(wèn)題是接收端的采樣率和發(fā)射端必須保持一致否則符號(hào)定時(shí)會(huì)不斷漂移表現(xiàn)為星座圖在單位圓上緩慢旋轉(zhuǎn)或周期性跳變。由于收發(fā)兩端都采用5 MHz采樣率且使用的是SDR內(nèi)部的本地晶振即使是失配也是在ppm級(jí)別短期實(shí)驗(yàn)沒問(wèn)題。rxRadio comm.SDRuReceiver(... Platform, B200, ... CenterFrequency, 2.4e9, ... Gain, 30, ... DecimationFactor, 10, ... MasterClockRate, 50e6, ... SamplesPerFrame, 5120 * 2); waveform rxRadio();收到IQ數(shù)據(jù)之后需要先做一個(gè)直流偏置消除。USRP接收端雖然內(nèi)部有直流消除但上電前一小段時(shí)間可能仍存在零點(diǎn)偏置。直流偏置在OFDM系統(tǒng)里會(huì)落在第0個(gè)子載波上污染整個(gè)頻域但是否影響所有子載波主要看它落的位置。如果是保護(hù)子載波上的DC分量問(wèn)題不大一旦DC子載波被用作數(shù)據(jù)子載波就會(huì)出現(xiàn)整體星座偏移。4.4 收發(fā)聯(lián)調(diào)的典型路徑從純仿真到硬件聯(lián)調(diào)我自己的調(diào)試路徑一般分四步走第一步先用一根RF線纜直接將發(fā)射SDR和接收SDR相連中間串一個(gè)30 dB衰減器。這個(gè)環(huán)節(jié)屏蔽了空間信道的動(dòng)態(tài)影響用來(lái)驗(yàn)證SDR硬件本身是否正常工作。如果這一步通過(guò)不了后面所有測(cè)試都不用提。第二步把射頻線纜換成兩根天線距離一米左右直接收發(fā)。這個(gè)環(huán)節(jié)會(huì)引入一定的多徑和衰減能夠驗(yàn)證接收機(jī)在真實(shí)環(huán)境下的靈敏度。第三步在發(fā)射端人為加一個(gè)固定的多普勒頻移比如在基帶波形上乘一個(gè)相位旋轉(zhuǎn)因子讓模擬的載波偏一點(diǎn)觀察接收機(jī)是否還能正常估計(jì)和補(bǔ)償。這一步可以在MATLAB里直接對(duì)IQ數(shù)據(jù)進(jìn)行頻移再送入SDR發(fā)射不需要改動(dòng)硬件。第四步把發(fā)射端搬到陽(yáng)臺(tái)接收端放在室內(nèi)做一次小范圍的“準(zhǔn)外場(chǎng)”測(cè)試看系統(tǒng)在多路徑明顯、衰減更大的情況下的表現(xiàn)。5. 衛(wèi)星信道躲不開的問(wèn)題多普勒、時(shí)延和功率5.1 低軌衛(wèi)星信道的三大變量真正的低軌衛(wèi)星通信信道和室內(nèi)桌面信道區(qū)別很大。核心有三個(gè)變量。多普勒頻移是最直觀的。低軌衛(wèi)星在軌道上運(yùn)行的速度大約在7.6 km/s量級(jí)造成的最大多普勒頻移在L頻段大約有幾十kHz量級(jí)。這個(gè)數(shù)值對(duì)于我們的OFDM系統(tǒng)來(lái)說(shuō)非常關(guān)鍵因?yàn)?.7 kHz的子載波間隔意味著極端情況下多普勒頻偏可能是子載波間隔的好幾倍。接收機(jī)不僅要估計(jì)并補(bǔ)償這么大的頻偏還要應(yīng)對(duì)多普勒變化率也就是頻率隨時(shí)間快速變化的問(wèn)題。第二是時(shí)延。低軌衛(wèi)星的傳播時(shí)延雖然比地球同步軌道小很多但也有幾毫秒到十幾毫秒量級(jí)。這個(gè)時(shí)延對(duì)于通信協(xié)議設(shè)計(jì)來(lái)說(shuō)不算致命但對(duì)于來(lái)回同步或閉環(huán)功控而言是個(gè)巨大的問(wèn)題原型系統(tǒng)如果直接跑閉環(huán)就需要考慮慢響應(yīng)帶來(lái)的穩(wěn)定性。第三是功率和鏈路預(yù)算。自由空間傳播損耗按距離平方衰減低軌衛(wèi)星通常在幾百公里外加上大氣吸收鏈路非常緊。SDR原型系統(tǒng)是幾米到幾十米的距離損耗基本可以忽略不計(jì)但從原型到真實(shí)衛(wèi)星系統(tǒng)時(shí)鏈路預(yù)算問(wèn)題會(huì)瞬間變成最核心的制約因素。5.2 多普勒頻偏對(duì)OFDM殺傷的兩個(gè)層面很多人以為多普勒頻偏只是讓星座旋轉(zhuǎn)靠經(jīng)典頻偏估計(jì)就能解決。但在OFDM里大頻偏的殺傷力有兩個(gè)層面。第一個(gè)層面是破壞正交性。OFDM子載波在頻域是等間隔的接收端用FFT把時(shí)域信號(hào)轉(zhuǎn)到頻域時(shí)如果信號(hào)存在一個(gè)大的殘余頻偏能量就會(huì)從原來(lái)的子載波泄漏到相鄰子載波上造成載波間干擾ICI。這個(gè)干擾一旦出現(xiàn)信噪比不會(huì)因?yàn)槟愫罄m(xù)做均衡而完全恢復(fù)因?yàn)樗举|(zhì)上是不可逆的頻域能量擴(kuò)散調(diào)制階數(shù)越高這個(gè)影響越明顯。第二個(gè)層面是導(dǎo)頻相位的快速旋轉(zhuǎn)。信道估計(jì)依賴于導(dǎo)頻的已知相位如果殘余頻偏過(guò)大導(dǎo)頻相位在同一個(gè)OFDM符號(hào)內(nèi)就旋轉(zhuǎn)了很多圈插值出來(lái)的信道估計(jì)結(jié)果就是亂的。因此接收機(jī)需要先做時(shí)域頻偏粗補(bǔ)償再做頻域細(xì)估計(jì)層層逼近。在做原型驗(yàn)證時(shí)我建議做一個(gè)頻偏敏感度測(cè)試在發(fā)射機(jī)側(cè)人為注入0 Hz、200 Hz、500 Hz、1 kHz、5 kHz、10 kHz頻偏然后觀察接收端的星座圖和EVM。這樣你能直觀量化出這個(gè)系統(tǒng)對(duì)多普勒的容忍度上限。測(cè)試數(shù)據(jù)記錄下來(lái)寫報(bào)告和評(píng)審時(shí)都很有說(shuō)服力。5.3 鏈路預(yù)算和增益設(shè)置的基本邏輯不要因?yàn)槭荢DR原型系統(tǒng)就完全不看鏈路預(yù)算。雖然物理距離短但如果一端天線增益低、一端發(fā)射功率不足接收端可能完全收不到信號(hào)。SDR系統(tǒng)的鏈路預(yù)算計(jì)算比衛(wèi)星工程簡(jiǎn)單基本公式是接收功率 發(fā)射功率 發(fā)射天線增益 接收天線增益 - 自由空間損耗 - 系統(tǒng)損耗在2.4 GHz、距離1米的情況下自由空間損耗大約40 dB發(fā)射功率設(shè)為0 dBm時(shí)接收功率大約為-40 dBm這對(duì)于接收靈敏度負(fù)90 dBm幾十dB的USRP來(lái)說(shuō)綽綽有余。但如果在陽(yáng)臺(tái)上做幾十米外場(chǎng)測(cè)試自由空間損耗會(huì)增加約30 dB加上多徑衰落信號(hào)就會(huì)變得緊張起來(lái)。實(shí)際調(diào)試時(shí)接收增益不要一上來(lái)就開滿。SDR接收機(jī)的噪聲系數(shù)一般不會(huì)太好增益開滿時(shí)噪聲底也會(huì)抬得很高。正確做法是先用低增益測(cè)試確認(rèn)信號(hào)能被捕獲再逐步增加增益找到一個(gè)EVM較好的點(diǎn)。這個(gè)地方值得反復(fù)試記錄每一檔增益對(duì)應(yīng)的EVM和同步成功率。5.4 從這個(gè)原型到真正星載系統(tǒng)的差距用SDR原型系統(tǒng)驗(yàn)證OFDM衛(wèi)星通信最多只能算是“證明算法在這個(gè)信道上基本能跑通”距離真正上星還有很大距離。真正星載設(shè)備需要在體積、重量、功耗SWaP之間做極端取舍要在輻射環(huán)境下保證可靠性還要滿足嚴(yán)格的頻譜模板和發(fā)射雜散限制。但如果沒有原型系統(tǒng)做功能驗(yàn)證直接去投片或做硬件設(shè)計(jì)風(fēng)險(xiǎn)會(huì)大到難以承受。因此SDR原型系統(tǒng)的定位就是“低成本、快速驗(yàn)證、暴露算法與硬件耦合的問(wèn)題”這才是它的最大價(jià)值。6. 實(shí)操翻車指北常見問(wèn)題與排查6.1 問(wèn)題清單與排查路徑這一節(jié)把我實(shí)際調(diào)系統(tǒng)遇到過(guò)的典型問(wèn)題列成一張表你可以把它貼在工位旁邊?,F(xiàn)象可能原因排查方法接收端完全收不到信號(hào)中心頻率不一致、發(fā)射增益過(guò)低、天線未接好先用頻譜儀看發(fā)射端頻譜確認(rèn)中心頻率設(shè)置一致星座圖整體旋轉(zhuǎn)/漂移殘余頻偏未補(bǔ)償干凈檢查頻偏估計(jì)模塊輸出看數(shù)字域補(bǔ)償頻率是否穩(wěn)定星座圖發(fā)散成環(huán)狀時(shí)間同步點(diǎn)偏移導(dǎo)致頻域相位混疊檢查符號(hào)起始位置估計(jì)觀察相關(guān)峰是否尖銳只有部分子載波解調(diào)正確保護(hù)子載波設(shè)置不一致或IFFT長(zhǎng)度不匹配對(duì)比收發(fā)兩端的FFT長(zhǎng)度與保護(hù)子載波數(shù)量接收端偶發(fā)丟幀USB傳輸帶寬不足或CPU占用過(guò)高降低SamplesPerFrame改用雙緩沖關(guān)閉后臺(tái)進(jìn)程信號(hào)頻譜明顯展寬發(fā)射機(jī)削波/飽和非線性失真降低發(fā)射增益檢查IQ幅度是否超過(guò)滿量程頻譜有強(qiáng)大直流分量接收端直流偏置在基帶處理前減去時(shí)域均值或查看DC子載波位置6.2 硬件聯(lián)調(diào)防坑建議先說(shuō)USB供電。USRP B210在滿發(fā)射功率時(shí)電流需求接近1 A如果電腦的USB口供電不穩(wěn)設(shè)備會(huì)隨機(jī)掉線或者底噪異常。建議使用自帶供電的USB 3.0 HUB或者用多個(gè)USB口并接的供電線。然后說(shuō)線纜。室內(nèi)聯(lián)調(diào)用射頻線纜時(shí)一定不要忘記在小功率測(cè)試時(shí)加衰減器。USRP發(fā)射功率調(diào)到最低如果直接接到接收端的LNA很容易把接收前端“悶”壞。我親眼見過(guò)有人把發(fā)端增益開到50 dB然后直接用短跳線連接接收端結(jié)果接收端的ADC輸入過(guò)載最終表現(xiàn)出一個(gè)完全離譜的星座圖。排查了三個(gè)小時(shí)才想到是前級(jí)飽和。第三是天線擺放。如果做空曠環(huán)境測(cè)試發(fā)射天線和接收天線最好采用垂直極化并保持視線可見并且遠(yuǎn)離金屬桌面。十幾公分的擺放差異會(huì)造成幾dB的衰落雖然一套系統(tǒng)不至于直接斷鏈但會(huì)顯著影響測(cè)出來(lái)的同步成功率和誤碼率。做對(duì)比測(cè)試時(shí)一定要固定天線姿態(tài)。第四是系統(tǒng)運(yùn)行時(shí)的CPU占用。MATLAB處理大幀IQ數(shù)據(jù)時(shí)很容易打滿CPU導(dǎo)致接收數(shù)據(jù)斷斷續(xù)續(xù)??梢园裇amplesPerFrame設(shè)小一些或者將基帶處理放到一個(gè)單獨(dú)的while循環(huán)中每次只取一幀。最重要的是關(guān)閉MATLAB圖形界面的實(shí)時(shí)繪圖那個(gè)刷新開銷非常大我在調(diào)大幀數(shù)據(jù)時(shí)一度以為是接收機(jī)算法錯(cuò)了最后發(fā)現(xiàn)是繪圖導(dǎo)致的幀丟失。6.3 量化排查的檢查表如果接收端仍然Behavior怪異建議按下面這個(gè)順序逐項(xiàng)打印并檢查發(fā)射端基帶波形峰均比是否超過(guò)預(yù)設(shè)值通常要小于10 dB發(fā)射端硬件輸出的實(shí)際中心頻率是否等于設(shè)定值用SDR或頻譜儀直接測(cè)接收端抓到的原始IQ樣本幅度方差是否在合理范圍內(nèi)時(shí)間同步相關(guān)峰的信噪比是否在10 dB以上頻率估計(jì)模塊給出的殘余頻偏是否在參考范圍之內(nèi)信道估計(jì)得到的導(dǎo)頻幅值包絡(luò)是否符合預(yù)期有沒有突然衰減的深坑均衡之后星座點(diǎn)的EVM是否低于調(diào)制方式的容忍閾值這七項(xiàng)每一層都是獨(dú)立的驗(yàn)證關(guān)卡。哪一關(guān)不過(guò)去找哪一層的責(zé)任而不是整條鏈路一把梭否則永遠(yuǎn)是“看似在動(dòng)實(shí)際陷入死循環(huán)”。整個(gè)原型系統(tǒng)的調(diào)試本質(zhì)就是一個(gè)層層證偽的過(guò)程。你先把數(shù)字域模型驗(yàn)證到足夠確信再把RF前端的效應(yīng)一點(diǎn)點(diǎn)加進(jìn)來(lái)。如果你剛開始做這個(gè)項(xiàng)目我給你的最大建議是不要在第一個(gè)星期就想把所有功能都調(diào)通先用最樸素的最笨的方法也就是純OFDM、沒有編碼、沒有交織把鏈路從MATLAB發(fā)到SDR再收回到MATLAB解出來(lái)。這個(gè)最簡(jiǎn)單最樸素的鏈路能通你才真正站在了正確的起跑線上。