ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OFDM与OTFS宽带多径衰落仿真对比:从链路建模到参数扫描的完整实践

2026/10/1 1:43:35 拓冰建站 浏览量
OFDM与OTFS宽带多径衰落仿真对比:从链路建模到参数扫描的完整实践 简介这份资源面向无线通信方向的研究生、科研人员与工程师提供OFDM与OTFS两种宽带调制技术在多径衰落信道下的完整仿真实现帮助理解二者在高速移动与频率选择性衰落场景中的性能差异。压缩包共9个文件全部为m脚本整体约11KB涵盖主程序、OFDM调制解调、ISFFT/SFFT变换、多径信道建模、均衡器、数据生成与绘图等模块结构紧凑便于逐文件阅读与二次修改。目前已有468人学习下载。读者可借助瑞利或莱斯信道模型复现误码率与符号误率曲线对比OFDM与OTFS的优劣并在此基础上调整多普勒频移、时延扩展等参数深入观察两种调制方式在时频域上的处理差异为后续通信系统设计或论文实验提供可复用的代码框架与验证思路。1. OFDM 与 OTFS 同台竞技宽带多径衰落仿真到底在仿什么做无线通信基带的人几乎都经历过同一个场景链路在办公室跑得好好的一放到高速移动或者密集多径环境里误码率曲线立刻“翻车”星座图糊成一团。这时候你需要的不是换一块更好的射频板而是先在仿真里把 OFDM 和 OTFS 这两套波形放到同一段宽带多径信道上看看到底谁在什么条件下扛得住。这个标题讲的就是这件事——用仿真手段在宽带无线通信系统里同时搭起 OFDM 和 OTFS 两条链路注入多径衰落信道对比它们的误码率、峰均比和信道估计开销。它适合已经懂一点基带、想动手复现波形对比的工程师也适合正在选波形方案、需要拿数据说话的人。仿真不是玄学参数设对了它就是你做决策前最便宜的那颗后悔药。2. 先把两条链路的骨架搭对OFDM 与 OTFS 的仿真建模差异2.1 OFDM 链路的最小可用模型OFDM 的核心思路是把宽带分成一堆窄带子载波每个子载波上的符号周期被拉长从而对抗多径时延扩展。仿真里最小可用的 OFDM 链路包括QAM 调制、子载波映射、IFFT、加循环前缀、过多径信道、去 CP、FFT、信道估计与均衡、解调。很多人一上来就堆 5G 那套复杂参数结果连最基本的误码率曲线都对不上。我一般建议先用 64 个子载波、CP 长度取信道最大时延扩展的 1.5 倍左右把链路跑通再往上加。下面是一段可复现的 OFDM 基带仿真核心代码用 Python 写依赖 numpy 和 scipyimport numpy as np def ofdm_modulate(qam_syms, n_fft64, cp_len16): # qam_syms: 长度为 n_fft 的复数符号 # 频域映射到子载波做 IFFT 变到时域 time_syms np.fft.ifft(qam_syms, nn_fft) # 加循环前缀把尾部 cp_len 个样本复制到前面 cp time_syms[-cp_len:] return np.concatenate([cp, time_syms]) def ofdm_demodulate(rx_syms, n_fft64, cp_len16): # 去 CP rx_no_cp rx_syms[cp_len:cp_len n_fft] # FFT 回到频域 return np.fft.fft(rx_no_cp, nn_fft)逻辑说明ofdm_modulate先做 IFFT 把频域符号搬到时间域再加 CP。CP 的作用是让多径信道对每个 OFDM 符号的线性卷积近似变成循环卷积这样接收端 FFT 之后每个子载波只乘一个复数信道响应均衡就变成一次除法。参数上n_fft决定子载波数量cp_len必须大于信道最大时延扩展对应的样本数否则符号间干扰会直接毁掉误码率曲线。常见做法是cp_len取最大时延扩展的 1.2 到 1.5 倍留一点余量。2.2 OTFS 链路的关键差异延迟-多普勒域映射OTFS 和 OFDM 最大的不同在于它不是在时频域直接放符号而是先把符号放到延迟-多普勒域再通过 ISFFT 变换到时频域最后才走 OFDM 那套 IFFT 加 CP 的流程。这样做的好处是在多普勒扩展明显的场景下信道在延迟-多普勒域里变得稀疏且近似时不变均衡复杂度大幅下降。仿真 OTFS 时最容易出错的地方是 ISFFT 和 SFFT 的维度对齐。下面这段代码展示 OTFS 调制的最小实现def otfs_modulate(dd_syms, n_delay32, n_doppler16): # dd_syms: 延迟-多普勒域符号形状 (n_delay, n_doppler) # ISFFT: 先沿多普勒维做 FFT再沿延迟维做 IFFT tf_syms np.fft.fft(dd_syms, axis1) / np.sqrt(n_doppler) tf_syms np.fft.ifft(tf_syms, axis0) * np.sqrt(n_delay) # 把时频域符号展平走 OFDM 调制 tf_flat tf_syms.flatten() return ofdm_modulate(tf_flat, n_fftn_delay * n_doppler, cp_len16)逻辑说明otfs_modulate先做 ISFFT把延迟-多普勒域符号变到时频域再复用 OFDM 的 IFFT 加 CP 流程。参数上n_delay对应延迟维分辨率通常取信道最大时延扩展除以采样间隔n_doppler对应多普勒维分辨率取最大多普勒频移乘以一帧时长。这两个参数直接决定 OTFS 能否把信道稀疏化设小了信道在延迟-多普勒域里会糊成一片设大了计算量飙升。我一般先根据信道模型算理论值再往上取最近的 2 的幂。2.3 多径衰落信道怎么注入才不假仿真里最容易被轻视的就是信道模型。很多人直接用一个抽头延迟线抽头系数设成瑞利分布就完事结果 OFDM 和 OTFS 的对比结论完全不可信。宽带多径信道需要同时体现时延扩展和多普勒扩展常见做法是用 Jakes 模型或者射线追踪生成的抽头每个抽头带独立的衰落相位和时延。一个可用的多径信道注入方式如下def apply_multipath(tx_signal, delays, gains, doppler_shifts, fs): # delays: 各径时延单位秒 # gains: 各径复增益 # doppler_shifts: 各径多普勒频移单位 Hz rx np.zeros(len(tx_signal) int(max(delays) * fs), dtypecomplex) t np.arange(len(rx)) / fs for d, g, fd in zip(delays, gains, doppler_shifts): idx int(d * fs) # 每径加多普勒相位旋转 phase np.exp(1j * 2 * np.pi * fd * t[:len(tx_signal)]) rx[idx:idx len(tx_signal)] g * tx_signal * phase return rx逻辑说明apply_multipath对每一径做时延搬移、增益加权和多普勒相位旋转最后叠加。参数上delays和gains决定频率选择性doppler_shifts决定时间选择性。注意fs要足够大保证时延量化误差远小于符号周期。常见坑是只加时延不加多普勒这样 OTFS 的优势根本体现不出来对比就失去意义。3. 参数怎么设OFDM 与 OTFS 在宽带多径下的关键旋钮3.1 子载波间隔与 CP 长度的联动OFDM 的子载波间隔直接决定符号周期而符号周期又决定 CP 开销。子载波间隔越大符号越短对多普勒越不敏感但 CP 占比越高频谱效率越低。仿真里我一般先定子载波间隔再反推 CP 长度。比如宽带系统常用 15 kHz 到 60 kHz对应符号周期 66.7 微秒到 16.7 微秒。如果信道最大时延扩展是 5 微秒CP 长度取 7 微秒左右开销大约 10%。OTFS 这边子载波间隔和 OFDM 共用同一套参数但延迟-多普勒域的网格划分要单独算。延迟维分辨率等于采样间隔多普勒维分辨率等于 1 除以一帧时长。如果一帧里放 16 个 OTFS 符号每个符号 66.7 微秒帧长大约 1.07 毫秒多普勒分辨率约 935 Hz。这个数值要能覆盖信道最大多普勒频移否则多普勒维会出现混叠。3.2 导频与信道估计的开销对比OFDM 的信道估计通常靠插入导频块状导频或者梳状导频。块状导频适合慢变信道梳状导频适合快变信道。仿真里如果信道多普勒较大梳状导频的间隔要小于相干带宽对应的子载波数否则估计出来的信道响应跟不上变化。OTFS 的信道估计思路不同它在延迟-多普勒域插入导频因为信道在这个域里稀疏导频开销可以做得更低。但仿真时要注意OTFS 的导频在变换到时频域后会扩散接收端做 SFFT 之后才能看到稀疏的导频响应。如果导频功率不够噪声会把稀疏性淹没。下面这张表对比两种波形在仿真里的典型参数设置参数OFDM 典型值OTFS 典型值说明子载波间隔15 kHz15 kHz共用同一套参数FFT 点数10241024宽带系统常用CP 长度72 样本72 样本约 4.7 微秒导频开销8% 到 12%4% 到 8%OTFS 在延迟-多普勒域更省延迟维网格不适用64覆盖最大时延扩展多普勒维网格不适用16覆盖最大多普勒3.3 峰均比与功放回退的仿真考量OFDM 的峰均比高是出了名的仿真里如果只看误码率不看峰均比结论会偏乐观。我一般会在链路里加一个功放模型用 Saleh 模型或者多项式模型看两种波形在同样回退下的误码率差异。OTFS 因为符号在延迟-多普勒域预编码峰均比通常比 OFDM 低一些但低多少取决于网格划分和导频设计。仿真峰均比时注意要统计足够多的符号至少一万个以上否则 CCDF 曲线尾部不准。功放回退一般从 0 dB 扫到 8 dB看误码率拐点。这个扫描在仿真里很耗时但比实际测试便宜太多。4. 避坑与排查仿真跑不出预期曲线时先查这五件事4.1 误码率曲线在高信噪比下不降反升现象信噪比超过 15 dB 后误码率曲线走平甚至翘起。原因通常是信道估计误差或者相位噪声没有建模接收端均衡时把噪声也放大了。解决检查导频密度是否足够均衡器是否用了 MMSE 而不是迫零。迫零均衡在深衰落子载波上会放大噪声MMSE 加一个正则项就能压住。4.2 OTFS 误码率比 OFDM 还差现象在多普勒较大的场景下OTFS 的误码率反而高于 OFDM。原因多半是延迟-多普勒网格划分不对信道能量泄漏到相邻网格稀疏性被破坏。解决重新计算延迟维和多普勒维的分辨率确保网格能覆盖信道扩展检查 ISFFT 的归一化因子是否对称归一化错了会导致符号能量不一致。4.3 仿真跑得极慢内存爆掉现象FFT 点数一大仿真时间指数上升内存不够用。原因把整个帧一次性加载到内存做矩阵运算。解决分块处理按 OFDM 符号逐个循环或者用 overlap-save 方法。OTFS 的 ISFFT 可以按行按列分步做不需要一次性生成大矩阵。4.4 信道模型只有时延没有多普勒现象OTFS 和 OFDM 的误码率曲线几乎重合看不出差异。原因信道是准静态的OTFS 的延迟-多普勒域稀疏性优势无从发挥。解决给每一径加多普勒频移频移量根据载波频率和移动速度算比如 3.5 GHz 载波、120 km/h 速度对应约 389 Hz 多普勒。4.5 导频功率设置不当导致估计偏差现象信道估计的均方误差在高信噪比下不收敛。原因导频功率太低或者导频与数据功率比不对。解决导频功率一般比数据功率高 3 到 6 dB具体看信道估计器的噪声抑制能力。OTFS 的导频在延迟-多普勒域是稀疏的功率可以更集中但要注意不要触发功放非线性。5. 把仿真变成可复用的对比工具参数扫描与结果验证5.1 用参数扫描代替单点对比单点仿真只能告诉你一个工况下的结果参数扫描才能画出趋势。我一般会扫三个维度多普勒频移从 0 到 1000 Hz时延扩展从 0.1 微秒到 10 微秒信噪比从 0 到 30 dB。每个维度取 8 到 10 个点跑完大概需要几个小时但得到的误码率曲面能直接看出两种波形的适用边界。扫描脚本可以这样组织import itertools import numpy as np doppler_list np.linspace(0, 1000, 8) delay_list np.linspace(0.1e-6, 10e-6, 8) snr_list np.linspace(0, 30, 10) results {} for fd, delay, snr in itertools.product(doppler_list, delay_list, snr_list): # 构建信道 delays [0, delay] gains [1.0, 0.5] dopplers [0, fd] # 跑 OFDM 和 OTFS 链路记录误码率 ber_ofdm run_ofdm_sim(delays, gains, dopplers, snr) ber_otfs run_otfs_sim(delays, gains, dopplers, snr) results[(fd, delay, snr)] (ber_ofdm, ber_otfs)逻辑说明itertools.product生成所有参数组合每个组合跑一次 OFDM 和 OTFS 仿真。run_ofdm_sim和run_otfs_sim是封装好的链路函数内部完成调制、信道注入、解调和误码统计。参数上doppler_list覆盖低速到高速delay_list覆盖室内到室外多径snr_list覆盖低信噪比到高信噪比。跑完之后把结果存成结构化数据方便画图。5.2 验证仿真结果是否可信的三个检查点第一检查无多普勒无多径时的误码率是否与理论 QAM 曲线重合。如果对不上说明调制解调或者信噪比定义有问题。第二检查 CP 长度是否真的大于最大时延扩展可以故意把 CP 设短看误码率是否恶化如果没恶化说明信道注入有问题。第三检查 OTFS 在延迟-多普勒域的导频响应是否稀疏如果糊成一片说明网格划分或者信道模型不对。5.3 一个我常犯的错误早期做这个仿真时我为了省时间把信道抽头系数设成固定值只加时延不加多普勒。结果 OTFS 和 OFDM 的曲线几乎一样我还以为是 OTFS 没优势。后来被同事点醒加了多普勒再跑OTFS 在高速场景下的误码率比 OFDM 低了将近一个数量级。从那以后我每次做波形对比仿真第一件事就是检查信道模型里有没有多普勒。希望这个教训能帮你少走一段弯路。本文还有配套的精品资源点击获取