字通信系統(tǒng)工程實(shí)戰(zhàn):從調(diào)制映射到誤碼率排障的完整鏈路)
如果你在調(diào)一套數(shù)字通信系統(tǒng)手上拿著頻譜儀、誤碼儀和一根連著天線的小板子你會(huì)發(fā)現(xiàn)教科書上那些“系統(tǒng)框圖”突然變得特別抽象。數(shù)字通信這四個(gè)字落到工程里其實(shí)是無(wú)數(shù)個(gè)“為什么”——為什么用QPSK不用BPSK為什么脈沖成型濾波器要分成兩個(gè)為什么明明信噪比很好誤碼率卻卡在一個(gè)平臺(tái)上下不去這篇文章我就從工程實(shí)現(xiàn)的角度把數(shù)字通信系統(tǒng)從參數(shù)選擇、模塊拆解到實(shí)測(cè)排障的完整鏈路捋一遍盡量用我踩過(guò)的坑填平理論到實(shí)踐的溝。適合剛接觸通信物理層的同學(xué)、做嵌入式無(wú)線項(xiàng)目的工程師以及那些想從“能通”走向“通得穩(wěn)”的人。1. 數(shù)字通信系統(tǒng)的整體設(shè)計(jì)先抓住這三件事1.1 為什么是“數(shù)字”而不是“模擬”三個(gè)繞不開的理由很多人問(wèn)我既然模擬電路也能傳語(yǔ)音、傳視頻為什么現(xiàn)在幾乎所有系統(tǒng)都轉(zhuǎn)成了數(shù)字通信答案不是“數(shù)字更先進(jìn)”這種空話而是三個(gè)非常具體的好處。第一是抗干擾能力的質(zhì)變。模擬信號(hào)在傳輸過(guò)程中一旦混入噪聲噪聲就和信號(hào)一起被放大幾乎無(wú)法分離而數(shù)字信號(hào)只關(guān)心“0”和“1”兩個(gè)狀態(tài)只要噪聲幅度沒(méi)超過(guò)判決門限我就可以通過(guò)再生器把信號(hào)原樣恢復(fù)。你可以把數(shù)字通信想象成傳話游戲一個(gè)人說(shuō)“蘋果”中間轉(zhuǎn)述了十個(gè)人哪怕每個(gè)人都稍微聽錯(cuò)一點(diǎn)最后傳成“菠蘿”的概率依然很低但模擬信號(hào)相當(dāng)于直接傳遞一個(gè)蘋果經(jīng)過(guò)十個(gè)人的手捏之后早就變形了。第二是差錯(cuò)控制的可行性。數(shù)字系統(tǒng)可以在信息流里加入校驗(yàn)比特比如最簡(jiǎn)單的CRC或者更強(qiáng)的卷積碼、LDPC碼接收端發(fā)現(xiàn)數(shù)據(jù)不對(duì)時(shí)可以請(qǐng)求重傳或直接糾錯(cuò)。這在模擬世界里沒(méi)法做因?yàn)槟M信號(hào)沒(méi)有“正確”和“錯(cuò)誤”的明確邊界。第三是靈活性和壓縮能力。數(shù)字通信里調(diào)制方式、編碼效率、帶寬都可以通過(guò)軟件動(dòng)態(tài)配置同一套硬件既能跑QPSK也能跑256QAM可以根據(jù)信道好壞自動(dòng)切換。數(shù)字壓縮還能去掉大量冗余信息讓同樣的帶寬傳更多內(nèi)容。這三個(gè)理由疊加起來(lái)基本解釋了為什么從Wi-Fi、4G/5G、衛(wèi)星通信到光纖骨干網(wǎng)全部采用了數(shù)字體制。搞懂?dāng)?shù)字通信本質(zhì)上就是搞懂“怎么把比特可靠地變成波形再反向變回來(lái)”。1.2 一條完整收發(fā)鏈路先從“骨架”看起教科書上那張數(shù)字通信系統(tǒng)框圖我建議你反復(fù)看因?yàn)樗褪钦麄€(gè)工程的地圖。簡(jiǎn)化之后發(fā)送端可以拆成五個(gè)環(huán)節(jié)信源編碼把模擬信號(hào)語(yǔ)音、圖像數(shù)字化并壓縮去掉冗余。對(duì)于純數(shù)據(jù)業(yè)務(wù)這一步往往是保密的加密算法加上協(xié)議封裝。信道編碼加入糾錯(cuò)碼比如CRC做檢錯(cuò)、卷積碼/LDPC做糾錯(cuò)。代價(jià)是增加了冗余比特?fù)Q取的是同樣信噪比下更低的誤碼率。調(diào)制映射把比特按規(guī)則映射到復(fù)數(shù)符號(hào)上。比如QPSK就是把每?jī)蓚€(gè)比特映射成一個(gè)星座點(diǎn)。脈沖成型把離散符號(hào)變成適合信道傳輸?shù)倪B續(xù)波形同時(shí)限制帶寬。上變頻與功放把基帶信號(hào)搬移到射頻頻段并放大到足夠功率通過(guò)天線發(fā)出去。接收端是嚴(yán)格的逆過(guò)程但多了三個(gè)關(guān)鍵模塊同步包括載波同步、符號(hào)定時(shí)同步、幀同步。這是接收端最麻煩、也是最容易被新手低估的一步。信道估計(jì)與均衡補(bǔ)償信號(hào)經(jīng)過(guò)多徑傳播之后產(chǎn)生的失真。解映射與譯碼把接收到的復(fù)數(shù)符號(hào)重新判決為比特再用信道譯碼把糾錯(cuò)后的數(shù)據(jù)恢復(fù)出來(lái)。實(shí)際項(xiàng)目里信源編碼和信道編碼很多時(shí)候由協(xié)議?;蛘呋鶐酒瓿勺约簩懳锢韺拥捻?xiàng)目往往從“調(diào)制映射 → 脈沖成型 → 上變頻”這一段開始做。但不管做哪一段你腦子里的完整框圖不能丟否則你連“現(xiàn)在這個(gè)信號(hào)質(zhì)量差是同步問(wèn)題還是均衡問(wèn)題”都判斷不了。1.3 設(shè)計(jì)前必須先定的幾個(gè)參數(shù)速率、帶寬、信噪比動(dòng)手寫代碼或者畫原理圖之前有五個(gè)參數(shù)必須定下來(lái)數(shù)據(jù)速率 Rb、符號(hào)速率 Rs、調(diào)制階數(shù) M、信道帶寬 B、以及目標(biāo)誤碼率對(duì)應(yīng)的信噪比要求。它們之間的關(guān)系其實(shí)很直接。一個(gè)符號(hào)能攜帶 log2(M) 個(gè)比特所以符號(hào)速率等于Rs Rb / log2(M)而信號(hào)占用的帶寬和符號(hào)速率以及脈沖成型濾波器的滾降因子 α 相關(guān)B (1 α) × Rs舉個(gè)例子如果你想傳 2 Mbps 的數(shù)據(jù)調(diào)制方式用 QPSKM4那么 Rs 2 Mbps / 2 1 Msps。如果滾降因子取 0.25那么基帶信號(hào)帶寬就是 1.25 MHz。如果你改用 16QAMM16每個(gè)符號(hào)攜帶 4 比特符號(hào)速率只要 0.5 Msps同樣的數(shù)據(jù)速率占用帶寬縮了一半但代價(jià)是需要更高的信噪比才能達(dá)到同樣的誤碼率。這就是數(shù)字通信里最核心的“折中”頻譜效率是用信噪比換來(lái)的。香農(nóng)公式告訴我們信道容量 C B·log2(1SNR)在帶寬和信噪比之間做交換是有物理極限的。實(shí)際工程設(shè)計(jì)就是在這個(gè)極限附近找平衡點(diǎn)選定了 Rb、M、α也就確定了你這套系統(tǒng)最基本的頻譜占位和信噪比需求后面的濾波器設(shè)計(jì)、功放指標(biāo)、接收靈敏度評(píng)估全都從這里出發(fā)。2. 調(diào)制、脈沖成型與同步三個(gè)核心環(huán)節(jié)的實(shí)操拆解2.1 調(diào)制映射星座圖不是圖是一張算好的表調(diào)制映射是數(shù)字通信里最直觀的一環(huán)。BPSK 用一個(gè)比特決定載波的相位是 0 還是 πQPSK 用兩個(gè)比特決定四個(gè)相位之一16QAM 則同時(shí)改變幅度和相位用四個(gè)比特決定 16 個(gè)星座點(diǎn)中的一個(gè)。星座圖本質(zhì)上是把“比特組合”映射成“復(fù)數(shù)坐標(biāo)”。這個(gè)映射不是隨便定的它要滿足兩個(gè)原則一是相鄰星座點(diǎn)之間的漢明距離盡量小這樣即使發(fā)生誤判也大概率只錯(cuò)一個(gè)比特配合格雷編碼能顯著降低誤碼率二是星座點(diǎn)的平均功率要?dú)w一化方便功放工作在合適的工作點(diǎn)。實(shí)際做工程時(shí)要注意一個(gè)細(xì)節(jié)QPSK 不只有一種映射方式常見的有自然映射和格雷映射兩者在高信噪比下差別不大但在低信噪比、尤其有相位模糊的場(chǎng)合格雷映射的優(yōu)勢(shì)很明顯。我在一個(gè)項(xiàng)目里用過(guò)自然映射的 QPSK結(jié)果解調(diào)端星座圖旋轉(zhuǎn)了 90 度后全部誤判后來(lái)?yè)Q成格雷映射并加了差分編碼才徹底解決。還有個(gè)容易忽略的點(diǎn)調(diào)制映射的順序要和比特的串并轉(zhuǎn)換對(duì)齊。發(fā)送端如果是“奇比特 → I 路偶比特 → Q 路”接收端就必須保持同樣的順序。這種看似小到不能再小的問(wèn)題實(shí)際聯(lián)調(diào)時(shí)經(jīng)常成為一夜一夜加班的元兇。2.2 脈沖成型與匹配濾波頻譜效率和碼間串?dāng)_的博弈脈沖成型可能是數(shù)字通信里“理論很豐滿、工程很骨感”的典型。為什么要有脈沖成型因?yàn)橐粋€(gè)寬度極窄的符號(hào)脈沖在頻域占用的帶寬是無(wú)限的如果不做整形直接發(fā)射會(huì)用極大的頻譜浪費(fèi)來(lái)?yè)Q取極低的實(shí)現(xiàn)復(fù)雜度。而脈沖成型濾波器的作用就是把信號(hào)能量壓縮到目標(biāo)帶寬之內(nèi)。最常用的脈沖成型濾波器是升余弦和根升余弦。升余弦的頻譜是平滑的但它的脈沖響應(yīng)不是正交的也就是說(shuō)不適合直接用在匹配濾波兩端各放一個(gè)的方式而根升余弦的頻響是升余弦的平方根發(fā)端放一個(gè)、收端放一個(gè)級(jí)聯(lián)之后等效為完整的升余弦能同時(shí)實(shí)現(xiàn)帶寬限制和匹配濾波。這個(gè)“發(fā)端一個(gè)、收端一個(gè)”的對(duì)稱結(jié)構(gòu)是數(shù)字通信里最經(jīng)典的工程設(shè)計(jì)之一務(wù)必不要只在一端加濾波器。滾降因子 α 怎么選α 越小帶寬越窄頻譜效率越高但脈沖的時(shí)域拖尾變長(zhǎng)對(duì)符號(hào)定時(shí)誤差越敏感工程上實(shí)現(xiàn)難度越大。α0.25 或 0.35 是 LTE 和 Wi-Fi 里常見的取值兼顧了頻譜效率和實(shí)現(xiàn)成本。如果你在做一個(gè)頻譜資源緊張的點(diǎn)對(duì)點(diǎn)鏈路可能會(huì)選 0.1 或 0.15但代價(jià)是接收端的定時(shí)同步必須做得非常精確否則誤碼率會(huì)迅速惡化。我自己的經(jīng)驗(yàn)是先從 α0.35 開始調(diào)通整個(gè)鏈路再逐步減小滾降因子去壓縮帶寬。這樣排障時(shí)不會(huì)把“定時(shí)同步壓力大”和“鏈路本身有問(wèn)題”混在一起能省下大量調(diào)試時(shí)間。2.3 接收同步?jīng)]有時(shí)序?qū)R后面全白做接收端同步是數(shù)字通信工程里最“玄學(xué)”的部分也是幾乎每個(gè)項(xiàng)目噩夢(mèng)的來(lái)源。同步分三件事載波同步消除頻率偏移和相位偏移、符號(hào)定時(shí)同步找到每個(gè)符號(hào)的最佳采樣點(diǎn)、幀同步找到幀頭。載波同步通常用鎖相環(huán)完成比如 Costas 環(huán)或者在接收數(shù)據(jù)里插入導(dǎo)頻符號(hào)、做一個(gè)前置的頻偏估計(jì)。對(duì)于突發(fā)通信來(lái)說(shuō)常用的做法是在幀頭放一個(gè)已知序列接收端用自相關(guān)或者互相關(guān)估計(jì)頻偏和相偏。這個(gè)方法的優(yōu)點(diǎn)是速度快一次就能估計(jì)出較大范圍的頻偏適合突發(fā)幀結(jié)構(gòu)。符號(hào)定時(shí)同步的經(jīng)典算法是 Gardner它只需要兩個(gè)采樣點(diǎn)就能算出定時(shí)誤差且對(duì)載波相位不敏感所以在 QPSK/QAM 系統(tǒng)里用得非常多。實(shí)現(xiàn)時(shí)先對(duì)每個(gè)符號(hào)取兩個(gè)采樣點(diǎn)一個(gè)在最佳采樣點(diǎn)附近一個(gè)在半符號(hào)間隔處兩點(diǎn)的差值乘以相鄰符號(hào)之差作為定時(shí)誤差信號(hào)送給環(huán)路濾波器。工程上要注意采樣率最好取符號(hào)速率的整數(shù)倍通常 4 倍以上否則后續(xù)插值濾波器的設(shè)計(jì)會(huì)很別扭。幀同步相對(duì)簡(jiǎn)單但容易被忽視。我問(wèn)過(guò)很多做過(guò)物理層的同事十個(gè)里有八個(gè)在幀同步上栽過(guò)跟頭。特別是當(dāng)幀頭序列選擇得不好、自相關(guān)性不夠尖銳時(shí)噪聲和隨機(jī)數(shù)據(jù)也會(huì)產(chǎn)生大的相關(guān)峰值導(dǎo)致虛警和頻繁失鎖。幀頭序列的選擇原則是自相關(guān)峰值尖銳且與隨機(jī)數(shù)據(jù)的互相關(guān)性盡量低。m 序列和部分 ZC 序列都是常見選擇。3. 從仿真到實(shí)測(cè)搭建一個(gè)可復(fù)現(xiàn)的 QPSK 收發(fā)鏈路3.1 仿真階段用幾十行代碼先看 BER 曲線正式做硬件之前先用軟件把鏈路仿真跑通能省下大量在實(shí)驗(yàn)室里搬設(shè)備的時(shí)間。我常用 Python 的 NumPy 快速驗(yàn)證誤碼率趨勢(shì)再用更專業(yè)的工具做詳細(xì)驗(yàn)證。下面這段代碼就是一個(gè)極簡(jiǎn)的 QPSK 加性高斯白噪聲信道仿真幾十行就能看到誤碼率隨信噪比變化的曲線。import numpy as np import matplotlib.pyplot as plt def qpsk_mod(bits): # 每?jī)蓚€(gè)比特映射為一個(gè) QPSK 符號(hào)使用格雷映射 symbols np.array([11j, -11j, -1-1j, 1-1j]) / np.sqrt(2) bits_reshaped bits.reshape(-1, 2) idx bits_reshaped[:, 0] * 2 bits_reshaped[:, 1] return symbols[idx] def add_awgn(symbols, snr_db): snr_linear 10 ** (snr_db / 10) noise_std np.sqrt(1 / (2 * snr_linear)) noise noise_std * (np.random.randn(len(symbols)) 1j * np.random.randn(len(symbols))) return symbols noise def qpsk_demod(rx): symbols np.array([11j, -11j, -1-1j, 1-1j]) / np.sqrt(2) dists np.abs(rx[:, None] - symbols[None, :]) idx np.argmin(dists, axis1) bits np.zeros(len(idx) * 2, dtypeint) bits[0::2] idx // 2 bits[1::2] idx % 2 return bits N 100000 rng np.random.default_rng(42) snr_list np.arange(0, 11, 1) ber_list [] for snr in snr_list: bits rng.integers(0, 2, N) tx qpsk_mod(bits) rx add_awgn(tx, snr) rx_bits qpsk_demod(rx) ber np.mean(bits ! rx_bits) ber_list.append(ber) plt.figure(figsize(8, 5)) plt.semilogy(snr_list, ber_list, o-) plt.grid(True, whichboth) plt.xlabel(Eb/N0 (dB)) plt.ylabel(BER) plt.title(QPSK BER in AWGN) plt.show()運(yùn)行之后你會(huì)發(fā)現(xiàn)誤碼率曲線和理論值非常接近在 Eb/N08 dB 時(shí)誤碼率已經(jīng)降到 10^-4 量級(jí)。這個(gè)仿真雖然簡(jiǎn)單卻足以驗(yàn)證調(diào)制映射和解調(diào)判決的邏輯是否正確也能幫你快速判斷一個(gè)系統(tǒng)方案的可行性。需要提醒的是AWGN 仿真只能驗(yàn)證線性鏈路的基本性能。如果你的信道有多徑衰落、頻偏或者相位噪聲仿真模型就要加復(fù)雜模塊否則仿真結(jié)果和實(shí)際測(cè)試可能差得很遠(yuǎn)。我自己就吃過(guò)這個(gè)虧——AWGN 下誤碼率漂亮得很一到實(shí)際環(huán)境立刻崩盤。3.2 參數(shù)計(jì)算的完整過(guò)程從一個(gè)突發(fā)幀開始仿真跑通之后下一步是設(shè)計(jì)一個(gè)實(shí)際的突發(fā)幀格式。以一個(gè) 2 Mbps 數(shù)據(jù)速率、QPSK 調(diào)制、滾降因子 0.25 的鏈路為例完整參數(shù)推算過(guò)程是這樣的數(shù)據(jù)速率 Rb 2 MbpsQPSK 的 log2(M)2符號(hào)速率 Rs 1 Msps符號(hào)周期 Ts 1 us。基帶帶寬 B (10.25)×1 MHz 1.25 MHz。如果我采用 4 倍過(guò)采樣采樣率就是 4 MHz每個(gè)符號(hào)周期內(nèi)有 4 個(gè)采樣點(diǎn)。幀結(jié)構(gòu)設(shè)計(jì)時(shí)考量接收端同步實(shí)現(xiàn)我通常給幀頭留 64 個(gè)符號(hào)數(shù)據(jù)段按 1024 個(gè)符號(hào)一組幀尾加 16 個(gè)符號(hào)做保護(hù)間隔。按 1 Msps 算一幀 1104 個(gè)符號(hào)的傳輸時(shí)間約 1.1 ms。匹配濾波器階數(shù)怎么選這是一個(gè)實(shí)操中經(jīng)常冒出來(lái)的問(wèn)題。根升余弦濾波器的理論脈沖響應(yīng)延伸到無(wú)窮遠(yuǎn)工程上只能截?cái)?。截?cái)嗟拇翱谥辽俑采w前后各 4~8 個(gè)符號(hào)周期否則碼間串?dāng)_不可接受。在 4 倍過(guò)采樣下8 個(gè)符號(hào)周期對(duì)應(yīng) 32 個(gè)濾波器抽頭實(shí)際工程中取 32~64 個(gè)抽頭是常見選擇。濾波器的實(shí)現(xiàn)建議直接查表或用 FPGA 里的乘法器陣列逐樣本乘加計(jì)算量完全能承受。有一點(diǎn)要特別記住匹配濾波器和脈沖成型濾波器是對(duì)稱的一對(duì)。你在接收端加匹配濾波器時(shí)它的頻響要和發(fā)端成型濾波器共軛匹配。用根升余弦就是兩端各用一次千萬(wàn)別只在接收端加、發(fā)端不加那樣帶寬會(huì)明顯變寬抗干擾能力也會(huì)下降。3.3 從仿真到上板真實(shí)信道帶來(lái)的三個(gè)差別仿真和實(shí)測(cè)之間的差距是數(shù)字通信工程里最經(jīng)典的一課。真實(shí)信道至少有三個(gè)差別是仿真里很難完全模擬的第一是頻偏。收發(fā)兩端的晶振不可能完全一致即使都用 10 ppm 的晶振在 2.4 GHz 頻段也可能產(chǎn)生幾十 kHz 的頻偏。這個(gè)量級(jí)對(duì)于 1 Msps 的符號(hào)速率來(lái)說(shuō)是不可忽視的會(huì)讓星座圖持續(xù)旋轉(zhuǎn)。處理方法是像前面說(shuō)的那樣在幀頭放導(dǎo)頻序列做頻偏估計(jì)再用鎖相環(huán)跟蹤殘余頻偏。第二是相位噪聲。晶振的相位噪聲會(huì)讓星座點(diǎn)的相位產(chǎn)生隨機(jī)抖動(dòng)在 QAM 系統(tǒng)里表現(xiàn)為星座點(diǎn)的徑向模糊。做 QPSK 時(shí)相噪影響相對(duì)較小但如果上了 64QAM相位噪聲會(huì)成為主要限制因素。選晶振時(shí)不能只看頻率穩(wěn)定度相位噪聲指標(biāo)同等重要。第三是多徑衰落。室內(nèi)環(huán)境下反射無(wú)處不在信號(hào)會(huì)經(jīng)過(guò)多條路徑到達(dá)接收端產(chǎn)生頻率選擇性衰落。對(duì)抗手段是 OFDM 加循環(huán)前綴或者單載波加均衡器。如果你只是做一個(gè)窄帶、低速率的點(diǎn)對(duì)點(diǎn)鏈路多徑影響或許不嚴(yán)重但設(shè)備一旦移動(dòng)起來(lái)衰落就會(huì)開始頻繁出現(xiàn)。我記得第一次把 QPSK 鏈路搬上軟件無(wú)線電平臺(tái)時(shí)仿真里 10 dB 信噪比就能無(wú)差錯(cuò)實(shí)測(cè)卻怎么都調(diào)不到。后來(lái)挨個(gè)排查才發(fā)現(xiàn)接收端的增益自動(dòng)控制設(shè)置不合理信號(hào)時(shí)大時(shí)小AGC 反應(yīng)速度跟不上導(dǎo)致采樣點(diǎn) constantly 在符號(hào)邊緣。把 AGC 的響應(yīng)時(shí)間調(diào)慢、把參考功率改到星座圖的合適幅度之后誤碼率立刻掉下來(lái)了。這種問(wèn)題如果你沒(méi)親自動(dòng)手調(diào)過(guò)光看書是永遠(yuǎn)想不到的。4. 現(xiàn)場(chǎng)排障實(shí)錄誤碼平臺(tái)、幀失鎖與鏡像干擾4.1 誤碼率卡在 10^-2 下不去問(wèn)題可能不在解調(diào)“信噪比明明很高誤碼率卻下不去”是數(shù)字通信調(diào)試中最常見、最讓人崩潰的問(wèn)題。我遇到過(guò)很多次最初總以為是解調(diào)算法的問(wèn)題后來(lái)發(fā)現(xiàn)誤碼平臺(tái)的原因往往在解調(diào)之前。最常見的原因是 I/Q 不平衡。零中頻收發(fā)架構(gòu)里的模擬混頻器、正交本振如果幅度不一致、相位不是嚴(yán)格的 90 度就會(huì)造成星座圖變形。癥狀非常典型接收端看星座圖本來(lái)是正方形的 QPSK 星座變成了長(zhǎng)方形或者平行四邊形。解決方法是在發(fā)射端做一次 I/Q 校準(zhǔn)補(bǔ)償增益差和相位差接收端如果能做線性處理也可以在數(shù)字域做一次 Gram-Schmidt 正交化校正。第二個(gè)原因更隱蔽鏡像干擾。零中頻架構(gòu)里本振泄漏和混頻器的非線性會(huì)在目標(biāo)信號(hào)周圍產(chǎn)生一個(gè)鏡像信號(hào)落在目標(biāo)頻帶里。如果你用的是直接變頻架構(gòu)測(cè)試時(shí)會(huì)看到明顯的頻譜不對(duì)稱。排查方法很簡(jiǎn)單在發(fā)射端關(guān)斷信號(hào)單看接收底噪如果噪聲頻譜在目標(biāo)帶寬內(nèi)出現(xiàn)一個(gè)“鼓包”基本就是鏡像雜散。第三個(gè)原因是匹配濾波器和信號(hào)帶寬不匹配。接收機(jī)帶寬如果設(shè)置得太窄會(huì)削掉信號(hào)邊緣頻譜導(dǎo)致碼間串?dāng)_太寬則會(huì)引入更多噪聲。檢查方法是用頻譜儀看接收中頻信號(hào)的實(shí)際帶寬和發(fā)端設(shè)計(jì)帶寬對(duì)比偏差超過(guò) 10% 就要檢查濾波器參數(shù)。4.2 接收端頻繁丟幀先把 AGC 和幀同步查一遍“能收到數(shù)據(jù)但時(shí)不時(shí)丟一整個(gè)幀”這個(gè)故障查起來(lái)特別折磨人。我一般在兩種原因中找AGC 問(wèn)題和幀同步問(wèn)題。AGC 問(wèn)題的典型場(chǎng)景是突發(fā)信號(hào)到來(lái)前的噪聲底和信號(hào)到來(lái)后的幅度差太大AGC 環(huán)路在突發(fā)的上升沿來(lái)不及響應(yīng)導(dǎo)致幀頭附近信號(hào)削頂或者欠增益幀頭序列的互相關(guān)特征被破壞幀同步失鎖。解決方法一個(gè)是在幀頭前面加更長(zhǎng)的時(shí)間同步前導(dǎo)讓 AGC 有足夠時(shí)間收斂另一個(gè)是把 AGC 的參考電平調(diào)低一點(diǎn)保證信號(hào)峰值不削頂同時(shí)在 AGC 穩(wěn)定后再開始數(shù)據(jù)解調(diào)。幀同步自身的問(wèn)題通常是幀頭序列選得不好。如果幀頭的自相關(guān)旁瓣太高或者和數(shù)據(jù)段的相關(guān)性太強(qiáng)噪聲和隨機(jī)數(shù)據(jù)也會(huì)觸發(fā)“虛假幀同步”導(dǎo)致系統(tǒng)頻繁重捕、頻繁丟包。解決方法是換用自相關(guān)特性更好的序列并且提高幀同步的確認(rèn)門限——比如連續(xù)兩次檢測(cè)到幀頭相關(guān)峰值超過(guò)門限再宣布幀同步成功。這個(gè)“二次確認(rèn)”的小技巧能有效降低虛警率成本只是幾十個(gè)符號(hào)的時(shí)間。4.3 頻偏補(bǔ)償極性反了鎖定不了就修鎖相環(huán)載波同步經(jīng)常出現(xiàn)一種“原理上沒(méi)毛病、實(shí)現(xiàn)上老打轉(zhuǎn)”的情況鎖相環(huán)理論分析沒(méi)問(wèn)題星座圖卻在緩慢旋轉(zhuǎn)怎么調(diào)環(huán)路帶寬都沒(méi)用。有一次我排查了很久最后發(fā)現(xiàn)是頻偏估計(jì)器輸出的補(bǔ)償方向?qū)懛戳恕菊耦l率比發(fā)送端高你偏要往高的方向補(bǔ)環(huán)路當(dāng)然鎖不住星座圖越轉(zhuǎn)越快。排查方法很直觀把接收基帶信號(hào)搬移到基帶之后用 FFT 觀察信號(hào)的頻譜重心。如果頻譜重心偏向正頻率一側(cè)說(shuō)明本振偏高需要把補(bǔ)償頻率設(shè)為負(fù)值反過(guò)來(lái)也同理。在代碼里留一個(gè)符號(hào)位可調(diào)的開關(guān)現(xiàn)場(chǎng)測(cè)試時(shí)先用頻譜儀確認(rèn)頻偏方向再?zèng)Q定補(bǔ)償方向是最穩(wěn)妥的做法。還有一個(gè)常見坑鎖相環(huán)的捕獲范圍有限。如果你估計(jì)出的頻偏是 ±50 kHz但鎖相環(huán)的設(shè)計(jì)捕獲范圍只有 ±10 kHz環(huán)路肯定進(jìn)不了鎖定狀態(tài)。工程上通常的做法是先用前導(dǎo)序列做一個(gè)粗略的頻偏估計(jì)把大部分頻偏補(bǔ)掉剩余的小頻偏再交給鎖相環(huán)去消除。4.4 問(wèn)題速查表現(xiàn)象、原因、排查順序排障經(jīng)驗(yàn)積累到最后可以整理成一張速查表。遇到問(wèn)題先按順序排查避免東一榔頭西一棒子。故障現(xiàn)象可能原因排查順序誤碼率有平臺(tái)無(wú)法隨信噪比改善I/Q 不平衡、鏡像干擾、濾波器帶寬失配星座圖形狀 → 頻譜對(duì)稱性 → 濾波器參數(shù)經(jīng)常丟幀AGC 未收斂、幀頭序列自相關(guān)性差幀頭前導(dǎo)長(zhǎng)度 → AGC 響應(yīng) → 幀同步門限星座圖緩慢旋轉(zhuǎn)、環(huán)路失鎖頻偏補(bǔ)償方向錯(cuò)誤、捕獲范圍不足FFT 看頻譜重心 → 補(bǔ)償極性 → 鎖相環(huán)帶寬信號(hào)很強(qiáng)但誤碼率高非線性失真、AGC 參考電平設(shè)置過(guò)高背靠背自環(huán)測(cè)試 → 發(fā)射功率回退 → AGC 電平收發(fā)端均正常、聯(lián)調(diào)即出問(wèn)題收發(fā)采樣時(shí)鐘不一致、符號(hào)定時(shí)偏差參考時(shí)鐘測(cè)量 → Gardner 環(huán)路輸出觀察 → 采樣率配置核對(duì)最后再分享一個(gè)我個(gè)人的經(jīng)驗(yàn)數(shù)字通信調(diào)試最忌諱“頭痛醫(yī)頭”。誤碼率高不一定是解調(diào)的問(wèn)題可能是發(fā)端濾波器的滾降因子和接收端不匹配丟幀不一定是同步的問(wèn)題可能是 AGC 沒(méi)有給夠收斂時(shí)間。我后來(lái)的習(xí)慣是先把收發(fā)兩端共用的參考時(shí)鐘、采樣率、濾波器系數(shù)全部核對(duì)一遍確認(rèn)沒(méi)有低級(jí)錯(cuò)誤之后再動(dòng)算法參數(shù)。這個(gè)習(xí)慣幫我省掉的通宵時(shí)間已經(jīng)數(shù)不過(guò)來(lái)了。數(shù)字通信說(shuō)白了就是一套“按規(guī)則交換確定性信息”的工程系統(tǒng)規(guī)則越清晰、參數(shù)越統(tǒng)一后面的坑就越少。