第【124】期--多用户 MISO 下行链路中 OTFS 与 OFDM 在高速移动场景下的性能对比--matlab完整代码

关注我,追更更多通信仿真代码!

文章目录

    • 摘要
    • [1 引言](#1 引言)
    • [2 系统模型](#2 系统模型)
      • [2.1 系统参数](#2.1 系统参数)
      • [2.2 信道模型](#2.2 信道模型)
      • [2.3 发射预编码](#2.3 发射预编码)
    • [3 波形调制与接收](#3 波形调制与接收)
      • [3.1 OTFS 调制与解调](#3.1 OTFS 调制与解调)
      • [3.2 OFDM 调制与解调](#3.2 OFDM 调制与解调)
      • [3.3 OTFS 时域 LMMSE 均衡](#3.3 OTFS 时域 LMMSE 均衡)
      • [3.4 OFDM 单抽头频域均衡](#3.4 OFDM 单抽头频域均衡)
      • [3.5 信道估计误差建模](#3.5 信道估计误差建模)
    • [4 仿真设计与分析](#4 仿真设计与分析)
      • [4.1 参数设置](#4.1 参数设置)
      • [4.2 仿真结果分析](#4.2 仿真结果分析)
      • [4.3 部分代码](#4.3 部分代码)
    • [5 总结](#5 总结)

摘要

随着高速铁路、车联网和低轨卫星通信等场景的发展,无线信道呈现出显著的时间选择性和频率选择性,传统正交频分复用(OFDM)在高速移动下因多普勒扩展引起的子载波间干扰而性能急剧下降。正交时频空(OTFS)作为一种新兴波形,通过在时延--多普勒域承载信息,被认为能更好地对抗高移动性信道。本文针对多用户多天线下行链路,研究了OFDM与OTFS两种波形在不同用户移动速度下的误比特率性能。仿真中信道采用多径时延-多普勒模型,并引入信道估计误差、多普勒估计误差及反馈时延引起的信道老化。OFDM接收机采用单抽头频域均衡,OTFS接收机采用时域LMMSE均衡。结果表明:在静态及低速场景下两种波形性能接近;随着用户速度升高,OFDM因多普勒扩展迅速恶化并出现错误平台,而OTFS仍能保持稳定下降。星座图进一步验证了OTFS在高速移动场景下的鲁棒性优势。

1 引言

  • 第五代及未来移动通信系统需要在地面高速铁路、车联网、无人机通信和低轨卫星等场景下提供可靠服务。这些场景的共同特征是收发端之间存在显著相对运动,导致信道产生大的多普勒频移和多普勒扩展。OFDM 作为当前主流的宽带波形,通过将频率选择性信道转化为一组平坦子载波来简化均衡,但其子载波正交性对多普勒引起的载波间干扰非常敏感。当用户速度较高时,OFDM 的单抽头频域均衡无法补偿子载波间干扰,误码率性能迅速恶化。OTFS 通过在时延--多普勒域放置信息符号,并经由二维变换映射到时频域发送,使等效信道在时延--多普勒域呈现稀疏且近似时不变的结构,从而在高多普勒场景下具有潜在优势。

  • 本文构建了一个多用户 MISO 下行链路仿真平台,建立包含多天线基站与多个单天线用户的下行系统模型。系统采用多径时延--多普勒信道模型,并引入不完美信道估计与信道状态信息老化。接收端分别实现 OTFS 时域线性最小均方误差接收机与 OFDM 单抽头频域线性最小均方误差接收机。通过遍历信噪比与用户速度,统计误码率并绘制星座图,分析 OTFS 与 OFDM 在不同移动性下的性能差异及其原因。

2 系统模型

2.1 系统参数

2.2 信道模型

2.3 发射预编码

3 波形调制与接收

3.1 OTFS 调制与解调

3.2 OFDM 调制与解调

3.3 OTFS 时域 LMMSE 均衡

3.4 OFDM 单抽头频域均衡

3.5 信道估计误差建模

4 仿真设计与分析

4.1 参数设置

表 1 仿真参数

参数 符号 取值
子载波数 M M M 64
符号数 N N N 30
子载波间隔 Δ f \Delta f Δf 15 kHz
载波频率 f c f_c fc 5 GHz
保护长度 L pad L_{\text{pad}} Lpad 10
采样率 f s f_s fs M Δ f = 960 M\Delta f = 960 MΔf=960 kHz
每帧样本数 N samp N_{\text{samp}} Nsamp ( M + L pad ) N = 2220 (M+L_{\text{pad}})N = 2220 (M+Lpad)N=2220
调制方式 --- 16-QAM
每符号比特数 b b b 4
基站天线数 N t N_t Nt 4
用户数 K K K 6
用户速度 v v v 0, 0, 30, 120, 300, 500 km/h
静态用户索引 --- 1, 2
移动用户索引 --- 3, 4, 5, 6
路径数 P P P 3
路径时延 τ p \tau_p τp 0, 5, 8 采样点
路径功率 P p dB P_p^{\text{dB}} PpdB 0, −3, −6 dB
多普勒因子 α p \alpha_p αp 0, −0.60, 1.00
导频符号数 N p N_p Np 8
OTFS 估计底噪 ε 0 OTFS \varepsilon_0^{\text{OTFS}} ε0OTFS 10 − 18 / 10 10^{-18/10} 10−18/10
OFDM 估计底噪 ε 0 OFDM \varepsilon_0^{\text{OFDM}} ε0OFDM 10 − 28 / 10 10^{-28/10} 10−28/10
OTFS 多普勒敏感系数 κ OTFS \kappa_{\text{OTFS}} κOTFS 0.10
OFDM 多普勒敏感系数 κ OFDM \kappa_{\text{OFDM}} κOFDM 1.50
OTFS 多普勒估计比例 η OTFS \eta_{\text{OTFS}} ηOTFS 0.005
OFDM 多普勒估计比例 η OFDM \eta_{\text{OFDM}} ηOFDM 0.030
多普勒估计底噪 ν 0 \nu_0 ν0 1 Hz
反馈时延 T fb T_{\text{fb}} Tfb 0.1 ms
SNR 范围 --- 0--20 dB,步长 1 dB
每点帧数 --- 100
PCG 容差 --- 10 − 5 10^{-5} 10−5
PCG 最大迭代次数 --- 80

4.2 仿真结果分析

可以看到:

  • 四张图分别展示静态与移动用户的BER对比、不同速度下的BER曲线以及500 km/h下两种波形的星座图。结果显示:静态时OFDM与OTFS性能接近;随速度升高,OFDM因多普勒干扰迅速恶化并出现错误平台,OTFS仍稳定下降;星座图中OFDM点云发散、OTFS星座清晰,验证OTFS在高速移动场景下更具鲁棒性

4.3 部分代码

c 复制代码
function frequencyResponse = makeOFDMDiagonalResponse(M, N, padLen, fs, ...
    pathDelays, pathGains, pathDopplersHz, precoder)
% 构造 OFDM 每个子载波、每个符号的等效频域响应。
% 包含时延相位、符号内平均多普勒相位和符号间多普勒相位。

    frequencyResponse = complex(zeros(M, N));
    subcarrierIndices = (0:M-1).';
    symbolStartSamples = (0:N-1)*(M+padLen) + padLen;

    for pathIndex = 1:numel(pathDelays)
        % 经预编码合并后的等效路径增益
        effectiveGain = sum(precoder.*pathGains(:,pathIndex));

        % 时延引起的子载波相位
        delayPhase = exp(-1i*2*pi*subcarrierIndices* ...
            pathDelays(pathIndex)/M);

        % 符号内多普勒平均相位
        withinSymbolPhase = mean(exp(1i*2*pi*pathDopplersHz(pathIndex)* ...
            (0:M-1)/fs));

        % 符号起始位置的多普勒相位
        symbolDopplerPhase = withinSymbolPhase*exp(1i*2*pi* ...
            pathDopplersHz(pathIndex)*symbolStartSamples/fs);

        frequencyResponse = frequencyResponse + ...
            effectiveGain*delayPhase*symbolDopplerPhase;
    end
end
c 复制代码
%% 多用户下行链路 OFDM 与 OTFS 性能对比仿真(主脚本)
% 本脚本比较 OFDM 与 OTFS 在多用户多天线下行链路、不同用户速度下的 BER。
% 结构:主脚本负责参数配置、循环调度、结果汇总与绘图;
%       其余功能由同目录下的独立函数文件实现。

clear
clc
close all
rng(2026,"twister")

%% ===================== 1. 参数配置 =====================

params = buildParameters();

%% ===================== 2. BER 蒙特卡洛仿真 =====================

results = runMonteCarlo(params);

%% ===================== 3. 结果汇总与 BER 计算 =====================

metrics = computeBERMetrics(results, params);

%% ===================== 4. 绘图 =====================

plotStaticMobileBER(metrics, params)
plotSpeedBER(metrics, params)
plotConstellations(results, params)

%% ===================== 5. 输出结果表 =====================

printResultsTable(metrics, params)
c 复制代码
function results = runMonteCarlo(params)
% 执行 BER 蒙特卡洛仿真,返回误码计数、比特计数和星座样本。

    numSNR = numel(params.SNRdB);
    results.errorCountOTFS = zeros(params.numUsers, numSNR);
    results.errorCountOFDM = zeros(params.numUsers, numSNR);
    results.bitCount = zeros(params.numUsers, numSNR);
    results.constellationOTFS = [];
    results.constellationOFDM = [];

    for snrIndex = 1:numSNR
        noiseVariance = 10^(-params.SNRdB(snrIndex)/10);

        for userIndex = 1:params.numUsers
            % 根据用户速度计算多普勒频移
            speedMps = params.userSpeedsKmh(userIndex)/3.6;
            maximumDoppler = speedMps*params.fc/params.c;
            pathDopplersHz = maximumDoppler*params.dopplerFactors;

            % 判断是否捕获星座图
            captureConstellation = params.userSpeedsKmh(userIndex) == ...
                params.constellationSpeedKmh && ...
                params.SNRdB(snrIndex) == params.constellationSNRdB;

            % 调用单用户仿真函数
            [errorCountOTFS, errorCountOFDM, bitCount, frameOTFS, frameOFDM] = ...
                simulateWaveformDownlinkUser(params, noiseVariance, ...
                pathDopplersHz, maximumDoppler, userIndex, ...
                captureConstellation);

            results.errorCountOTFS(userIndex,snrIndex) = errorCountOTFS;
            results.errorCountOFDM(userIndex,snrIndex) = errorCountOFDM;
            results.bitCount(userIndex,snrIndex) = bitCount;

            if captureConstellation
                results.constellationOTFS = frameOTFS;
                results.constellationOFDM = frameOFDM;
            end
        end

        fprintf("Completed SNR = %2d dB\n", params.SNRdB(snrIndex))
    end
end

5 总结

本文针对多用户多天线下行链路,比较了OFDM与OTFS在不同用户移动速度下的误比特率性能。结果表明:静态和低速场景下两者性能接近,OFDM因实现简单仍具优势;随着速度升高,OFDM因多普勒扩展迅速恶化并出现错误平台,而OTFS仍能保持稳定下降,星座图也验证了其在高速移动场景下的鲁棒性优势。因此,在高速铁路、车联网等高速移动场景中,OTFS是一种更具潜力的波形方案。未来可进一步研究多用户调度与预编码、更精确的信道估计与导频设计、非线性检测算法,以及OTFS与其他新型波形的对比,为不同场景下的波形选择提供更全面的参考。

相关推荐
kruptos7 天前
网速有物理上限吗?香农公式讲透
ofdm·mimo·香农公式·信息论·ldpc·polar码·编码理论
通信仿真爱好者22 天前
第【109】期--基于神经网络的OFDM峰均功率比降低方法--python完整代码
python·神经网络·ofdm·限幅滤波·峰均功率比·papr降低
Cc小跟班2 个月前
平坦衰落和频率选择性衰落的区别
ofdm·信道估计·平坦衰落·频率选择性衰落·相干带宽·时延扩展
简简单单做算法3 个月前
基于OFDM的车联网雷达通信一体化感知算法matlab性能仿真
matlab·ofdm·车联网·雷达通信一体化
通信仿真爱好者3 个月前
第【11】期--基于智能反射面的MIMO安全速率最大化研究-maltab完整代码+完整报告
mimo·matlab仿真·物理层安全·智能反射面
EW Frontier4 个月前
【信道估计】MIMO-GFDM 信道估计新方案:无干扰导频插入(IFPI)技术深度解析【附MATLAB代码】
ofdm·信道估计·gfdm
木有童年8 个月前
双输入、单输出小费问题的模糊控制Matlab仿真
matlab仿真·模糊控制
guygg888 个月前
基于MATLAB的8个OFDM-Chirp波形时频域及模糊函数分析
ofdm
通信小呆呆8 个月前
DDMA MIMO OFDM ISAC:从回波模型到距离-速度图与非相参积累的原理梳理
算法·信息与通信·ofdm·mimo·通信感知一体化