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