ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OFDM与OTFS多径衰落仿真对比:从信道建模到误码率分析

OFDM与OTFS多径衰落仿真对比:从信道建模到误码率分析 简介这份资源面向无线通信方向的研究生、科研人员与工程师提供OFDM与OTFS两种宽带调制技术在多径衰落信道下的完整仿真实现帮助理解二者在高速移动与频率选择性衰落场景中的性能差异。压缩包共9个文件全部为m脚本整体约11KB涵盖主流程入口、OFDM调制解调、ISFFT与SFFT变换、多径信道建模、均衡器、数据生成及结果绘图等模块结构紧凑、便于逐文件阅读与二次修改。已有468人学习下载说明其在相关课程设计与科研入门中具有一定参考价值。读者可据此搭建瑞利或莱斯衰落下的链路级仿真计算误码率与符号误率对比OFDM与OTFS的优劣并借助可视化图表直观观察不同参数下的系统表现为后续通信系统设计提供可复用的代码基础与实验思路。1. 从一份仿真包说起OFDM 与 OTFS 在多径衰落下的对比基线做宽带无线通信仿真的工程师大概率都遇到过同一个尴尬链路跑通了误码率曲线也画出来了但换一个信道模型结论就完全站不住。问题往往不在代码而在信道建模这一层被简化过头了。这份「具有 OFDM 和 OTFS 多径衰落的宽带无线通信系统仿真」资源价值就在于它把 OFDM 和 OTFS 放在同一套多径衰落信道下做对照而不是各跑各的。OFDM 大家熟循环前缀加 IFFT把频率选择性衰落拆成一堆平坦子载波OTFS 则是把符号搬到延迟-多普勒域再变换到时频域专门对付高移动场景下多径带来的时变问题。这份包适合两类人一类是想快速搭起可复现链路的通信仿真入门者另一类是想验证 OTFS 相对 OFDM 在双选择性信道下到底强在哪的进阶读者。下面按「信道建模 → OFDM 链路 → OTFS 链路 → 对比与排错」的顺序拆开讲代码和参数都能直接抄。2. 多径衰落信道建模从抽头延迟线到延迟-多普勒域2.1 为什么不能只用 AWGN 糊弄过去宽带系统里信号带宽往往大于信道相干带宽接收端看到的是频率选择性衰落不同子载波经历不同增益。如果仿真里只加高斯白噪声OFDM 的均衡、OTFS 的二维变换全都失去意义误码率曲线会漂亮得离谱。常见做法是用抽头延迟线模型给定若干条路径每条有延迟、复增益和多普勒频移接收信号是各路径的加权延迟叠加。这个模型既能体现频率选择性也能体现时间选择性是双选择性信道的标准起点。2.2 抽头延迟线信道的参数化实现下面这段 MATLAB 代码构造一个多径瑞利衰落信道路径数、最大延迟、多普勒频率都可调是整份仿真里最该先吃透的部分。% 多径衰落信道参数 N_path 6; % 路径数 delays [0 1 2 3 5 8]*1e-6;% 各路径延迟(秒) pdp_dB [0 -3 -6 -9 -12 -15]; % 功率延迟谱(dB) fd 100; % 最大多普勒频移(Hz) fs 20e6; % 采样率 N_sym 1e4; % 仿真符号数 % 由PDP生成各路径平均功率 pdp_lin 10.^(pdp_dB/10); pdp_lin pdp_lin / sum(pdp_lin); % 生成每条路径的瑞利衰落系数(Jakes模型近似) t (0:N_sym-1)/fs; h zeros(N_path, N_sym); for p 1:N_path fdp fd * cos(2*pi*rand); % 每条路径入射角随机 h(p,:) sqrt(pdp_lin(p)/2) * ... (randn(1,N_sym) 1j*randn(1,N_sym)) .* exp(1j*2*pi*fdp*t); end % 按延迟抽头叠加得到接收信号 rx zeros(1, N_sym round(max(delays)*fs)); for p 1:N_path d round(delays(p)*fs); rx(d1:dN_sym) rx(d1:dN_sym) h(p,:) .* tx; end逻辑上分三步先由功率延迟谱归一化出各路径平均功率再给每条路径生成带多普勒的复高斯过程最后按采样点延迟叠加。参数说明上fd决定时间选择性强度delays和pdp_dB决定频率选择性强度fs必须远大于最大延迟的倒数否则抽头会混叠。我一般会把fd设成 0、100、500 三档分别对应静止、中速、高速这样后面 OFDM 和 OTFS 的差异才看得出来。2.3 延迟-多普勒域表示与 OTFS 的接口OTFS 的核心是把信道搬到延迟-多普勒域描述。上面抽头模型里的每条路径在延迟-多普勒域就是一个位于(延迟, 多普勒)坐标上的点增益就是该点的复幅度。这个稀疏表示正是 OTFS 能抗时变的原因时频域里扩散开的能量在延迟-多普勒域重新聚成少数几个尖峰。仿真时通常把delays和fdp直接映射成二维网格上的坐标再通过 ISFFT 变换到时频域。理解这一层映射后面看 OTFS 接收端就不容易迷路。参数含义典型取值影响N_path路径数4~8决定频选严重程度delays路径延迟0~8 μs决定相干带宽pdp_dB功率延迟谱0~-15 dB决定各径能量分布fd最大多普勒0~500 Hz决定相干时间fs采样率≥10×带宽防止抽头混叠提示延迟抽头取整时用round而不是floor否则所有路径会系统性偏早一个采样点OTFS 的延迟估计会整体偏移。3. OFDM 链路搭建CP 长度、子载波映射与均衡3.1 OFDM 收发链路的模块拆解OFDM 链路本身不复杂但每个模块的参数都互相牵制。发送端做子载波映射、IFFT、加循环前缀接收端去 CP、FFT、信道估计、均衡、解映射。真正容易翻车的是 CP 长度和子载波间隔的匹配CP 必须覆盖最大路径延迟否则符号间干扰消不掉子载波间隔要小于相干带宽否则频选补偿不干净。常见做法是 CP 长度取最大延迟的 1.2 到 1.5 倍留一点余量。3.2 可复现的 OFDM 基带仿真代码N_fft 1024; % FFT点数 N_cp 128; % 循环前缀长度 N_data 800; % 数据子载波数 mod_order 4; % QPSK N_ofdm 200; % OFDM符号数 % 发送端 data randi([0 mod_order-1], N_data*N_ofdm, 1); sym qammod(data, mod_order, UnitAveragePower, true); sym reshape(sym, N_data, N_ofdm); % 子载波映射(留保护带) grid zeros(N_fft, N_ofdm); idx [2:N_data/21, N_fft-N_data/21:N_fft]; grid(idx, :) sym; % IFFT 加CP tx_time ifft(ifftshift(grid, 1), N_fft, 1); tx_cp [tx_time(end-N_cp1:end, :); tx_time]; tx_stream tx_cp(:); % 过信道(调用第2章的多径模型) rx_stream multipath_channel(tx_stream, delays, pdp_lin, fd, fs); % 接收端: 去CP FFT rx_mat reshape(rx_stream(1:N_fftN_cp, 1:N_ofdm), N_fftN_cp, N_ofdm); rx_time rx_mat(N_cp1:end, :); rx_grid fftshift(fft(rx_time, N_fft, 1), 1); % 最小二乘信道估计(用导频符号) H_est rx_grid(:,1) ./ grid(:,1); H_est(H_est0) eps; rx_eq rx_grid ./ H_est; rx_sym rx_eq(idx, :); rx_data qamdemod(rx_sym(:), mod_order, UnitAveragePower, true); ber mean(rx_data ~ data);这段代码里ifftshift和fftshift的配对是子载波映射正确与否的关键漏掉一个就会导致频谱搬移错位。N_cp取 128 对应约 6.4 μs能覆盖第 2 章里 8 μs 以内的主要路径。信道估计这里用单个导频符号做最小二乘简单但够用如果多普勒较大导频要加密否则H_est跟不上信道变化均衡后误码率会明显抬高。3.3 均衡与误码率统计的坑均衡之后统计误码率有两个细节常被忽略。一是导频符号本身不能计入误码统计否则会拉低 BER二是信道估计误差在低信噪比下会被放大H_est里接近零的子载波要做保护代码里那句H_est(H_est0)eps就是干这个的。我一般会把每个信噪比点跑 50 次以上再取平均单次仿真的 BER 抖动很大曲线根本没法看。模块关键参数常见误用后果CPN_cp小于最大延迟ISI 残留子载波映射idx漏 fftshift频谱错位信道估计导频密度高速下导频太稀均衡失效BER 统计统计范围含导频符号结果偏低4. OTFS 调制解调ISFFT、海森堡变换与二维均衡4.1 OTFS 为什么在双选择性信道下更稳OFDM 把符号放在时频域信道在时频域是二维扩散的高速场景下每个子载波上的增益都在快速变化导频开销大。OTFS 反过来把符号放在延迟-多普勒域信道在这个域里是稀疏且近似时不变的一个符号经历的等效信道在整帧内基本稳定。代价是发送端要做 ISFFT 和加窗接收端要做 SFFT 和二维均衡计算量比 OFDM 高。仿真里这个取舍很明显低速时两者差不多fd上到几百赫兹OTFS 的 BER 曲线就开始和 OFDM 拉开差距。4.2 ISFFT 与海森堡变换的实现N 64; % 延迟维点数 M 32; % 多普勒维点数 X_dd qammod(randi([0 3], N, M), 4, UnitAveragePower, true); % ISFFT: 延迟-多普勒域 - 时频域 X_tf fft(ifft(X_dd, N, 1), M, 2) / sqrt(N*M); % 海森堡变换: 时频域 - 时域(加窗后沿时间轴IFFT) win ones(N, M); X_tf_win X_tf .* win; s ifft(X_tf_win, M, 2); s s(:); % 过信道(复用第2章多径模型) r multipath_channel(s, delays, pdp_lin, fd, fs); % 接收端: 维格纳变换 SFFT r_mat reshape(r(1:N*M), N, M); Y_tf fft(r_mat, M, 2); Y_dd fft(ifft(Y_tf, M, 2), N, 1) * sqrt(N*M); % 二维均衡(逐点除等效信道) H_dd fft(ifft(ones(N,M), N, 1), M, 2); % 占位, 实际由信道估计得到 Y_eq Y_dd ./ (H_dd eps); rx_bits qamdemod(Y_eq(:), 4, UnitAveragePower, true);ifft(X_dd, N, 1)沿延迟维做逆变换fft(..., M, 2)沿多普勒维做正变换合起来就是 ISFFT。接收端的 SFFT 是逆过程顺序和方向都不能错。win这里用全 1 窗简化实际工程里会用更平滑的窗抑制带外泄漏。二维均衡那一步H_dd必须来自信道估计而不是占位否则结果没有意义这里保留占位只是为了让链路先跑通。4.3 OFDM 与 OTFS 的对照实验设计要做有说服力的对比必须控制变量同一组delays、pdp_lin、fd同一信噪比扫描范围同一调制阶数。建议固定fd0和fd300两组分别看低速和高速下的 BER 差异。低速时两条曲线几乎重合高速时 OTFS 在中高信噪比段明显更低。如果发现 OTFS 反而更差先查 SFFT 的变换方向再查二维均衡的信道估计是否对齐了延迟-多普勒网格这两处出错最常见。对比维度OFDMOTFS符号域时频域延迟-多普勒域信道表示二维扩散稀疏近似时不变导频开销高速下大相对小计算复杂度低高适用场景低速/中速高速双选择性注意OTFS 的延迟-多普勒网格尺寸N×M要和信道最大延迟、最大多普勒匹配网格太小会把路径折疊稀疏性直接丢失。5. 仿真排错与结果验证从 BER 曲线异常反推问题5.1 常见异常与定位路径BER 曲线不随信噪比下降、曲线出现平台、OTFS 比 OFDM 还差这三类问题占了仿真排错的大半。曲线不降先看接收端有没有正确去 CP 或做 SFFT出现平台多半是信道估计误差或导频污染OTFS 更差回到变换方向和网格对齐。我习惯先在无噪声、单径条件下跑一遍确认收发能无误码再逐步加路径、加多普勒这样问题出在哪一层一目了然。5.2 用理想信道估计做基准验证% 理想信道估计: 直接用真实信道响应, 排除估计误差 H_true fftshift(fft(h_true, N_fft, 1), 1); rx_eq_ideal rx_grid ./ (H_true eps); ber_ideal mean(qamdemod(rx_eq_ideal(idx,:), 4, ... UnitAveragePower, true) ~ data); % 对比实际估计与理想估计的BER差距 fprintf(实际估计BER: %.4e\n, ber); fprintf(理想估计BER: %.4e\n, ber_ideal);如果理想估计下 BER 正常、实际估计下偏高问题就在信道估计模块跟调制解调无关。这个对照能把排查范围直接砍一半。参数上h_true要用过信道时同一组系数不能重新生成否则对比没有意义。5.3 一个提升仿真效率的小技巧多径信道生成里那个逐路径循环在路径多、符号长的时候很慢。可以把h的生成向量化用矩阵运算一次性算出所有路径的衰落系数再统一做延迟叠加。另外BER 扫描时用parfor并行各个信噪比点速度能提升数倍。这些改动不影响结果但能让整套 OFDM/OTFS 对比仿真从跑一晚上缩到一两个小时迭代参数时体验完全不同。本文还有配套的精品资源点击获取
返回列表