:高速移動下替代OFDM的關鍵技術)
簡介OTFS調制是面向高速移動場景的新型多載波方案通過在時延—多普勒域刻畫信道變化彌補傳統(tǒng)OFDM在高動態(tài)環(huán)境下的性能損失。這份Matlab代碼面向通信方向研究人員與學生實現(xiàn)從DD域信號到時域發(fā)射波形的完整OTFS調制流程覆蓋符號映射、離散對數(shù)映射、循環(huán)前綴預編碼、逆辛格爾變換及信道沖激響應處理每一步均保留中間量便于觀察信號在時延—多普勒平面上的變化規(guī)律。壓縮包內僅1個m文件大小273字節(jié)代碼精簡但層次分明既可作為OTFS原理的教學演示也適合作為二次開發(fā)起點。資源已有1417人學習下載對于正在學習5G/6G物理層或準備相關課程設計的研究者提供了一條可運行、可修改的入門路徑有助于快速理解OTFS如何將時延和多普勒維度轉換為抗衰落增益。1. 當高速移動場景把OFDM打回原形OTFS調制是什么能解決什么5G 里幾乎所有系統(tǒng)都建立在 OFDM 之上但它有個天生的軟肋對多普勒頻移極度敏感。高鐵跑到 300km/h 以上載波頻率 3.5GHz多普勒頻移能到近 1kHz子載波間隔 15kHz 時ICI子載波間干擾已經(jīng)把星座圖攪成一團。OTFSOrthogonal Time Frequency Space正交時頻空間調制的核心思路是把數(shù)據(jù)符號從時頻域搬到延遲-多普勒域Delay-Doppler DomainDD 域去承載。在這個域里信道的時變衰落被展現(xiàn)出一種稀疏、平穩(wěn)的結構接收端可以更干凈地把信號抽回來。簡單說OTFS 是把對信道時間選擇性敏感的問題轉換成一個對信道變化幾乎免疫的問題。這篇文章就圍繞“OTFS_Modulation.rar 調制_Otfs”這套常見工程實現(xiàn)把 OTFS 的模型、代碼結構、參數(shù)設定和血淚踩坑全部拆開講。2. 從時頻域到延遲-多普勒域OTFS 框架與信號模型2.1 為什么必須在延遲-多普勒域里放符號傳統(tǒng)的 OFDM 傳輸是在時間-頻率柵格上放置 QAM/PSK 符號。信道在時頻域里是二維變化的快衰落環(huán)境里接收端需要不斷估計和插值信道矩陣導頻開銷隨多普勒擴展線性上升。而 OTFS 發(fā)射端采用的思路是先把數(shù)據(jù)符號擺到一個 N×M 的延遲-多普勒柵格上然后通過逆辛傅里葉變換ISFFT映射到時頻域再經(jīng)過海森伯格變換Heisenberg Transform得到時域發(fā)射波形。這個過程從信號處理角度看相當于對時頻域信號做了兩次變換而最終效果是讓每個信息符號在時頻域中散布到整個資源塊上。這里有一個關鍵物理直覺延遲軸對應多徑到達時間多普勒軸對應反射體相對運動引起的頻移。在真實物理信道里一條多徑分量在 DD 域就是一根沖激位置由延遲和多普勒共同確定。反射體數(shù)量通常有限所以 DD 域信道是稀疏的遠沒有時頻域那張矩陣那么復雜。OTFS 的接收端在 DD 域做信道估計與均衡能有效利用這種稀疏性性能增益在高速場景尤其明顯很多文獻里給出的模擬結果表明在 500km/h 速度下OTFS 的 BER 比 OFDM 低 2~3 個數(shù)量級。2.2 OTFS 收發(fā)信機的數(shù)學框架ISFFT、海森伯格、維格納變換怎么接起來理想的 OTFS 收發(fā)鏈路是一個閉合的變換對。發(fā)射側DD 域符號矩陣 X_ddN×MN 是多普勒索引M 是延遲索引經(jīng)過 ISFFT 得到時頻域符號矩陣 X_tf F_N · X_dd · F_M^H其中 F_N 是 N 點 DFT 矩陣F_M 是 M 點 IDFT 矩陣。然后時頻域矩陣經(jīng)過海森伯格變換本質上是加窗后做 OFDM 調制映射成連續(xù)時間信號。接收端用維格納變換得到時頻域接收矩陣再做 SFFT 回到 DD 域。代碼實現(xiàn)里ISFFT 通常這樣寫def isfft(X_dd): # X_dd: shape (N, M), DD-domain symbols in matrix form # 沿著多普勒維度做 N 點 DFT沿著延遲維度做 M 點 IDFT X_tf np.fft.fft(X_dd, axis0) / np.sqrt(N) X_tf np.fft.ifft(X_tf, axis1) * np.sqrt(M) return X_tf這段代碼對應公式 X_tf F_N^H · X_dd · F_M 的離散實現(xiàn)。第一步對每一列做 FFT是把每個時隙內的多普勒成分展開第二步對每一行做 IFFT是把延遲樣本轉換到時頻域的頻域索引。除以 sqrt(N)、乘以 sqrt(M) 是為了保持功率歸一化。現(xiàn)實中代碼還需要補一個 CP循環(huán)前綴否則多徑效應會跨符號泄漏。發(fā)射端在 ISFFT 之后做海森伯變換實際就是一組并行子載波調制等價于對 X_tf 逐行做 IFFT再串行輸出加 CP。接收端維格納變換則相反逐符號做 FFT 得到時頻域接收矩陣。整個收發(fā)鏈路可以簡化為“DD 域符號 - 二維變換 - OFDM 調制 - 信道 - OFDM 解調 - 二維逆變換 - DD 域符號”。2.3 OTFS 里面的柵格和參數(shù)N、M、QAM 之間怎么搭配DD 域柵格維度 N多普勒軸采樣點數(shù)和 M延遲軸采樣點數(shù)決定了一個 OTFS 幀占用的時間和帶寬。具體關系幀時長 T_frame N × T_sym其中 T_sym 是每個時頻域符號周期占用帶寬 B M × ΔfΔf 是子載波間隔。典型配置 N128、M128子載波間隔 15kHz 時一個幀占用 1.92MHz 帶寬時長約 8.53ms含 CP。在這個幀內最大可分辨多普勒頻移為 ±1/(2·T_sym)最大可分辨延遲擴展為 M/(B)。調制階數(shù)的選擇要考慮 DD 域 SNR 分布。因為 DD 域信道均衡后不同位置符號的等效 SNR 并不均勻——延遲軸上的早期抽頭通常比晚期抽頭能量高。如果全幀用同一個 QAM 階數(shù)會出現(xiàn)一部分符號過度冗余、另一部分符號誤碼率失控。實踐里常見做法是按物理信道的 PDP功率延遲譜估算各延遲抽頭功率再為每個延遲行分配不同調制階數(shù)這塊在自適應 OTFS 里是熱門方向不過基礎代碼里通常全部用同一個調制方式。3. 把“OTFS_Modulation.rar調制_Otfs”跑起來源碼結構與最小實現(xiàn)3.1 解包后先看什么典型文件組織與模塊分工拿到“OTFS_Modulation.rar”這類壓縮包第一件事不是跑代碼而是先看文件樹判斷這是仿真框架還是 FPGA/DSP 工程參考。常見結構有兩種一種是 MATLAB 為主包含 tx_otfs.m、rx_otfs.m、channel_model.m、main_simulation.m另一種是 Python 工程包含 modulation/otfs_modulator.py、demodulator.py、channel/tdl_channel.py、examples/demo.py。無論哪種核心模塊就四個調制映射QAM - DD 域、二維變換ISFFT/SFFT、OFDM 基帶調制解調、信道模擬。建議按這個順序逐個讀不要先碰繪圖和 BER 統(tǒng)計部分。把 rar 解壓后如果里面只有代碼沒有 README先找 main 或 demo 文件看它的輸入?yún)?shù)和輸出張量維度。OTFS 的代碼實現(xiàn)中最容易出問題的就是維度順序——同一個 X_dd 矩陣在 MATLAB 里列優(yōu)先在 Python 里行優(yōu)先直接在兩個平臺間搬運代碼會導致轉置錯誤而這類錯誤不會報錯只會在 BER 曲線上表現(xiàn)為比理論值高一截的“平臺”。3.2 Python 實現(xiàn) OTFS 發(fā)射機的關鍵代碼從比特到 DD 域符號下面是一段可運行的 OTFS 發(fā)射機核心代碼按最小可行方案實現(xiàn)并標注了每一步的目的與坑點。import numpy as np def qam_mod(bits, M_ord): # 將比特流映射到 QAM 符號M_ord 取值 4/16/64 # 這里按 Gray 映射簡化實際項目建議用 comm.QAMModulator k int(np.log2(M_ord)) symbols [] for i in range(0, len(bits) - k 1, k): idx 0 for j, b in enumerate(bits[i:ik]): idx (idx 1) | int(b) # Gray 映射 gray_val idx gray_code gray_val ^ (gray_val 1) # 對應到 QAM 星座注意功率歸一化 sym (2 * gray_code - (M_ord - 1)) symbols.append(sym) symbols np.array(symbols, dtypecomplex) def generate_dd_grid(bits, N, M, M_ord): # N: # Doppler bins, M: # Delay bins, symbol: topic style k int(np.log2(M_ord)) padded_len N * M * k if len(bits) padded_len: bits np.pad(bits, (0, padded_len - len(bits)), constant) bits bits[:padded_len] bits_mat bits.reshape(N, M, k) dd_symbols np.zeros((N, M), dtypecomplex) # 每個 DD 柵格位置放置一個 QAM 符號 for n in range(N): for m in range(M): idx 0 for b in bits_mat[n, m]: idx (idx 1) | b gray_idx idx ^ (idx 1) re 2 * (gray_idx // int(np.sqrt(M_ord))) - (np.sqrt(M_ord) - 1) im 2 * (gray_idx % int(np.sqrt(M_ord))) - (np.sqrt(M_ord) - 1) dd_symbols[n, m] (re 1j * im) / np.sqrt(2 * (M_ord - 1) / 3) return dd_symbols這段代碼把比特按 N×M 個柵格分組每個柵格映射成 QAM 星座點。功率歸一化用的分母 sqrt(2(M_ord-1)/3) 對應 QAM 星座的平均能量這樣 16QAM 和 64QAM 的每個符號平均功率都是 1后續(xù)加噪聲、計算 SNR 時不會因為調制階數(shù)改變而偏。注意 Gray 映射保證了相鄰比特組合對應的星座點只差一個比特這在 BER 統(tǒng)計時很關鍵——解調端如果不用同樣的 Gray 映射誤碼率會直接翻倍。3.3 發(fā)射端完整鏈路DD 域到時域的落地方案拿到 DD 域符號矩陣之后發(fā)射鏈路剩下的步驟是 ISFFT、海森伯格變換、加 CP。這段代碼需要理解每個步驟的數(shù)據(jù)流變化def otfs_transmit(dd_symbols, N, M, cp_len): # 第一步ISFFTDD 域 - 時頻域 X_tf np.fft.fft(dd_symbols, axis0) / np.sqrt(N) X_tf np.fft.ifft(X_tf, axis1) * np.sqrt(M) # 第二步海森伯格變換時頻域 - 時域 # 對每一行即每個時隙做 M 點 IFFT得到基帶時域樣本 time_grid np.fft.ifft(X_tf, axis1) * np.sqrt(M) # time_grid shape 是 (N, M)按行拼接成一維時域信號 tx_signal time_grid.flatten() # 第三步加循環(huán)前綴CP按行加 # 注意這里 CP 加在每個時隙的尾部不是整個幀的尾部 tx_signal_cp np.zeros(N * (M cp_len), dtypecomplex) for n in range(N): start n * (M cp_len) orig_start n * M tx_signal_cp[start:start cp_len] tx_signal[orig_start M - cp_len:orig_start M] tx_signal_cp[start cp_len:start cp_len M] tx_signal[orig_start:orig_start M] return tx_signal_cp這里最容易踩坑的地方在于 CP 的加法。很多初學 OTFS 的朋友沿用 OFDM 的習慣對整個 OTFS 幀加一個總的 CP——這會導致多徑信道跨符號干擾無法消除。正確做法是對每個時隙單獨加 CP因為海森伯變換之后每個時隙就是一個獨立的 OFDM 符號只有每個符號有 CP 才能吸收符號間干擾和子載波間干擾。cp_len 的值一般參考信道最大延遲擴展典型場景設 M/4 到 M/8比如 M128 時 CP 長度 16 或 32。3.4 接收機最小實現(xiàn)維格納變換與 SFFT 恢復接收端第一步是去掉每個時隙的 CP然后對每個時隙做 M 點 FFT維格納變換得到時頻域接收矩陣再做 SFFT 恢復 DD 域符號。在理想信道無多徑無噪聲情況下接收到的 DD 域矩陣和發(fā)射的完全一致這個閉環(huán)可以驗證你前面的收發(fā)代碼邏輯是否正確。def otfs_receive(rx_signal, N, M, cp_len): # 去除 CP按行恢復 time_grid time_grid np.zeros((N, M), dtypecomplex) for n in range(N): start n * (M cp_len) time_grid[n, :] rx_signal[start cp_len : start cp_len M] # 維格納變換每一行 FFT 回時頻域 Y_tf np.fft.fft(time_grid, axis1) / np.sqrt(M) # SFFT時頻域 - DD 域逆 ISFFT Y_dd np.fft.ifft(Y_tf, axis0) * np.sqrt(N) Y_dd np.fft.fft(Y_dd, axis1) / np.sqrt(M) return Y_dd這段代碼是發(fā)射端的兩步逆變換。清理 CP 時需要保證幀同步是正確的——如果 rx_signal 開頭多了幾個采樣整個 CP 剔除就錯位了。實際仿真里常用卷積信道和線性卷積接收端要先做時延對齊再移除 CP。很多開源代碼不處理這個對齊直接讓接收信號和發(fā)射信號共享同一個時間原點這在純 AWGN 仿真里沒毛病但在多徑信道里會導致延遲抽頭跑到負時間軸上BER 統(tǒng)計一片混亂。4. 信道模擬與性能驗證讓 OTFS 在衰落信道里交出真實成績單4.1 延遲-多普勒信道模型怎么搭抽頭延遲線加多普勒擴展OTFS 的仿真離不開一個能體現(xiàn)“多普勒”的信道模型。最簡單且有效的方案是使用抽頭延遲線模型每個抽頭有獨立的延遲、復增益和多普勒頻移。多徑的復增益由功率延遲譜決定多普勒頻移則根據(jù)相對速度 λv/c 計算。比如 5.9GHz 頻段高鐵速度 300km/h 時多普勒頻移約 1.64kHz子載波間隔 15kHz 時多普勒僅是子載波間隔的 11%貌似不大但對 OTFS 來說這個多普勒在 DD 域里對應一個清晰的位置只需要動用一個很小的估計代價。class TDLChannel: def __init__(self, delays, powers, doppler_shifts, sampling_rate): self.delays delays # 單位采樣點數(shù) self.powers powers # 單位mW self.doppler_shifts doppler_shifts # 單位Hz self.fs sampling_rate def convolve(self, tx_signal): # 時變信道實現(xiàn)每個抽頭按自己的多普勒相位旋轉 n_samples len(tx_signal) rx np.zeros(n_samples int(max(self.delays)), dtypecomplex) t np.arange(n_samples) / self.fs for delay, power, fd in zip(self.delays, self.powers, self.doppler_shifts): amp np.sqrt(power) phase_rot np.exp(2j * np.pi * fd * t) rx[delay:delay n_samples] amp * phase_rot * tx_signal # 加 AWGN return rx這里相位旋轉 np.exp(2jnp.pifd*t) 是每個采樣點獨立旋轉的因為它模擬的是連續(xù)多普勒。注意每個抽頭的多普勒是恒定值這對應理想的點散射體假設。如果做更精細的仿真抽頭內還要加 Jakes 譜的隨機過程但用于 OTFS 鏈路驗證時恒定性已經(jīng)足夠——DD 域每個符號的相位誤差在幀內是周期性變化的這正好是 OTFS 優(yōu)于 OFDM 的場景。4.2 導頻與信道估計嵌入疊加導頻的布置方案OTFS 幀里需要導頻來做 DD 域信道估計。常見嵌入導頻思路是在 DD 域柵格上預留一塊區(qū)域一個導頻符號放置在某個特定位置周圍留出保護符號置零因為 DD 域信道的擴展范圍為 ±最大多普勒偏移乘最大延遲擴展只有保護帶足夠寬才能避免數(shù)據(jù)符號干擾導頻估計。保護帶寬度由信道最大多普勒擴展和延遲擴展決定延遲方向保護長度等于最大延遲抽頭數(shù)多普勒方向保護長度等于最大多普勒索引的兩倍。def insert_pilot(dd_frame, N, M, pilot_pos, guard_len): # pilot_pos: (n_p, m_p) 導頻所在DD柵格 # guard_len: (n_guard, m_guard) 兩個方向的保護長度 n_p, m_p pilot_pos n_g, m_g guard_len # 保護區(qū)域置零防止數(shù)據(jù)與導頻互擾 n_start max(0, n_p - n_g) n_end min(N, n_p n_g 1) m_start max(0, m_p - m_g) m_end min(M, m_p m_g 1) # 保存導頻符號并清空保護帶 pilot_symbol dd_frame[n_p, m_p] dd_frame[n_start:n_end, m_start:m_end] 0 dd_frame[n_p, m_p] pilot_symbol return dd_frame導頻功率設置的玄學在于導頻功率高則信道估計準但擠占數(shù)據(jù)功率導致數(shù)據(jù)信噪比下降導頻功率低則估計不準。工程上常見做法是把導頻功率設為數(shù)據(jù)平均功率的 3~6 倍同時保護帶寬度依據(jù)場景查表市區(qū)低速場景延遲保護 8~16 個樣本高速場景多普勒保護取最大預期多普勒索引加 1~2 個余量。保護帶太寬會顯著降低頻譜效率N128、M128 的幀里保護帶占掉 20% 是常態(tài)。4.3 性能指標看什么BER 曲線、時延-多普勒譜、峰值旁瓣比驗證 OTFS 性能不能只看一條 BER 曲線。建議至少輸出三樣東西BER 對 Eb/N0 曲線對比 OFDM、DD 域信道估計結果的熱力圖、接收端均衡前后星座圖。DD 域熱力圖能直觀顯示稀疏信道估計是否捕捉到了所有多徑分量星座圖則用來檢查殘余均衡誤差的形狀。很多仿真結果 BER 異??葱亲鶊D會發(fā)現(xiàn)不是整體噪聲抬高而是某些象限的符號被系統(tǒng)性偏轉——這通常是信道估計中導頻相位未對齊造成的。性能驗證時還有個容易忽略的指標峰值平均功率比PAPR。OTFS 信號在時域的 PAPR 比 OFDM 略高因為 ISFFT 本身進一步“白化”了信號。如果實際系統(tǒng)對功放回退很敏感這個指標會決定能否真正上線。仿真里統(tǒng)計 PAPR 的 CCDF 曲線很有必要天然論文和數(shù)據(jù)報告都用這個來證明 OTFS 并非只是理論優(yōu)勢也有實際鏈路層面的代價。5. OTFS 仿真的五個經(jīng)典翻車現(xiàn)場避坑與排查5.1 現(xiàn)象接收端 DD 域星座圖整體旋轉 90 度做仿真時發(fā)現(xiàn)恢復出來的 DD 域星座圖看著是完整的 QAM 形狀但相位整體偏轉約 90°。原因多半是 ISFFT/SFFT 的變換矩陣轉置方向搞反了。OTFS 的 ISFFT 是對多普勒維做 DFT、延遲維做 IDFT有些代碼實現(xiàn)把兩個方向弄反數(shù)學上等效于對 X_dd 做了轉置變換再加轉置回來最終表現(xiàn)為一個正交旋轉。解決方法是做一個閉環(huán)單元測試構造一個只在 (0,0) 位置有符號的 DD 矩陣走完發(fā)射接收鏈路看恢復的符號是否還在 (0,0) 且相位不變。任何偏離都在幾分鐘內暴露問題。5.2 現(xiàn)象加多普勒信道后 BER 反而比 OFDM 差這是因為信道實現(xiàn)里做了“線性卷積”但發(fā)射端沒有在幀末尾做尾部補償。OTFS 的循環(huán)卷積性質依賴 CP 保護和輸入信號的周期性。如果信道模型用 scipy.signal.fftconvolve 做線性卷積多徑分量越過幀末尾后丟失能量等價于人為增加了不可恢復的符號能量損失。解決方法是把發(fā)射信號按幀周期擴展再做循環(huán)卷積將 tx_signal 復制拼接成三段取中間段做卷積再把結果中三段的疊加部分合并。這個細節(jié)在 Openairinterface 的 5G NR 實現(xiàn)中同樣存在只是他們用頻域濾波來近似。5.3 現(xiàn)象SNR 越高BER 曲線越早進入平層高 SNR 下 BER 不再下降多半是導頻保護帶太窄導致數(shù)據(jù)符號泄漏進導頻估計區(qū)域或者信道估計插值方式過于粗糙。DD 域信道估計中如果保護帶不夠數(shù)據(jù)符號會疊加在導頻所在區(qū)域估計出的信道響應被污染等效噪聲隨 SNR 線性下降但干擾保持不變于是出現(xiàn)平層。把導頻功率提升或保護帶加寬后會緩解但也注意觀察估計熱力圖里是否有“十字形”擴展——有這種形狀就意味著保護帶寬度不足。5.4 現(xiàn)象Matlab 和 Python 結果對不上這類現(xiàn)象幾乎都可以歸因于 fft 歸一化的差異。MATLAB 的 fft 不帶歸一化ifft 帶 1/N 歸一化NumPy 的 np.fft.fft 也不帶歸一化但 np.fft.ifft 帶 1/N 歸一化——看起來一致但對二維變換來說NP 的 fft 是對最后一個軸操作而 MATLAB 是對第一個非單例維度操作如果代碼從 MATLAB 搬到 Python 時沒有把矩陣轉置二維變換的軸就會錯位。排查方法是在 ISFFT 前后打印矩陣的第 0 行第 0 列元素和手算值比對。5.5 現(xiàn)象所有模塊都對但整體幀同步遞歸式偏移幀同步偏移表現(xiàn)為BER 中等偏高星座圖能看到清晰的符號間干擾痕跡但逐符號檢查發(fā)現(xiàn)錯誤集中在每段 CP 的位置。這是因為實際收發(fā)鏈路中接收端不知道發(fā)射信號從哪里開始如果仿真里直接把 tx_signal 加完噪聲就作為 rx_signal不存在同步問題但如果你插入了一個前導序列來模擬真實同步那個序列的長度沒有從接收信號的整體長度中扣除導致后續(xù)每個時隙的邊界都錯了一個常數(shù)。解決方法是先做復相關同步用前導序列和接收信號做互相關把峰值位置作為幀起點再進入解調流程。6. OTFS 調制的進階調試技巧三維圖診斷法與迭代檢測入門做 OTFS 仿真到中期最有效的驗證工具不是 BER 曲線而是 DD 域的幅度熱力圖和相位圖。把接收端的 Y_dd 矩陣畫成三維瀑布圖X 軸是延遲索引Y 軸是多普勒索引Z 軸是幅度。理想情況下發(fā)射端的 QAM 符號在 DD 域應該像網(wǎng)格一樣整齊排列但因為信道抽頭擴展每個符號周圍會出現(xiàn)十字形能量泄漏——泄漏方向正好對應延遲擴展和多普勒擴展。如果看到斜向的能量帶說明信道估計中存在時變相位沒有補償干凈這時再去檢查每幀的相位旋轉矩陣。import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def plot_dd_heatmap(Y_dd, titleDD Domain): fig plt.figure(figsize(10, 6)) ax fig.add_subplot(111, projection3d) N, M Y_dd.shape X_grid, Y_grid np.meshgrid(np.arange(M), np.arange(N)) surf ax.plot_surface(X_grid, Y_grid, np.abs(Y_dd), cmapviridis, alpha0.9) ax.set_xlabel(Delay Index (m)) ax.set_ylabel(Doppler Index (n)) ax.set_zlabel(Magnitude) ax.set_title(title) plt.show()迭代檢測Iterative Detection是 OTFS 接收機進一步增益的重要方向?;A的線性均衡比如 MMSE在 DD 域做完后殘余干擾仍然是結構化的。把 SIC連續(xù)干擾消除引入進來每次迭代中先解出當前能量最強的符號減去它的干擾后再次均衡。這種迭代方案在 DD 域做起來非常自然因為每個符號的干擾結構是局部化的復雜度不會像 MIMO 那樣爆炸。實現(xiàn)時注意迭代步進控制在 3~5 次之間超過 5 次收益急劇下降同時每一輪迭代都要重新計算殘余干擾協(xié)方差矩陣不能直接沿用上一輪的。做 OTFS 這一路走下來我最大的體會是這個方向真正的門檻不是數(shù)學變換本身而是信道模型和幀結構設計之間的匹配。ISFFT、海森伯格這些變換有現(xiàn)成公式可抄但是 CP 按符號加還是按幀加、導頻保護帶留多寬、信道模擬用什么卷積模式這些工程判斷只能靠一次次翻車換回來。希望這些調試經(jīng)驗能幫你少走幾段彎路祝你一次跑通 BER 曲線希望幫到你。本文還有配套的精品資源點擊獲取