與載波同步實(shí)現(xiàn))
做通信物理層仿真的朋友應(yīng)該都有這種感覺OFDM的參考代碼一抓一大把但SC-FDE單載波頻域均衡的完整鏈路反而不好找。這個(gè)項(xiàng)目標(biāo)題我一看就覺得很對味——它把單載波頻域均衡鏈路里最關(guān)鍵的幾個(gè)點(diǎn)都點(diǎn)出來了UW序列、QPSK調(diào)制、定時(shí)同步、載波同步最后還要落到MATLAB仿真上。說實(shí)話SC-FDE在很多場景下比OFDM更實(shí)用比如LTE上行、WiFi的某些模式、衛(wèi)星通信、水下聲通信它既有單載波的低峰均比優(yōu)勢又借用頻域均衡繞開了時(shí)域均衡的高復(fù)雜度是一種“取兩者之長”的方案。這篇文章我會按一個(gè)完整仿真項(xiàng)目的思路來講先拆清楚系統(tǒng)為什么要這樣設(shè)計(jì)再把發(fā)射機(jī)、接收機(jī)里各個(gè)模塊的細(xì)節(jié)和MATLAB實(shí)現(xiàn)逐個(gè)過一遍最后把我自己調(diào)試這種鏈路時(shí)踩過的坑和排查方法整理出來。適合剛接觸SC-FDE的通信研究生、準(zhǔn)備做基帶算法驗(yàn)證的工程師以及想把手里的OFDM代碼改成單載波方案的開發(fā)人員??赐昴慊灸苷罩畛鲆粭l可跑的完整鏈路。1. 整體設(shè)計(jì)與思路拆解1.1 為什么選SC-FDE而不是OFDMSC-FDE全稱Single-Carrier Frequency-Domain Equalization直譯是單載波頻域均衡。很多人第一次聽到這個(gè)名字會有點(diǎn)繞既然是單載波怎么又跑到頻域去均衡了簡單說發(fā)送端還是傳統(tǒng)的單載波調(diào)制但接收端把一整個(gè)數(shù)據(jù)塊做FFT變換到頻域在頻域完成信道均衡之后再IFFT回時(shí)域做判決。SC-FDE和OFDM的核心區(qū)別在于OFDM把寬帶數(shù)據(jù)流拆成很多窄帶子載波并行傳輸每個(gè)子載波上近似是平坦衰落所以頻域均衡特別自然而SC-FDE仍然是串行傳輸只是借用了“塊處理”和FFT來做均衡。OFDM的典型痛點(diǎn)大家都清楚峰均比高對功放線性度要求苛刻對載波頻偏敏感。SC-FDE的峰均比和單載波一樣低對頻偏的敏感程度也遠(yuǎn)低于OFDM同時(shí)又能通過頻域均衡處理多徑信道。從實(shí)現(xiàn)復(fù)雜度上看SC-FDE和OFDM的FFT規(guī)模是一樣的差別主要在多了一個(gè)IFFT而且這個(gè)IFFT只在接收端出現(xiàn)。所以如果系統(tǒng)對功耗和功放效率要求高或者信道環(huán)境里多普勒頻偏比較顯著SC-FDE往往是比OFDM更穩(wěn)的選擇。這也是為什么它一直是衛(wèi)星通信、上行鏈路的備選方案近年在水聲通信里也經(jīng)常被拿來做物理層基礎(chǔ)波形。1.2 UW序列在鏈路里到底干了多少活UW是Unique Word常譯作“獨(dú)特字”或“唯一字”。它本質(zhì)上是一段收發(fā)兩端都預(yù)先知道的已知序列在SC-FDE幀結(jié)構(gòu)里占據(jù)固定位置。我最初以為UW只是拿來當(dāng)訓(xùn)練序列做同步用的實(shí)際把它放在整個(gè)鏈路里看它的作用是多重嵌套的。UW插在每個(gè)數(shù)據(jù)塊的前面或后面長度覆蓋信道最大時(shí)延擴(kuò)展這時(shí)候它起到的作用和OFDM的循環(huán)前綴完全一致——保證了數(shù)據(jù)塊與信道之間形成循環(huán)卷積頻域均衡才能按教科書上的公式來做。與此同時(shí)UW本身是已知序列又可以被當(dāng)作導(dǎo)頻或訓(xùn)練序列用來做幀同步、定時(shí)同步、頻偏估計(jì)甚至直接用來做信道估計(jì)。一個(gè)序列同時(shí)承擔(dān)了CP、導(dǎo)頻、同步參考三種角色這正是SC-FDE設(shè)計(jì)的精巧之處。還有一個(gè)細(xì)節(jié)容易被忽視UW的峰均比特性會影響整個(gè)系統(tǒng)的PAPR。如果UW選得不好比如幅度起伏很大會拉高整條鏈路的峰均比削弱SC-FDE本身的優(yōu)勢。所以實(shí)際工程里常用恒包絡(luò)序列比如ZC序列、Chu序列這樣既能維持低PAPR又具有良好的自相關(guān)特性方便接收端做相關(guān)檢測。1.3 幀結(jié)構(gòu)和關(guān)鍵參數(shù)要怎么定我在仿真里用的幀結(jié)構(gòu)比較典型每個(gè)數(shù)據(jù)塊包含一個(gè)UW和一個(gè)數(shù)據(jù)段兩者拼接成一個(gè)長度為N_FFT的塊。假設(shè)FFT點(diǎn)數(shù)是256UW長度64那數(shù)據(jù)符號數(shù)就是192。把64個(gè)UW符號直接放在塊頭它同時(shí)兼任循環(huán)前綴。這里有個(gè)重要約束UW長度必須大于信道最大時(shí)延擴(kuò)展否則循環(huán)卷積條件被破壞均衡性能會明顯惡化。實(shí)際無線信道里時(shí)延擴(kuò)展通常在幾百納秒到幾微秒具體要結(jié)合符號速率來換算。仿真時(shí)可以先設(shè)一個(gè)保守值比如面向典型室內(nèi)多徑信道符號速率4Msps時(shí)64個(gè)符號對應(yīng)16微秒的保護(hù)間隔已經(jīng)足夠覆蓋大多數(shù)場景。其他參數(shù)方面調(diào)制用QPSK映射方式選格雷映射目的是讓相鄰星座點(diǎn)只差一個(gè)比特判決錯(cuò)誤時(shí)誤比特?cái)?shù)更少。脈沖成型濾波器選根升余弦滾降因子0.22這個(gè)取值是很多通信系統(tǒng)的默認(rèn)選擇兼顧帶寬效率和時(shí)域旁瓣性能。采樣率方面我在發(fā)射端做4倍上采樣接收端先做匹配濾波再抽回符號率這樣定時(shí)同步的處理空間更大。整個(gè)鏈路設(shè)計(jì)下來AWGN信道下的理想性能應(yīng)當(dāng)逼近QPSK在加性白高斯噪聲下的理論誤碼率這也是驗(yàn)證各個(gè)同步模塊是否正確的第一道標(biāo)準(zhǔn)。2. 發(fā)射鏈路搭建與核心細(xì)節(jié)2.1 QPSK映射與符號歸一化QPSK映射是整條鏈路最基礎(chǔ)的一步但基礎(chǔ)不等于可以隨便寫。收發(fā)兩端必須對星座映射表完全一致而且發(fā)射端對符號功率要做好歸一化否則接收端的信噪比計(jì)算會整體偏移。我用的是標(biāo)準(zhǔn)單位能量星座四個(gè)星座點(diǎn)分別是(1j)/√2、(1-j)/√2、(-1j)/√2、(-1-j)/√2。這么除一個(gè)√2是為了讓每個(gè)符號的平均能量為1否則后面疊加噪聲的時(shí)候EbN0和EsN0的換算關(guān)系就對不上。寫成MATLAB代碼就是% QPSK格雷映射 map_table [11j, 1-1j, -11j, -1-1j] / sqrt(2); % 偶數(shù)位為I路奇數(shù)位為Q路 data_bits randi([0 1], nBits, 1); data_bits_matrix reshape(data_bits, 2, []).; sym_idx bi2de(data_bits_matrix, left-msb) 1; data_syms map_table(sym_idx).;這里用格雷映射能保證相鄰星座只差1個(gè)比特解調(diào)時(shí)即使誤判到相鄰星座也只會造成1比特錯(cuò)誤后續(xù)硬判決誤碼率會明顯更好看。2.2 數(shù)據(jù)塊格式化和UW插入做完映射之后就要把數(shù)據(jù)符號和UW拼成完整的傳輸塊。組裝順序我建議先想清楚因?yàn)榻邮斩俗鲱l域均衡時(shí)是以整個(gè)塊為單位的如果收發(fā)兩側(cè)對塊邊界的理解不一致后面全是亂的。我的做法是每192個(gè)QPSK數(shù)據(jù)符號前面拼接64個(gè)UW符號組成一個(gè)256點(diǎn)的塊。UW直接采用ZC序列的頻域生成形式再IFFT到時(shí)域或者直接在時(shí)域生成一段恒包絡(luò)序列都行。時(shí)域直接生成更方便比如nUW 64; nData nFFT - nUW; % ZC序列作為UW根索引選與nUW互質(zhì)的數(shù) u 1; uw_seq exp(-1j * pi * u * (0:nUW-1) .* (0:nUW-1) / nUW);這種序列的自相關(guān)旁瓣很低接收端拿它做相關(guān)峰檢測尖銳度很好。2.3 成型濾波與發(fā)送信號生成成型濾波器在SC-FDE里同樣不能省。沒有成型濾波的方波信號頻譜拖尾很重帶外泄漏嚴(yán)重如果后面要加帶限信道或者想計(jì)算頻譜效率結(jié)果會很粗糙。我用根升余弦濾波器滾降系數(shù)0.22濾波器階數(shù)span設(shè)為10個(gè)符號周期每個(gè)符號4個(gè)采樣點(diǎn)。sps 4; rolloff 0.22; span 10; tx_filter rcosdesign(rolloff, span, sps, sqrt);這里有個(gè)容易忽略的點(diǎn)濾波器有固有延遲濾波之后的信號整體會往后偏移span×sps/2個(gè)采樣點(diǎn)。接收端做定時(shí)同步時(shí)如果不把這個(gè)延遲考慮進(jìn)去或者說定時(shí)算法本身是在濾波之后的信號上搜峰那倒是問題不大但如果你拿濾波前后的信號做對比或者算誤差向量幅度就必須先對齊這個(gè)延遲。仿真里我一般會單獨(dú)記錄txDelay這個(gè)變量方便后期排查。發(fā)射端把每個(gè)塊串行拼起來之后經(jīng)過上采樣、成型濾波得到的信號就是要送入信道的基帶波形。多徑信道可以直接用離散卷積實(shí)現(xiàn)注意抽頭時(shí)延要是采樣周期的整數(shù)倍。如果用到分?jǐn)?shù)時(shí)延處理復(fù)雜度會上升仿真初期我建議先用整數(shù)倍時(shí)延把系統(tǒng)調(diào)通。3. 接收端三大核心模塊定時(shí)同步、載波同步與頻域均衡3.1 定時(shí)同步先粗同步再加細(xì)同步接收機(jī)拿到的信號首先面對兩個(gè)基本問題從哪里開始解調(diào)以及最佳判決點(diǎn)在哪。這就是定時(shí)同步要解決的。SC-FDE是塊處理結(jié)構(gòu)所以幀同步和符號定時(shí)同步經(jīng)常合在一起做。我的方案分兩步先用UW序列做相關(guān)粗同步。接收信號經(jīng)過匹配濾波后和本地UW序列做滑動互相關(guān)相關(guān)峰的位置就對應(yīng)著UW起始時(shí)刻。因?yàn)閆C序列自相關(guān)尖銳即使存在多徑主峰也還是比較明顯。不過多徑會讓相關(guān)峰展寬所以不能簡單取最大值而是取一個(gè)能量集中窗的中心這個(gè)細(xì)節(jié)后面在問題排查里細(xì)說。粗同步只能把位置確定到采樣點(diǎn)精度如果符號同步誤差是零點(diǎn)幾個(gè)采樣周期殘留的定時(shí)偏差會表現(xiàn)為符號間干擾和星座旋轉(zhuǎn)。因此我建議再做一步細(xì)同步經(jīng)典做法是Gardner算法或者OM算法。Gardner在每符號兩個(gè)采樣點(diǎn)時(shí)就能工作實(shí)現(xiàn)簡單適合SC-FDE這種帶寬效率較高的系統(tǒng)。實(shí)際工程里粗同步和細(xì)同步配合使用先定出塊邊界再做小數(shù)倍定時(shí)校正兩條腿走路才穩(wěn)。只做粗同步不校正殘差星座圖邊緣會有一圈霧狀散點(diǎn)誤碼率高到匪夷所思。3.2 載波同步從粗頻偏估計(jì)到殘余相偏補(bǔ)償載波同步要解決兩個(gè)層面的問題頻率偏移和相位偏移。頻偏的來源可能是收發(fā)兩端晶振不同步也可能是多普勒效應(yīng)。在仿真里我會在發(fā)射信號上直接乘一個(gè)e^(j2πf_d nT_s)來模擬頻偏。粗頻偏估計(jì)可以用UW序列做延遲相關(guān)。具體思路是既然接收端知道UW的確切位置就取兩個(gè)相隔一定距離的UW片段或者同一塊內(nèi)UW和數(shù)據(jù)段里的已知位置它們受過相同的信道影響但頻偏帶來的相位旋轉(zhuǎn)量不同。將兩段共軛相乘后取平均其相位差中包含了頻偏信息Δφ 2π·f_d·D·T_sym其中D是兩個(gè)片段的符號間隔T_sym是符號周期f_d是待估計(jì)的頻偏。所以頻偏估計(jì)值為delta_f_est angle(sum(conj(r1) .* r2)) / (2 * pi * D * T_sym);這個(gè)方法的優(yōu)點(diǎn)是只需要一次共軛相關(guān)計(jì)算量小適合作為前饋式粗估計(jì)。但要注意它的估計(jì)范圍受相位模糊限制|Δφ|不能超過π所以能估計(jì)的最大頻偏是1/(2·D·T_sym)D越大估計(jì)精度越高但范圍越小。這個(gè)矛盾在工程上靠多級估計(jì)解決先用小間隔的UW對掃大范圍頻偏再用大間隔細(xì)分估計(jì)。粗頻偏補(bǔ)償完之后還會剩一個(gè)較小的殘余頻偏這時(shí)候可以用判決輔助的相位估計(jì)器循環(huán)跟蹤。對QPSK信號一個(gè)常用的做法是把接收符號取4次方消去調(diào)制信息然后提取殘余相位誤差Δθ angle(mean(r^4)) / 4這個(gè)殘余相位估計(jì)器實(shí)現(xiàn)起來非常簡單仿真效果也很好。3.3 頻域均衡ZF和MMSE要選對頻域均衡是整個(gè)SC-FDE鏈路的核心。前面定時(shí)同步和載波同步都是為了把一個(gè)數(shù)據(jù)塊干凈地切出來并補(bǔ)償?shù)纛l偏之后就可以對這個(gè)塊做FFT在頻域逐子載波進(jìn)行信道均衡。均衡的第一步是做信道估計(jì)。最直接的方法是在每個(gè)塊里利用已知UW做LS信道估計(jì)發(fā)端UW在頻域已知接收端UW的FFT除以發(fā)端UW的FFT就得到信道頻響估計(jì)。實(shí)測中UW本身還攜帶均衡性能提升的可能比如用它做頻域插值平滑能減少噪聲對信道估計(jì)的影響。得到信道頻響H(k)之后可以選兩種均衡策略迫零均衡系數(shù)是W_zf(k) conj(H(k)) / |H(k)|^2它的思路是把信道完全“扳直”噪聲會被放大得很厲害尤其是在信道深衰落的頻點(diǎn)上一個(gè)深零點(diǎn)就能讓整塊數(shù)據(jù)性能崩塌。MMSE均衡系數(shù)是W_mmse(k) conj(H(k)) / (|H(k)|^2 1/SNR)相當(dāng)于在信道倒置時(shí)加入一個(gè)正則項(xiàng)避免在深衰落點(diǎn)上過度放大噪聲。這個(gè)1/SNR就是噪聲方差與信號功率的比值在仿真里可以直接用設(shè)定的EbN0換算也可以從接收端數(shù)據(jù)段里估出來。我強(qiáng)烈建議仿真時(shí)兩種均衡都實(shí)現(xiàn)因?yàn)閷Ρ瘸鰜淼慕Y(jié)果非常直觀在頻率選擇性較強(qiáng)的信道里MMSE比ZF能帶來明顯的誤碼率收益代價(jià)只是多算一個(gè)噪聲方差。均衡完成之后再IFFT回時(shí)域接著按數(shù)據(jù)段位置把UW去掉對數(shù)據(jù)符號做QPSK硬判決解映射統(tǒng)計(jì)誤碼。整個(gè)接收路線可以概括為匹配濾波 → UW相關(guān)粗定時(shí) → 細(xì)定時(shí)校正 → 頻偏估計(jì)與補(bǔ)償 → 去UW → FFT → 頻域均衡 → IFFT → 判決解調(diào)。4. 完整MATLAB仿真流程與關(guān)鍵代碼4.1 仿真主框架與參數(shù)區(qū)我習(xí)慣把SC-FDE仿真寫成兩個(gè)文件一個(gè)參數(shù)初始化腳本一個(gè)主循環(huán)函數(shù)。參數(shù)區(qū)集中定義所有系統(tǒng)級參數(shù)這樣跑不同信噪比點(diǎn)、不同信道時(shí)不用反復(fù)改代碼邏輯。%% 系統(tǒng)參數(shù) clear; close all; clc; M 4; % QPSK k log2(M); nFFT 256; % FFT點(diǎn)數(shù)即塊長度 nUW 64; % UW長度 nData nFFT - nUW; % 數(shù)據(jù)符號數(shù) nBlocks 100; % 每個(gè)SNR點(diǎn)發(fā)送的塊數(shù) sps 4; % 采樣倍數(shù) rolloff 0.22; span 10; EbN0_dB 0:2:14; symbolRate 4e6; % 4 Msps T_sym 1 / symbolRate; % 多徑信道參數(shù) channel_taps [1, 0.5, 0.3]; channel_delays [0, 2, 5]; % 整數(shù)倍采樣點(diǎn)延遲這里channel_taps和channel_delays定義一條簡單的三徑信道延遲都以采樣點(diǎn)為單位。注意最大時(shí)延5個(gè)采樣點(diǎn)遠(yuǎn)小于UW對應(yīng)的64個(gè)符號長度完全滿足循環(huán)卷積條件。4.2 發(fā)射機(jī)完整實(shí)現(xiàn)發(fā)射機(jī)的核心代碼邏輯是比特生成 → QPSK映射 → 組裝UW與數(shù)據(jù)塊 → 上采樣 → 成型濾波 → 加頻偏 → 過信道 → 加噪聲。% 生成UW序列時(shí)域ZC序列 u 1; uw_seq exp(-1j * pi * u * (0:nUW-1) .* (0:nUW-1) / nUW).; tx_filter rcosdesign(rolloff, span, sps, sqrt); txDelay span * sps / 2; % 濾波器延遲 % 主發(fā)射循環(huán) for blk 1:nBlocks % 隨機(jī)比特生成與QPSK映射 bitsTx randi([0 1], nData * k, 1); bits_mat reshape(bitsTx, k, []).; sym_idx bi2de(bits_mat, left-msb) 1; map_table [11j, 1-1j, -11j, -1-1j] / sqrt(2); data_syms map_table(sym_idx).; % 塊組裝UW 數(shù)據(jù) block [uw_seq; data_syms]; % 上采樣與成型濾波 block_up upsample(block, sps); tx_signal_blk filter(tx_filter, 1, block_up); tx_signal((blk-1)*length(tx_signal_blk)1 : blk*length(tx_signal_blk)) tx_signal_blk; end上采樣直接調(diào)upsample在每個(gè)符號后面補(bǔ)零然后用成型濾波器內(nèi)插。因?yàn)橛袨V波器延遲發(fā)射信號比理想位置向后偏移了txDelay個(gè)采樣點(diǎn)這個(gè)量在接收端對齊時(shí)要留個(gè)心眼。4.3 接收機(jī)完整實(shí)現(xiàn)接收機(jī)相對復(fù)雜我分塊寫清楚。首先是匹配濾波和粗定時(shí)同步。匹配濾波直接用同一個(gè)根升余弦濾波器然后對濾波后的信號和本地UW做滑動互相關(guān)。注意本地UW也要上采樣到相同的采樣率這樣相關(guān)峰的位置才會落在采樣點(diǎn)精度上。% 匹配濾波 rx_mf filter(tx_filter, 1, rx_signal); % 本地UW上采樣 uw_up upsample(uw_seq, sps); uw_up_filtered filter(tx_filter, 1, uw_up); uw_ref uw_up_filtered(1txDelay:end); % 對齊濾波器延遲 % 滑動互相關(guān) corr_len length(rx_mf) - length(uw_ref) 1; corr_out zeros(corr_len, 1); for n 1:corr_len corr_out(n) abs(sum(rx_mf(n:nlength(uw_ref)-1) .* conj(uw_ref))); end相關(guān)峰會出現(xiàn)在每個(gè)UW的起始位置附近。塊與塊之間的間隔是固定的所以可以只搜索第一個(gè)峰然后按塊的采樣長度推算出后續(xù)所有塊的位置。這個(gè)思路比每塊都搜峰更穩(wěn)能避免個(gè)別塊在多徑深衰落時(shí)相關(guān)峰太小的問題。粗同步之后是頻偏估計(jì)。利用同一塊內(nèi)UW尾部和自己做延遲相關(guān)的思路或者直接用上一塊和下一塊的UW相關(guān)。頻偏估計(jì)代碼已經(jīng)在上文給出重點(diǎn)是D的選取。實(shí)測時(shí)我用D32個(gè)符號間隔既能覆蓋±1%符號率的頻偏精度也夠用。載波同步完成后把每個(gè)塊從接收信號中切出來去掉循環(huán)前綴也就是UW對數(shù)據(jù)段做FFT前先要把UW去掉還是保留這里要特別說明頻域均衡的處理對象是整個(gè)數(shù)據(jù)塊如果UW作為CP放在塊頭切塊時(shí)可以把UW部分一起保留均衡后再丟棄。這意味著FFT的輸入是完整的256點(diǎn)塊循環(huán)卷積條件才能成立。只是MMSE均衡后的輸出需要把前面64個(gè)UW符號對應(yīng)的位置丟棄只保留后面192個(gè)數(shù)據(jù)符號做判決。這種做法更貼近實(shí)際系統(tǒng)。頻域均衡的代碼核心是信道估計(jì)和均衡系數(shù)計(jì)算% 去除相鄰塊之間的拖尾按塊切分 % 對于每個(gè)塊 rx_block rx_signal_blk; % 長度為 nFFT*sps 的采樣塊 % 抽取符號級樣本考慮定時(shí)同步給出的最佳采樣點(diǎn)偏移 rx_syms rx_block(bestOffset : sps : end); % 取256個(gè)符號 % FFT RX fft(rx_syms, nFFT); % 用UW做信道估計(jì)已知UW的FFT為UW_F H_est RX(1:nUW) ./ UW_F; % 對UW對應(yīng)的頻點(diǎn) % 插值得到全部頻點(diǎn)信道估計(jì)簡單起見可用全部塊的UW平均 H_full interp1(..., H_est, ..., linear, extrap); % MMSE均衡 SNR 10^(EbN0/10) * (nData / (nFFT * sps)); % 換算 W_mmse conj(H_full) ./ (abs(H_full).^2 1/SNR); % 均衡輸出 Y_eq RX .* W_mmse; y_eq ifft(Y_eq, nFFT); % 丟棄UW對應(yīng)符號保留數(shù)據(jù) data_eq y_eq(nUW1:end); % QPSK判決與解映射這里信道估計(jì)我只寫了思路因?yàn)榧?xì)節(jié)處理可以有很多變體。實(shí)用中更穩(wěn)妥的做法是整個(gè)仿真開始前先用一段全UW的探測塊把信道估計(jì)出來后面直接復(fù)用。因?yàn)榉抡嫘诺朗庆o態(tài)的這樣能省去逐塊估計(jì)的復(fù)雜度也便于驗(yàn)證均衡算法本身。4.4 誤碼率統(tǒng)計(jì)和理論曲線對比主循環(huán)對每個(gè)EbN0點(diǎn)做蒙特卡洛統(tǒng)計(jì)比較發(fā)送比特和解調(diào)比特計(jì)算誤碼率。QPSK在AWGN下的理論誤碼率公式是Pb Q(√(2·EbN0))在MATLAB里用0.5erfc(sqrt(EbN0))或者qfunc(sqrt(2EbN0))計(jì)算。多徑信道時(shí)沒有這么簡單的閉式解但可以用無頻偏、理想信道估計(jì)、MMSE均衡的仿真結(jié)果作為系統(tǒng)參考上界。我覺得驗(yàn)證鏈路正確性的最好辦法就是先跑AWGN信道。如果AWGN下你的仿真誤碼率曲線和理論曲線重合說明調(diào)制解調(diào)、定時(shí)同步、載波同步、均衡這幾大件基本沒問題然后再切換到多徑信道此時(shí)再觀察性能損失是否合理。很多新手一上來就放多徑信道結(jié)果曲線亂七八糟根本定位不了是哪個(gè)模塊的問題。先易后難調(diào)鏈路也是這樣。5. 常見問題與排查技巧實(shí)錄5.1 相關(guān)峰展寬或峰值偏移多徑信道下UW互相關(guān)輸出的峰不再是一個(gè)尖銳的點(diǎn)而是多個(gè)路徑峰值的疊加。如果直接取最大值所在位置作為定時(shí)點(diǎn)往往會偏向最強(qiáng)徑而非第一徑造成定時(shí)偏移。我的處理方法是先對相關(guān)功率做滑動窗積分能量窗長度取信道最大時(shí)延擴(kuò)展對應(yīng)的采樣點(diǎn)數(shù)再取能量窗的中心作為同步位置。這個(gè)辦法在多徑環(huán)境下比單純找峰穩(wěn)得多。另外要注意本地UW參考序列的濾波器延遲對齊。如果接收端匹配濾波和成型濾波共用同一個(gè)濾波器本地參考也要經(jīng)過相同的濾波并截掉同樣長度的延遲否則相關(guān)峰位置會差一個(gè)固定偏移導(dǎo)致每塊都切偏。5.2 殘余頻偏表現(xiàn)為星座旋轉(zhuǎn)粗頻偏補(bǔ)償之后如果還有剩余頻偏最直觀的現(xiàn)象是QPSK星座點(diǎn)隨著符號序號逐漸旋轉(zhuǎn)塊首的符號相位誤差小塊尾的符號相位誤差大。這種旋轉(zhuǎn)如果用硬判決直接解調(diào)塊尾符號會大量誤判。對策是加入判決輔助的殘余相位跟蹤。一個(gè)簡單的實(shí)現(xiàn)是逐符號估計(jì)相位誤差后用一階環(huán)路濾波但仿真里更省事的辦法是每個(gè)塊做完頻域均衡、IFFT回時(shí)域后利用UW處的已知符號估計(jì)剩余公共相偏然后對整個(gè)塊的數(shù)據(jù)做共軛旋轉(zhuǎn)。因?yàn)轭l偏在塊內(nèi)造成的相位旋轉(zhuǎn)是累加的這個(gè)方法相當(dāng)于把整塊的公共相偏消掉配合前面粗頻偏已經(jīng)足夠把QPSK星座拉回正位。5.3 MMSE均衡的噪聲方差取不準(zhǔn)MMSE均衡系數(shù)里的1/SNR直接決定均衡器是在“信道倒置”和“噪聲抑制”之間取怎樣的折中。如果在低信噪比區(qū)把SNR設(shè)得過高均衡器會偏向ZF噪聲放大明顯在高信噪比區(qū)把SNR設(shè)得過低均衡器又過度平滑深衰落頻點(diǎn)得不到補(bǔ)償殘余碼間干擾嚴(yán)重。仿真里有一個(gè)有效技巧用數(shù)據(jù)段本身的接收信號來估計(jì)噪聲方差。每塊均衡前可以把UW位置的均衡誤差統(tǒng)計(jì)出來因?yàn)閁W是已知的這個(gè)誤差里主要就包含了噪聲和殘余干擾可以用它來動態(tài)更新SNR估計(jì)。實(shí)測下來這種自適應(yīng)SNR估計(jì)比固定參數(shù)更穩(wěn)。5.4 濾波器延遲補(bǔ)償被遺漏這是新手最常踩的坑。成型濾波和匹配濾波各引入一次span×sps/2的延遲總延遲就是span×sps。如果定時(shí)同步是在匹配濾波之后做的那么發(fā)射端的第一個(gè)濾波延遲已經(jīng)隱含在信道時(shí)延里不會額外造成問題。但如果把濾波器輸出直接當(dāng)作理想時(shí)刻的信號用理論位置去切塊就會看到整個(gè)星座整體旋轉(zhuǎn)或者眼圖張開度不足。排查這類問題最簡單的辦法是發(fā)一個(gè)純UW塊不加載波同步直接觀察相關(guān)峰位置與理論位置的差這個(gè)差值就是濾波器延遲加上信道時(shí)延。5.5 問題速查表現(xiàn)象大概率原因處理辦法星座圖整體旋轉(zhuǎn)殘余頻偏未補(bǔ)償增加殘余相偏估計(jì)環(huán)路星座圖呈環(huán)狀散點(diǎn)定時(shí)采樣點(diǎn)偏移較大檢查相關(guān)峰定位和細(xì)同步深衰落頻點(diǎn)附近噪聲極大用ZF均衡且信道有深零點(diǎn)改用MMSE核實(shí)SNR估計(jì)高信噪比誤碼率地板下不去濾波器延遲未對齊校準(zhǔn)發(fā)射/接收濾波器延遲相關(guān)峰多個(gè)且平緩多徑時(shí)延大于UW長度加大UW長度或降低符號率UW塊前后數(shù)據(jù)BER差異大循環(huán)卷積條件被破壞確認(rèn)UW長度覆蓋最大時(shí)延擴(kuò)展我在自己調(diào)這條鏈路的時(shí)候體會最深的一點(diǎn)是不要同時(shí)引入太多新變量。SC-FDE的模塊彼此耦合很緊密定時(shí)同步不準(zhǔn)會讓頻偏估計(jì)出問題頻偏補(bǔ)償不完全又會讓信道估計(jì)不準(zhǔn)最終全堆在均衡上。所以每一步都要單獨(dú)驗(yàn)證先發(fā)純UW驗(yàn)證同步再發(fā)已知數(shù)據(jù)驗(yàn)證均衡最后才上隨機(jī)比特做誤碼率統(tǒng)計(jì)。這個(gè)方法雖然慢但排查問題一找一個(gè)準(zhǔn)。最后再分享一個(gè)小技巧跑仿真時(shí)把每一步的中間結(jié)果比如定時(shí)誤差、頻偏估計(jì)值、均衡前的信噪比估值都打印或畫出來看一眼。你花十分鐘看這些中間量往往比在誤碼率曲線上猜原因節(jié)省幾小時(shí)。鏈路通了之后你還可以把QPSK換成16QAM或者把ZC序列換成其他UW設(shè)計(jì)看看性能怎么變化——這套框架是能直接擴(kuò)展的。