星頻譜感知與多門限判決優(yōu)化)
簡介一份聚焦衛(wèi)星認(rèn)知通信頻譜感知應(yīng)用的學(xué)術(shù)論文《基于長短期記憶神經(jīng)網(wǎng)絡(luò)的衛(wèi)星頻譜多門限感知算法》面向衛(wèi)星通信、認(rèn)知無線電、深度學(xué)習(xí)領(lǐng)域的研究者與工程技術(shù)人員旨在解決傳統(tǒng)頻譜感知算法在低信噪比衛(wèi)星信道下感知性能低、受通信時延影響大的問題。該論文來自《信號處理》期刊資源包中僅有一個文檔為PDF格式壓縮包約三兆字節(jié)內(nèi)容即論文全文系統(tǒng)闡述了長短期記憶神經(jīng)網(wǎng)絡(luò)用于頻譜預(yù)測感知的完整方案包括構(gòu)建衛(wèi)星認(rèn)知通信模型、采用動量隨機(jī)梯度下降算法更新網(wǎng)絡(luò)、設(shè)計多門限優(yōu)化策略并給出了與其他神經(jīng)網(wǎng)絡(luò)算法的性能對比實驗與結(jié)論。全文無需構(gòu)建特征值實驗數(shù)據(jù)表明該算法在低信噪比和低迭代次數(shù)條件下具有更優(yōu)感知性能。目前已有235人學(xué)習(xí)適合作為科研選題、算法復(fù)現(xiàn)和課程設(shè)計的原始文獻(xiàn)可直接獲得完整公式、圖表與寫作思路便于深入理解方法細(xì)節(jié)。1. 用 LSTM 做衛(wèi)星頻譜感知先解決時延再談門限判決把 LSTM 神經(jīng)網(wǎng)絡(luò)用在衛(wèi)星頻譜感知上本質(zhì)上不是換個分類器那么簡單而是把「感知」從一次測量變成一段預(yù)測。衛(wèi)星認(rèn)知通信里最麻煩的問題是大時延SU 端拿到感知結(jié)果時PU 信道狀態(tài)可能已經(jīng)變了按舊數(shù)據(jù)接入就會撞車。這篇論文的思路很直接——既然實時測不準(zhǔn)那就用 LSTM 預(yù)測幾百毫秒后的信道狀態(tài)再配合多門限判決把輸出序列中的毛刺和慣性壓下去。整套方案覆蓋了衛(wèi)星信道建模、M/M/1 排隊論、LSTM 門控結(jié)構(gòu)、SGDM 更新策略和多門限優(yōu)化適合正在做認(rèn)知無線電、衛(wèi)星通信或時序預(yù)測的工程師照著復(fù)現(xiàn)。不需要構(gòu)建特征值原始感知統(tǒng)計量直接進(jìn)網(wǎng)絡(luò)這個特性對工程落地很友好。2. 衛(wèi)星認(rèn)知信道建模M/M/1 排隊論與仿真參數(shù)表2.1 場景設(shè)定與鏈路關(guān)系論文的場景是一個 GEO 同步軌道衛(wèi)星透明轉(zhuǎn)發(fā)模式FDMA 多址。PU 和 SU 共用同一顆衛(wèi)星的信道資源SU 通過感知 PU 鏈路的下行信道狀態(tài)來判斷上行信道是否被占用。這里有一個容易被忽略的細(xì)節(jié)下行信道是衛(wèi)星到 PU 接收端這一段上行信道是 PU 發(fā)送端到衛(wèi)星這一段SU 能感知到的只有下行但要預(yù)測的其實是整條鏈路的占用情況。由于衛(wèi)星信道存在單跳 250ms 的時延SU 在 t1 時刻感知到的實際上是 t0 時刻的 PU 信道狀態(tài)。如果 SU 檢測到頻譜空穴并開始發(fā)送數(shù)據(jù)數(shù)據(jù)還要再經(jīng)過一段時延才能到達(dá)衛(wèi)星端。所以 SU 真正要做的是根據(jù) t0 時刻的感知數(shù)據(jù)預(yù)測 t02τ 時刻的信道狀態(tài)τ 為單跳衛(wèi)星時延。這個「預(yù)測目標(biāo)后移」是整篇算法設(shè)計的出發(fā)點(diǎn)也是 LSTM 能發(fā)揮作用的關(guān)鍵位置——傳統(tǒng)能量檢測完全沒有預(yù)測能力只能拿過時數(shù)據(jù)做判決。2.2 M/M/1 排隊論建模 PU 信道狀態(tài)PU 信道狀態(tài)被建模成 M/M/1 排隊系統(tǒng)個體用戶到達(dá)時間服從參數(shù) λ 的泊松分布服務(wù)時間服從參數(shù) μ 的負(fù)指數(shù)分布單信道服務(wù)。信道狀態(tài)在「空閑」和「占用」之間切換通信強(qiáng)度 ρ 定義為ρ meanON / (meanON meanOFF) λ / μ這個公式說明了一個工程上的便利固定 μ用戶服務(wù)時長期望不變只改變 λ 就能產(chǎn)生不同通信強(qiáng)度 ρ 的信道狀態(tài)序列。論文用 ρ 從 0.1 到 0.9 的九條序列對比算法性能就是因為 ρ 直接決定了信道忙閑比例對漏檢概率影響很大。ρ 越高信道空閑時間越少一旦判決出錯漏檢概率上升幅度會非常明顯。對于 SU 接收端的感知數(shù)據(jù)論文采用能量檢測統(tǒng)計量x(t) Σ r(t) n(t)其中采樣點(diǎn)數(shù)取 10采樣頻率 20 MHzr(t) 是 SU 接收到的 PU 衛(wèi)星信號n(t) 是噪聲噪聲功率 Pn N·T·BN 為玻爾茲曼常數(shù)T 為絕對溫度B 為單信道接收帶寬接收信噪比 SNR 10lg(Pr / Pn)接收功率 Pr 由 EIRP、衛(wèi)星端增益、SU 接收增益和各段路徑損耗決定。改變 EIRP 就能調(diào)整 SNR從而對比不同低信噪比場景下的算法性能。下面給出一段參考代碼生成 ρ0.5 時的信道狀態(tài)序列和感知統(tǒng)計量常見做法是用 Python 模擬排隊過程再疊加噪聲產(chǎn)生感知數(shù)據(jù)。import numpy as np def generate_channel_states(lmbda, mu, slots, rngNone): 生成 M/M/1 信道狀態(tài)序列 lmbda: 用戶到達(dá)率 (泊松分布參數(shù)) mu: 用戶服務(wù)率 (負(fù)指數(shù)分布參數(shù)) slots: 感知時隙數(shù)量 if rng is None: rng np.random.default_rng(42) states np.zeros(slots, dtypeint) t 0 while t slots: # 空閑時長服從參數(shù)為 lmbda 的指數(shù)分布 idle rng.exponential(1 / lmbda) t int(idle) if t slots: break # 占用時長服從參數(shù)為 mu 的指數(shù)分布 busy rng.exponential(1 / mu) states[t:min(t int(busy), slots)] 1 t int(busy) return states def compute_sensing_statistic(states, snr_db, samples10): 模擬 SU 能量檢測統(tǒng)計量 states: 信道狀態(tài)序列 (0/1) snr_db: 接收信噪比 (dB) samples: 每個時隙采樣點(diǎn)數(shù) snr_linear 10 ** (snr_db / 10) noise_power 1.0 signal_power noise_power * snr_linear statistic np.zeros(len(states)) for i, state in enumerate(states): if state 1: # 占用狀態(tài)信號 噪聲 statistic[i] np.sum(np.sqrt(noise_power) * rng.standard_normal(samples) np.sqrt(signal_power) * rng.standard_normal(samples)) else: # 空閑狀態(tài)只有噪聲 statistic[i] np.sum(np.sqrt(noise_power) * rng.standard_normal(samples)) return statistic代碼邏輯說明generate_channel_states 用指數(shù)分布的交替采樣模擬 M/M/1 的信道狀態(tài)切換空閑時長和占用時長分別由到達(dá)率和服務(wù)率決定。compute_sensing_statistic 按論文的能量檢測思想對每個感知時隙做 10 次采樣累加占用狀態(tài)疊加信號功率空閑狀態(tài)只有噪聲。參數(shù)上snr_db 取負(fù)值時信號功率小于噪聲功率模擬衛(wèi)星低信噪比信道。2.3 仿真參數(shù)與數(shù)據(jù)集構(gòu)造論文給出的衛(wèi)星信道仿真參數(shù)是復(fù)現(xiàn)時必須對齊的硬指標(biāo)參數(shù)數(shù)值衛(wèi)星端增益32 dBSU 接收增益34 dB出境中心頻率14253 MHz入境中心頻率12 GHz 量級原文此位 OCR 缺失PU 信道帶寬10 MHz單跳衛(wèi)星時延250 ms調(diào)制方式QPSK數(shù)據(jù)集構(gòu)造方面感知間隔設(shè)為 500 ms這是由單跳時延 250ms 決定的——預(yù)測目標(biāo)要覆蓋一個完整的往返時延。SU 感知數(shù)據(jù)統(tǒng)計量按長度 128 分塊對應(yīng) batchsize128再按 9:1 劃分訓(xùn)練集和測試集。注意這里的分塊不能打亂時間順序因為 LSTM 依賴時序關(guān)系亂序切分會造成數(shù)據(jù)泄漏后面避坑章節(jié)會詳細(xì)說。3. LSTM 門控與 SGDM 更新公式、參數(shù)與收斂行為3.1 從 RNN 到 LSTM三個門控單元解決長期依賴RNN 處理時序數(shù)據(jù)時有一個致命缺陷當(dāng)輸入數(shù)據(jù)與所求輸出的時間跨度較大時之前較長時間的信息無法對后續(xù)輸出造成影響產(chǎn)生長期依賴問題。LSTM 在 1997 年由 Hochreiter 提出核心改動是在隱藏層單元里增加了三個信息控制單元——輸入門 i(t)、遺忘門 f(t)、輸出門 o(t)通過門控機(jī)制保留有用信息、丟棄無用信息。前向傳播的核心公式如下輸入門i(t) σ(W_i · x(t) U_i · h(t-1) b_i)遺忘門f(t) σ(W_f · x(t) U_f · h(t-1) b_f)輸出門o(t) σ(W_o · x(t) U_o · h(t-1) b_o)狀態(tài)信息c(t) f(t) ⊙ c(t-1) i(t) ⊙ tanh(W_c · x(t) U_c · h(t-1) b_c)隱藏層輸出h(t) o(t) ⊙ tanh(c(t))網(wǎng)絡(luò)輸出y(t) W_y · h(t) b_y門控的本質(zhì)是讓梯度有一條「高速公路」可以穿過長時間步之前的記憶通過遺忘門決定保留多少新的輸入通過輸入門決定寫入多少。這個機(jī)制對衛(wèi)星頻譜感知的意義在于PU 信道狀態(tài)的切換是時序相關(guān)的前一段的空閑狀態(tài)對當(dāng)前判決有參考價值而且感知間隔長達(dá) 500ms序列的時間關(guān)聯(lián)性天然偏弱普通 RNN 早就把早期信息丟光了。LSTM 網(wǎng)絡(luò)訓(xùn)練采用基于時間的反向傳播算法 BPTT流程分六步前向計算輸出參數(shù)、反向計算各參數(shù)誤差項、計算參數(shù)誤差、用梯度更新算法更新、判斷是否達(dá)到最大迭代次數(shù)或最小誤差、輸入測試集得到預(yù)測結(jié)果。整個流程和 BP 算法同源區(qū)別只在誤差沿時間維反向傳播。3.2 SGDM動量項給梯度更新加「慣性」隨機(jī)梯度下降 SGD 的基本更新方式是 w(t) w(t-1) Δw(t)其中 Δw(t) -η·?L(w)。SGD 的問題在于更新方向不穩(wěn)定容易陷入局部最優(yōu)點(diǎn)。SGDM 在 1999 年由 Qian 引入動量概念更新公式變成v(t) α·v(t-1) - η·?L(w)w(t) w(t-1) v(t)其中 α 為動量因子取值在 0 到 1 之間。動量項的作用是讓參數(shù)更新獲得「慣性」在梯度方向一致的區(qū)域加速收斂在局部最優(yōu)點(diǎn)附近震蕩時梯度趨于零動量項仍然推動參數(shù)繼續(xù)前進(jìn)幫助跳出局部最優(yōu)。論文用 SGDM 還有一個更實際的考量當(dāng) PU 信道狀態(tài)發(fā)生變化時網(wǎng)絡(luò)參數(shù)需要快速做出調(diào)整以適配新狀態(tài)SGDM 的慣性在這一場景下比普通 SGD 響應(yīng)更快。這里值得對比一下 ADAM。ADAM 融合了 AdaGrad 和 RMSProp 的思想自動調(diào)節(jié)學(xué)習(xí)率收斂通常很順滑。但論文實驗發(fā)現(xiàn)一個反直覺的結(jié)果在低迭代次數(shù)場景下ADAM-LSTM 要到迭代 85 次才收斂而 SGDM-LSTM 和本文算法在 25 次左右就趨于平穩(wěn)。原因是 ADAM 的自適應(yīng)學(xué)習(xí)率在初期會拉低有效步長而 SGDM 的動量項在坡度大的地方步長更大。對于離線訓(xùn)練時間有限的場景SGDM 反而比 ADAM 更穩(wěn)。網(wǎng)絡(luò)結(jié)構(gòu)方面本文算法是三層結(jié)構(gòu)輸入層 128 個神經(jīng)元隱藏層 128 個神經(jīng)元輸出層 1 個神經(jīng)元。輸入層 128 對應(yīng) batchsize128 的分塊長度隱藏層神經(jīng)元數(shù)量與輸入層一致是 LSTM 時序預(yù)測的常見配置輸出層單節(jié)點(diǎn)輸出 PU 信道狀態(tài)的概率值。下面給出一段 PyTorch 參考實現(xiàn)import torch import torch.nn as nn import torch.optim as optim class LSTMPredictor(nn.Module): def __init__(self, input_size128, hidden_size128, output_size1): super().__init__() self.lstm nn.LSTM(input_size, hidden_size, batch_firstTrue) self.fc nn.Linear(hidden_size, output_size) self.sigmoid nn.Sigmoid() def forward(self, x): # x: [batch, seq_len, input_size] out, _ self.lstm(x) out self.fc(out[:, -1, :]) # 取最后一個時間步的輸出 return self.sigmoid(out) model LSTMPredictor(input_size128, hidden_size128, output_size1) optimizer optim.SGD(model.parameters(), lr0.01, momentum0.9) criterion nn.BCELoss() # 二分類用二元交叉熵代碼邏輯說明LSTM 層輸入維度是 128對應(yīng)每個樣本包含 128 個感知統(tǒng)計量特征batch_firstTrue 讓輸入形狀為 [batch, seq_len, features]。輸出層接 Sigmoid 把預(yù)測值壓縮到 0~1 區(qū)間便于后續(xù)門限判決。優(yōu)化器特意用 SGD momentum0.9 實現(xiàn) SGDM而不是用 Adam——這是論文的核心配置復(fù)現(xiàn)時不要順手換成 Adam除非你真的不在乎低迭代次數(shù)下的收斂速度。3.3 訓(xùn)練配置的邊界條件論文實驗中兩個小時仿真數(shù)據(jù)產(chǎn)生 14400 條感知統(tǒng)計量GTX 1050 上離線訓(xùn)練時長約 40 秒。LSTM 因為隱藏單元結(jié)構(gòu)復(fù)雜訓(xùn)練時長明顯高于 BP 網(wǎng)絡(luò)和 NAR 網(wǎng)絡(luò)——這是用計算復(fù)雜度換性能優(yōu)勢。如果復(fù)現(xiàn)時訓(xùn)練時間明顯超出這個量級優(yōu)先檢查是不是把 seq_len 和 input_size 搞反了或者 batch 太大導(dǎo)致顯存換頁頻繁。LSTM 的網(wǎng)絡(luò)更新用 BPTT梯度沿時間維展開訓(xùn)練時間對序列長度很敏感。4. 多門限判決優(yōu)化從單門限漏判到毛刺抑制4.1 單門限判決的兩個致命缺陷LSTM 網(wǎng)絡(luò)輸出的預(yù)測序列取值范圍是 (0, y_max]y_max 通常不超過 2。如果直接用單門限判決取信道空閑狀態(tài)為 0 時的預(yù)測均值 meanOFF 和占用狀態(tài)為 1 時的預(yù)測均值 meanON 的中點(diǎn)作為門限γm (meanON meanOFF) / 2輸出值大于 γm 判為 1小于判為 0??雌饋砗芎唵蔚l(wèi)星低信噪比場景下有兩個問題。第一個是毛刺信道狀態(tài)為 1 時低信噪比會讓部分輸出序列值低于 γm被誤判成 0輸出序列出現(xiàn)高頻翻轉(zhuǎn)的毛刺。第二個是慣性假設(shè) PU 信道狀態(tài)從 0 變?yōu)?1網(wǎng)絡(luò)剛開始調(diào)整時由于 SGDM 的累計動量還沒起來輸出值爬升不足在 γm 以下停留了幾個時隙導(dǎo)致判決結(jié)果滯后真實信道狀態(tài)。這兩個問題本質(zhì)上是互補(bǔ)的毛刺是誤判太多慣性是反應(yīng)太慢。4.2 雙門限判決解決毛刺但加劇滯后雙門限判決引入兩個門限 γ0 和 γ1劃分出三個區(qū)域小于 γ0 判為 0大于 γ1 判為 1落在中間區(qū)域則保持上一時刻的判決結(jié)果。這樣可以濾掉大部分毛刺——一個孤立的低值輸出不會讓判決從 1 翻轉(zhuǎn)到 0。但雙門限有一個隱蔽的副作用保持策略讓輸出序列產(chǎn)生滯后。如果信道狀態(tài)剛從 0 變成 1輸出值還未完全爬升到 γ1 以上判決結(jié)果會停留在 0直到輸出繼續(xù)爬升越過 γ1。這個滯后在衛(wèi)星場景下會被時延放大——你本來就在預(yù)測 t2τ 時刻的狀態(tài)如果判決環(huán)節(jié)再滯后幾個時隙預(yù)測的前瞻性就被抵消了。4.3 多門限優(yōu)化次級門限加趨勢判斷論文在雙門限基礎(chǔ)上增加了兩個次級門限 γ10 和 γ01分別用于快速檢測數(shù)據(jù)變化過程。算法流程如下步驟操作1初始化 y_opt(0) 02輸入 y(t)若 y(t) γ1 則 y_opt(t)1若 y(t) γ0 則 y_opt(t)0轉(zhuǎn)步驟 83若 y_opt(t-1)1 轉(zhuǎn)步驟 4若 y_opt(t-1)0 轉(zhuǎn)步驟 64若 y(t) γ10 則 y_opt(t)1轉(zhuǎn)步驟 8反之轉(zhuǎn)步驟 55若 y(t) y(t-1) 則 y_opt(t)1反之 y_opt(t)0轉(zhuǎn)步驟 86若 y(t) γ01 則 y_opt(t)0轉(zhuǎn)步驟 8反之轉(zhuǎn)步驟 77若 y(t) y(t-1) 則 y_opt(t)0反之 y_opt(t)1轉(zhuǎn)步驟 88若 t t_max 則 tt1 轉(zhuǎn)步驟 2否則輸出 y_opt關(guān)鍵邏輯在步驟 4-7當(dāng)判決狀態(tài)為 1 但輸出回落到中間區(qū)間時先看輸出是否高于次級門限 γ10如果已經(jīng)跌破就進(jìn)一步比較當(dāng)前輸出與上一時刻輸出——上升則維持 1下降則翻轉(zhuǎn)為 0。同理判決狀態(tài)為 0 時用 γ01 和趨勢判斷來快速捕捉信道狀態(tài)由 0 變 1 的拐點(diǎn)。這個設(shè)計的核心動機(jī)是在衛(wèi)星認(rèn)知通信場景中及時發(fā)現(xiàn) PU 的存在比過濾毛刺更重要漏檢的代價遠(yuǎn)高于誤警。論文通過后期實驗多次矯正最終門限參數(shù)設(shè)置為γ0 0.2γ1 0.8γ01 0.3γ10 0.7注意算法輸入順序是 γ0, γ1, γ10, γ01參數(shù)對應(yīng) 0.2, 0.8, 0.7, 0.3。這個不對稱配置是有講究的γ10 設(shè)為 0.7意味著已判 1 狀態(tài)時只要輸出跌破 0.7 就進(jìn)入趨勢判斷避免信道狀態(tài)已經(jīng)轉(zhuǎn)為 0 卻還占著判決結(jié)果不放γ01 設(shè)為 0.3意味著已判 0 狀態(tài)時輸出只要超過 0.3 就觸發(fā)趨勢判斷保證能快速響應(yīng) PU 的出現(xiàn)。多門限處理毛刺的能力其實有限論文自己承認(rèn)這點(diǎn)但 LSTM 網(wǎng)絡(luò)的輸出區(qū)分度本身就比較好兩者形成性能互補(bǔ)。下面給出多門限判決的 Python 參考實現(xiàn)def multi_threshold_decision(y_seq, gamma00.2, gamma10.8, gamma100.7, gamma010.3): 多門限優(yōu)化判決 y_seq: LSTM 網(wǎng)絡(luò)輸出序列 返回: 判決后的 0/1 序列 y_opt np.zeros(len(y_seq), dtypeint) y_prev y_seq[0] for t in range(len(y_seq)): y y_seq[t] if y gamma1: y_opt[t] 1 elif y gamma0: y_opt[t] 0 else: if t 0 and y_opt[t-1] 1: # 已判 1用 γ10 和趨勢判斷是否翻轉(zhuǎn) if y gamma10: y_opt[t] 1 else: y_opt[t] 1 if y y_prev else 0 elif t 0 and y_opt[t-1] 0: # 已判 0用 γ01 和趨勢判斷是否翻轉(zhuǎn) if y gamma01: y_opt[t] 0 else: y_opt[t] 0 if y y_prev else 1 else: y_opt[t] 0 if y gamma1 else 1 y_prev y return y_opt代碼邏輯說明外層兩檔硬門限 γ0、γ1 先做粗分類中間區(qū)間進(jìn)入次級門限判斷分支。y_prev 保存上一時刻的原始輸出值用于趨勢比較。這里有個容易寫錯的細(xì)節(jié)步驟 5 和步驟 7 的「y(t) y(t-1)」比較的是網(wǎng)絡(luò)原始輸出序列不是判決結(jié)果用判決后的 0/1 序列做趨勢判斷會完全失效。實現(xiàn)時務(wù)必保留一條原始輸出序列的引用。5. 復(fù)現(xiàn)中的常見坑與排查SNR、迭代次數(shù)與網(wǎng)絡(luò)選型5.1 三個對比維度的實驗結(jié)果論文從三個維度做了對比實驗結(jié)果都指向同一個結(jié)論LSTM 系列算法在衛(wèi)星信道下的性能穩(wěn)定性優(yōu)于 BP 和 NAR。通信強(qiáng)度 ρ 從 0.1 到 0.9 的實驗中LSTM 網(wǎng)絡(luò)的預(yù)測準(zhǔn)確率曲線平穩(wěn)BP 網(wǎng)絡(luò)準(zhǔn)確率偏低且誤警概率波動大NAR 網(wǎng)絡(luò)預(yù)測曲線波動最明顯。漏檢概率隨 ρ 增加整體上升因為信道空閑狀態(tài)減少后只要判決出一次錯誤漏檢概率就會被放大。但在 ρ 較高時本文算法的漏檢概率依然能維持在相對穩(wěn)定的水平。迭代次數(shù)方面5 到 100 次迭代的對比顯示 LSTM 網(wǎng)絡(luò)收斂最快。迭代 25 次時本文算法和 SGDM-LSTM 的準(zhǔn)確率已經(jīng)趨于平穩(wěn)而 ADAM-LSTM 到 85 次才收斂。這個差距意味著在算力受限或需要快速部署的場景下SGDM 配合多門限的優(yōu)勢非常明顯。接收信噪比從 -20 dB 到 0 dB 的實驗中所有網(wǎng)絡(luò)性能都隨 SNR 下降而下滑但 LSTM 網(wǎng)絡(luò)的準(zhǔn)確率保持在 0.70 到 0.75 之間本文算法穩(wěn)定在 0.80 左右。對比的四種神經(jīng)網(wǎng)絡(luò)選型如下網(wǎng)絡(luò)類型模型結(jié)構(gòu)訓(xùn)練時長BP4-20-15-1約 8.5 sNAR128-64-1時延 10:1約 17.4 sADAM-LSTM128-128-1約 43 sSGDM-LSTM128-128-1約 40 s本文算法128-128-1約 41 sLSTM 系列訓(xùn)練時長是 BP 和 NAR 的兩倍多但換來的是低 SNR 下 5~10 個百分點(diǎn)的準(zhǔn)確率提升以及穩(wěn)定得多的漏檢概率曲線。在衛(wèi)星通信場景里這個交換是值得的。5.2 高概率翻車的復(fù)現(xiàn)問題排查復(fù)現(xiàn)這份算法最容易踩坑的地方藏在數(shù)據(jù)預(yù)處理和門限參數(shù)里。下面這幾條是我對照論文逐步復(fù)現(xiàn)時遇到過的實際問題。問題一訓(xùn)練不收斂準(zhǔn)確率長期停在 50% 左右現(xiàn)象LSTM 訓(xùn)練了上百個 epoch準(zhǔn)確率始終在 0.5 附近波動和論文結(jié)果完全對不上。原因SU 感知統(tǒng)計量沒有做歸一化。能量檢測統(tǒng)計量的絕對值受信號功率和噪聲功率影響很大不同 SNR 場景下量綱差異明顯直接送進(jìn) LSTM 會讓損失函數(shù)震蕩。論文的圖 8 明確標(biāo)注了「經(jīng)歸一化處理的 SU 感知數(shù)據(jù)統(tǒng)計量」這一步不是可選項。解決訓(xùn)練前對感知統(tǒng)計量做 min-max 歸一化到 0~1 區(qū)間。注意要按整段序列的全局最小最大值歸一化不要按 batch 單獨(dú)歸一化否則會破壞時序數(shù)據(jù)的一致性。問題二預(yù)測結(jié)果整體滯后一拍準(zhǔn)確率看似很高但對不上信道狀態(tài)現(xiàn)象模型輸出曲線形狀和真實信道狀態(tài)很像錯位的視覺上不明顯但對比 0/1 標(biāo)簽時準(zhǔn)確率只有 60% 出頭。原因感知間隔和預(yù)測目標(biāo)沒對齊。論文設(shè)置的感知間隔為 500ms對應(yīng)單跳時延 250ms 的雙跳往返。訓(xùn)練標(biāo)簽應(yīng)該是 t2τ 時刻的信道狀態(tài)而不是當(dāng)前時刻的狀態(tài)。很多人復(fù)現(xiàn)時直接把當(dāng)前時刻標(biāo)簽送進(jìn)去訓(xùn)練模型學(xué)到的是一條偏移的映射。解決構(gòu)造訓(xùn)練數(shù)據(jù)時把信道狀態(tài)標(biāo)簽 y 整體前移 2 個時隙對應(yīng) 500ms 時延讓 LSTM 學(xué)習(xí)的是「根據(jù)過去感知數(shù)據(jù)預(yù)測未來的狀態(tài)」。問題三門限參數(shù)照抄論文但還是誤判嚴(yán)重現(xiàn)象γ00.2、γ10.8、γ100.7、γ010.3 全部照抄但復(fù)現(xiàn)場景下判決結(jié)果毛刺比論文嚴(yán)重得多。原因門限參數(shù)是依賴數(shù)據(jù)分布的。論文的 0.2/0.8/0.3/0.7 是在特定 SNR、特定通信強(qiáng)度下「后期實驗多次矯正」出來的經(jīng)驗值。不同信噪比下 LSTM 輸出序列的均值和方差都會變化硬套參數(shù)等于假設(shè)輸出分布不變。解決先用論文式 (20) 計算初始門限 γm (meanON meanOFF) / 2再圍繞 γm 向兩邊推開 γ0 和 γ1最后跑一遍驗證集看漏檢和誤警的取舍再微調(diào)次級門限。次級門限要遵循不對稱原則γ10 偏高更快釋放 1 狀態(tài)γ01 偏低更快捕獲 1 狀態(tài)。問題四ADAM 和 SGDM 的收斂差異被誤解為 LSTM 效果差現(xiàn)象換成 ADAM 優(yōu)化器后同樣迭代 25 次準(zhǔn)確率明顯低于論文于是懷疑 LSTM 網(wǎng)絡(luò)有問題。原因ADAM 在低迭代次數(shù)下的有效步長偏小85 次迭代才能收斂。論文的性能對比是在 85 次迭代下做的如果你只給 25 次ADAM-LSTM 自然吃虧。解決要對比就同時給足迭代次數(shù)。論文實驗表明 SGDM 更適合低迭代次數(shù)場景ADAM 在高迭代次數(shù)下也能達(dá)到相近效果但訓(xùn)練時間更長。工程上如果算力緊張直接用 SGDM。問題五訓(xùn)練集測試集切分時亂打亂導(dǎo)致驗證結(jié)果虛高現(xiàn)象9:1 切分后測試準(zhǔn)確率高達(dá) 0.92遠(yuǎn)高于論文的 0.8但換一批數(shù)據(jù)就崩。原因切分前對全部數(shù)據(jù)做了隨機(jī)打亂相鄰時隙的樣本被分到了訓(xùn)練集和測試集兩側(cè)測試集中混入了高相似的時序片段造成數(shù)據(jù)泄漏。解決嚴(yán)格按時間順序前 90% 做訓(xùn)練集、后 10% 做測試集不打亂序列。LSTM 的泛化能力體現(xiàn)在對未見過的未來時刻的預(yù)測上不是對隨機(jī)采樣的記憶。6. 復(fù)現(xiàn)檢驗技巧與門限校準(zhǔn)流程拿到論文后建議先跑一條最小復(fù)現(xiàn)鏈路生成 ρ0.5、SNR-10dB 的兩小時仿真數(shù)據(jù)14400 個感知統(tǒng)計量按 500ms 感知間隔分塊batchsize128LSTM 結(jié)構(gòu) 128-128-1SGDM 學(xué)習(xí)率 0.01 動量 0.9迭代 25 次。如果準(zhǔn)確率能在 0.78 到 0.82 之間說明鏈路通了。門限校準(zhǔn)這一步值得多說兩句。我的習(xí)慣是先跑一版不接門限的 LSTM收集測試集輸出序列中真實信道狀態(tài)為 0 和 1 兩類的均值分別記為 meanOFF 和 meanON按式 (20) 得到初始門限 γm。然后設(shè)置 γ0 γm - 0.15、γ1 γm 0.15再按 γ10 γ1 - 0.1、γ01 γ0 0.1 初始化次級門限。這樣得到的門限隨數(shù)據(jù)分布自適應(yīng)比直接抄論文參數(shù)可靠得多。驗證指標(biāo)計算時要注意準(zhǔn)確率 Yp 是判決序列與真實信道狀態(tài)逐時隙比對的結(jié)果而誤警概率 Pfa 和漏檢概率 Pml 要分開統(tǒng)計def evaluate_metrics(y_opt, y_true): 計算預(yù)測準(zhǔn)確率、誤警概率、漏檢概率 tp np.sum((y_opt 1) (y_true 1)) fp np.sum((y_opt 1) (y_true 0)) fn np.sum((y_opt 0) (y_true 1)) tn np.sum((y_opt 0) (y_true 0)) yp (tp tn) / len(y_true) pfa fp / (fp tn) if (fp tn) 0 else 0 pml fn / (tp fn) if (tp fn) 0 else 0 return yp, pfa, pml最后說一個我自己的血淚教訓(xùn)。第一次復(fù)現(xiàn)時為了省事直接用 Adam 替換 SGDM又把門限參數(shù)原封不動抄上去結(jié)果低 SNR 場景下準(zhǔn)確率比論文低了 6 個百分點(diǎn)。后來逐項排查才發(fā)現(xiàn)門限參數(shù)需要按數(shù)據(jù)分布校準(zhǔn)優(yōu)化器也要保持 SGDM 才能在低迭代次數(shù)下復(fù)現(xiàn)出論文的收斂速度。從那以后我每次復(fù)現(xiàn)這類頻譜感知算法都強(qiáng)制走一遍「先訓(xùn)練無門限 LSTM → 統(tǒng)計輸出均值 → 初始門限 → 微調(diào)次級門限」的流程再對比三項指標(biāo)。這個流程雖然多花十幾分鐘但能省下后面調(diào)試的一整天。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取