拓冰建站拓冰建站
首页 / 资讯中心 / 正文

大规模MIMO-OTFS与混合预编码:LEO卫星通感一体化链路仿真

简介面向无线通信与雷达感知研究人员的学术资料包围绕低轨卫星通信与感知一体化场景给出基于大规模多输入多输出正交时频空间调制的混合预编码优化方案。资源聚焦于在不损失雷达感知精度的前提下提升通信性能系统推导了时延多普勒信道模型、下行链路信号传输以及雷达波束成形的数学表达式针对混合预编码优化提出交替优化方法求解功率分配问题仿真结果验证所提方案可显著提高系统综合表现。压缩包为单个PDF文档大小约265KB全文推导完整、公式详尽具备可复现性。适合具备扎实无线通信理论背景、从事卫星通信及雷达感知研究的专业人士精读尤其对理解正交时频空间调制与混合预编码的结合、权衡通信与感知模块性能的研究者具有直接参考价值。资源发布以来已有131人浏览学习。1. 大规模MIMO-OTFS在LEO卫星通感一体化里到底解决什么问题LEO卫星以约7.5 km/s的相对速度扫过地面在3.5 GHz载频上会产生接近90 kHz的多普勒频移传统OFDM的“一个符号块内信道不变”假设直接失效。把收发信机搬到“时延-多普勒域”处理信号的OTFS正好能把这种快变信道重新变得稀疏且近似时不变再加上大规模MIMO的空间分辨能力以及混合预编码对射频链路的压缩卫星不需要为每根天线配一条完整射频链就能在同一个波束上同时做测速测距和数据传输。这套方案适合正在做LEO星地链路物理层仿真的研究者也适合评估通感一体化是否值得上星的系统工程师。这篇笔记会把这套方案的理论依据、最小可复现链路、关键参数和典型翻车点拆开讲透。2. 从OTFS信号模型到混合预编码这套方案的立身点要复现一个“大规模MIMO-OTFS的LEO通感一体化混合预编码优化”项目第一步不是急着写代码而是把信号模型捋清楚。LEO信道里最棘手的不是路径损耗而是多普勒OTFS解决的是时变信道下的符号正交性问题混合预编码解决的是射频资源约束下的波束成形问题两者在ISAC场景里最终会汇合到同一个预编码矩阵上。2.1 LEO信道里的多普勒为什么让OFDM块衰落假设失效OFDM的经典假设是信道在一个OFDM符号内保持不变这个假设放到LEO场景里非常脆弱。相对径向速度7.5 km/s、载频3.5 GHz时最大多普勒频移为 v·fc/c ≈ 87.5 kHz。如果子载波间隔仍是15 kHz多普勒频移已经是子载波间隔的5倍以上子载波之间的正交性被破坏接收端会出现严重的载波间干扰。OTFS换了个思路把调制符号直接放在时延-多普勒DD域网格上而不是时频TF域。DD域信道对每个时延-多普勒格点是近似不变的因为路径的时延和多普勒在数百微秒级观测窗内几乎不跳变。对通信来说这是把“快变信道”转换成“稀疏时不变信道”对感知来说时延-多普勒本来就是雷达的距离-多普勒图通信和感知共用同一套网格天然契合通感一体化。这才是OTFS在这个题目里的核心价值。2.2 时延-多普勒域的OTFS调制与解调矩阵OTFS发送端做的事可以拆成两步先把DD域符号矩阵通过逆辛傅里叶变换映射到时频域再做海森堡变换得到时域发射信号。接收端反过来先做维格纳变换回到时频域再做辛傅里叶变换取回DD域符号。用矩阵语言描述发射端流程为X_tf ifft(X_dd, N, 1) 沿多普勒维做IDFT X_tf fft(X_tf, M, 2) 沿时延维做DFT s_tf ifft(X_tf, M, 2) 经典OFDM调制中的IFFT s_time s_tf(:) 串并转换得到时域序列这里的 M 是时延子载波维尺寸N 是多普勒OTFS符号维尺寸。DD域网格分辨率由两个参数决定时延分辨率 τ_res 1/(M·Δf)多普勒分辨率 Δν Δf/N。整条链路在矩阵层面等效为一个块循环矩阵 H_eff即 vec(y_dd) H_eff·vec(x_dd) w这个 H_eff 是后面做混合预编码优化时真正面对的对象。2.3 混合预编码的约束条件与通感共用信号模型全数字预编码要给每根天线配一条射频链64天线就是64条射频链卫星载荷的功耗和散热根本扛不住。混合预编码把预编码矩阵拆成 F F_RF·F_BBF_RF 是模拟域移相器网络元素恒模只调相位不调幅度F_BB 是数字域基带预编码器维度远小于天线数负责功率分配和流间干扰抑制。通感一体化场景里发射信号 x F·s 同时服务于两个对象一个是对地通信用户等效信道是 H_c另一个是感知目标回波信道可以建模为 H_s α·a_r(θ_s)·a_tᵀ(θ_s)α 是目标反射系数a_t、a_r 分别是收发阵列响应向量。优化问题是找一组 F_RF、F_BB让通信速率和感知目标回波质量同时过得去而不是各自独立设计两套波束。这就是“一体化”对预编码设计提出的真实约束。3. 搭一条最小可复现的仿真链路参数、信道生成与OTFS收发实现理论模型立住之后马上要解决的是“怎么把这套东西跑起来”。我通常会把链路拆成三个独立模块参数配置、DD域信道生成与OTFS收发、预编码优化。这里给出一套可在MATLAB或Python里直接展开的最小骨架规模刻意压小让普通笔记本在几分钟内能出结果。3.1 场景参数轨道高度、载频、天线阵与收发端配置以下是这套仿真链路里比较稳妥的起点参数。载频选3.5 GHz相对径向速度取7.5 km/s对应最大多普勒约87.5 kHz子载波间隔必须大于两倍最大多普勒所以取240 kHz而不是地面通信常用的15 kHz。参数取值说明LEO轨道高度约600 km典型LEO星地往返时延约4 ms量级载频 fc3.5 GHzC波段兼顾多普勒规模与链路预算相对径向速度7.5 km/s星地最大径向速度决定多普勒最大多普勒 ν_max约87.5 kHz由 v·fc/c 算得子载波间隔 Δf240 kHz必须覆盖 ±ν_max时延维栅格 M32对应32个时延仓多普勒维栅格 N16对应16个多普勒仓时延分辨率约130 ns1/(M·Δf)多普勒分辨率15 kHzΔf/N发射天线 N_t648×8 UPA可退化为ULA接收天线 N_r164×4 UPA用户端天线射频链数 N_RF4数据流 N_s 取2感知目标角度偏离阵列法线20°点目标角度目标反射系数 α0.2回波幅度增益这里天线规模故意没有顶到很大64发16收可以让信道矩阵保持在可直接构造的范围内。等整条链路验证完再把 N_t 往上拉到256或512那时候才需要把 H_eff 改成块循环加速计算否则内存会先爆掉。3.2 生成DD域信道并完成OTFS发送端映射写代码时先建立路径参数再生成信道矩阵。以下代码是MATLAB风格的最小实现如果用Python把循环改成NumPy矩阵运算即可。% config_dd.m 定义DD域网格和信道路径 M 32; % 时延栅格数 N 16; % 多普勒栅格数 df 240e3; % 子载波间隔需大于2倍最大多普勒 T 1/df; % OTFS符号基础时隙 fc 3.5e9; c 3e8; v_max 7.5e3; % 最大径向速度 m/s nu_max v_max*fc/c; % 87.5kHz % 多径参数时延单位是时延分辨率tau_res多普勒单位是多普勒分辨率 paths.delay_taps [0, 8, 20, 40]; % 对应 0/1.04/2.6/5.2 us paths.dopp_taps [0, 3, -5, 6]; % 对应 0/45/-75/90 kHz paths.gains [1.0, 0.6, 0.4, 0.25] .* exp(1j*[0, -0.8, 1.2, -2.1]);% otfs_tx.m 最小OTFS发送端映射 X_dd reshape(data_symbols, N, M); % data_symbols为QPSK/16QAM符号 % 逆辛傅里叶变换片段多普勒维IDFT时延维DFT X_tf ifft(X_dd, N, 1); X_tf fft(X_tf, M, 2); % 海森堡变换按列做IFFT得到时域样本 s_tf ifft(X_tf, M, 2); s s_tf(:); % 时域发送序列长度N*M L_CP 64; % 覆盖最大时延抽头 s [s(end-L_CP1:end); s]; % 整帧加循环前缀这两段代码的逻辑核心是先定义DD域格点上的信道抽头再对发送符号做ISFFT和海森堡变换。ISFFT的作用是把时延-多普勒域上的符号“铺”到时频域上海森堡变换则完成OFDM调制那一半工作。L_CP取64是因为最大时延抽头40乘以约130 ns时延分辨率约5.2 μs64个采样点刚好留出约8.3 μs的保护间隔。需要注意不同文献里ISFFT的方向约定偶尔会不一样有的是多普勒维DFT加时延维IDFT。这不会影响最终结果只要接收端的SFFT严格取发送端ISFFT的逆过程就行。复现时别混用两套约定否则星座图一定转圈。3.3 接收端解调与等效DD域信道矩阵接收端解调只是发送端的逆过程代码骨架为% otfs_rx.m 最小OTFS接收端解调 r rx_signal(L_CP1:end); % 去掉循环前缀 r_mat reshape(r, M, N); % 恢复每列一个OTFS符号 Y_tf fft(r_mat, M, 2); % 维格纳变换时域转频域 Y_dd fft(Y_tf, N, 1); % 辛傅里叶变换取回DD域符号但是复现时不能只走这个理想解调流程还要生成等效DD域信道矩阵 H_eff因为预编码优化直接作用在它上面。常见做法是遍历所有时延、多普勒抽头把每个路径的循环移位矩阵和相位旋转矩阵叠加起来% build_Heff.m 构造等效DD域信道矩阵 H_eff zeros(N*M, N*M); for p 1:length(paths.gains) l_p paths.delay_taps(p); k_p paths.dopp_taps(p); Pi_l circshift(eye(M), l_p, 2); % 时延循环移位 Delta_k diag(exp(1j*2*pi*k_p*(0:N*M-1)/(N*M))); % 多普勒相旋 H_eff H_eff paths.gains(p) * kron(Delta_k, Pi_l); end这段构造方式在上到大规模天线后会因为矩阵维数爆炸而失效但在最小可复现链路里是验证预编码算法正确性的捷径。实际项目里更常用块循环矩阵结构配合二维FFT来求逆避免显式构造 H_eff。先把小规模跑通再替换成快速实现这是最稳的复现路径。4. 混合预编码的优化目标函数、迭代求解与参数调优链路仿真只是给优化算法提供了“对象”真正的重头戏是怎么把通感和通信两个目标塞进一个预编码优化问题里。这部分我给出一个能落地的交替优化骨架并说明三个直接影响收敛效果和最终性能的参数。4.1 优化目标怎么写通信速率与感知互信息的加权通信侧的性能指标通常采用可达速率在DD域等效信道下写为R_comm log2 det( I (1/σ²)·H_c·F·Fᴴ·H_cᴴ )感知侧如果也用信息论指标可以用感知互信息来描述目标回波能携带多少关于散射体的信息R_sense log2 det( I (|α|²/σ_s²)·A_s·F·Fᴴ·A_sᴴ )两个目标直接相加就能得到一个可微的加权目标函数J(F) R_comm β·R_sense其中 β 控制感知权重。β偏大波束会明显偏向感知目标方向通信速率下降β偏小感知回波信噪比不足等于没做一体化。实践中我会先把 β 设成1跑一次性能权衡曲线再根据项目需求选工作点。这条曲线其实就是后面验证部分要复现的核心结果。4.2 交替优化骨架恒模模拟预编码与数字注水目标函数里 F_RF 和 F_BB 是耦合的直接联立求最优解很困难常见做法是交替优化固定一个更新另一个。下面这段骨架遵循这个思路收敛性虽然不是理论最优但在多项式时间里能稳定给出可用结果。% hybrid_opt.m 交替优化框架MATLAB风格伪代码 F_RF init_codebook(deg2rad([theta_comm, theta_sense]), Nt, NRF); F_BB eye(NRF, Ns) / sqrt(NRF); for it 1:20 % 第一步固定F_RF更新数字预编码F_BB Heq H * F_RF; % 等效信道规模 N_r 行、N_RF 列 [U, S, V] svd(Heq); F_BB V(:, 1:Ns) * waterfill(S, P/Ns, sigma2); % 第二步固定F_BB沿目标函数梯度更新F_RF并投影到恒模约束 grad numerical_gradient(F_RF, F_BB, H, A_s, beta); F_RF F_RF lr * grad; % 先做无约束梯度上升 F_RF F_RF ./ abs(F_RF); % 投影到恒模圆周 % 第三步功率归一化 F_RF F_RF .* sqrt(P / norm(F_RF * F_BB, fro)^2); Jtrace(it) J(F_RF, F_BB); end梯度用数值差分是工程妥协。DD域信道矩阵维度大解析梯度推导容易出错数值梯度在64天线规模下足够用等确认整条链路稳定后再改解析梯度提速。waterfill函数需要自己对奇异值做注水功率分配别直接调用通信工具箱里针对点对点信道的版本因为这里的等效信道维度已经是 N_r×N_RF不是满维MIMO信道。功率归一化必须放在每轮迭代最后。F_RF 恒模投影会改变整体发射功率如果先归一化再投影下一轮FP_BB会被错误缩放目标函数曲线就会出现锯齿状抖动。4.3 三个必调参数RF链路数、迭代次数、字典粒度复现时最先要调的参数是射频链路数 N_RF。N_RF 从2提到8时可达速率会逐渐逼近全数字预编码性能但超过数据流数 N_s 之后增速明显放缓。64天线场景下 N_RF4、N_s2 是一个性价比很高的起点先把这组跑通再把 N_RF 拉到8看增益就能画出一条典型的性能饱和曲线。第二个参数是迭代次数。交替优化前几轮涨得最快10轮之后曲线基本平缓。如果20轮还在明显上升大概率是梯度步长 lr 太大或太小。lr从0.01开始每次改半个数量级试观察目标函数是否振荡。第三个容易踩坑的是模拟预编码初始化码本的粒度。F_RF 初始化时要在角度域铺一组字典字典里每个原子就是某一个方向上的阵列响应向量 a(θ)。如果字典只在整数角度上采样而真实通感方向落在两个角度格点之间最终波束会指向错的栅瓣。常见做法是让字典过采样4倍即角度间隔取半波束宽度的四分之一。这样初始化和后续梯度投影都不会被“卡”在粗网格上。5. 通感一体化复现避坑四个高频翻车点这套链路的坑不在理论而在“仿真细节和真实物理约束之间错位”。下面四条是我自己复现和帮人排查时遇到最多的每一条都按现象、原因、解决三个层次写清能直接对照查。5.1 功率预算分配翻车感知目标把通信功率“吸干”了现象设置完 β 权重后感知互信息涨得很快但通信速率掉得比预期还狠甚至接近0。观察 F_RF 每一列发现好几列都指向同一个方向。原因F_RF 的恒模投影和功率归一化顺序搞反了导致数字域注水结果被反复覆盖。另一个更隐蔽的原因是感知回波路径的反射系数 α 在建模时被直接当成“增益”感知项把发射功率视为无限供应梯度把能量全推向感知方向通信用户只剩下一层“漏出去的旁瓣”。解决每次迭代严格按“更新F_BB → 更新F_RF → 恒模投影 → 整体功率归一化”的顺序执行。感知目标建模时必须保留路径损耗和散射损耗概念α 是一个小于1的复数衰减不是能凭空放大信号的放大器。5.2 多普勒网格分辨率不足信道能量“泄漏”成噪声现象发射端 QPSK 星座点在接收端不是聚成四团而是散成一圈DD域解调后原始抽头所在格点周围一大片区域都有能量。原因多普勒分辨率是 Δν Δf/N。前面参数里 Δf240kHz、N16 时多普勒分辨率是15kHz。如果卫星真实多普勒是87.5 kHz除以15 kHz后得到5.83量化到抽头6之后有约0.83格点的残余误差这0.83格点的能量会通过脉冲成形滤波器的旁瓣泄漏到相邻格点上。解决提高 N 或对OTTFS符号做加窗处理。把 N 从16提到32多普勒分辨率就变成7.5kHz87.5kHz对应的量化误差降到0.33格点星座图立刻收敛。复现时可以做一个扫描实验固定 ν_max让 N 从8变到64画出解调后星座点的误差向量幅度能看到明显的阶梯式下降。5.3 移相器量化精度仿真理想值掩盖了收敛性问题现象仿真里混合预编码性能离全数字预编码只差0.5dB左右看起来非常好但把这个F_RF拿去套实际相控阵参数性能掉到没法看。原因仿真里 F_RF 的相位是理论上任意连续值而真实移相器通常只有6位量化也就是64个离散相位档。交替优化里 F_RF 的梯度更新假设相位可以无限细分量化一旦引入梯度下降就变成了一步“随机跳变”收敛曲线会出现周期性回弹。解决从第一天就把 F_RF 限制在量化码本里。最简单做法是每次恒模投影后做一次量化例如相位 quant_phase round(angle(F_RF)/(2*pi/64))再转回复数幅度。量化会牺牲一部分性能但这个牺牲才是工程上真实的差距。复现报告里一定要写清“连续移相器结果”和“6位量化结果”两条曲线。5.4 感知回波与通信信号串扰回波功率加错了位置现象感知互信息曲线看起来漂亮但把同样的收发参数换成时分双工验证后感知性能明显变差通信误码率也上升。原因混合预编码是同一个发射波束同时发通信和感知信号接收端做感知时本地发射信号会通过收发隔离度不够的通道直接串入接收机这就是自干扰。仿真里如果直接把回波信道 H_s 加在接收端而没有任何自干扰残余等于默认了无限隔离度的全双工这在高轨或低轨卫星上都做不到。解决在回波接收模型里加一个自干扰残余项通常建模为发射信号乘以一个很小的隔离系数 ε_si再叠加噪声。比较稳妥的复现做法是让 ε_si 从 -80dB 扫到 -20dB观察感知互信息什么时候开始崩。这样出来的结果才说明“一体化”到底是真的一体还是靠理想假设撑起来的。6. 验证你的复现结果三个可量化指标和一个收敛技巧整套复现做完不能只贴一张“性能看起来还行”的曲线收尾。我一般用三个指标交叉验证链路对不对。第一混合预编码与全数字预编码的谱效间隙。64发16收、N_RF4时两者差距应在1~2dB以内N_RF提升到8差距继续缩小。如果差距超过4dB先怀疑 F_RF 初始化码本粒度不够再怀疑功率归一化顺序。第二DD域星座点误差向量幅度随多普勒分辨率的变化。把 N 从8调到64误差应该单调下降并出现平台如果平台出现得过早说明时延抽头或循环前缀长度不匹配。第三通信速率和感知互信息的权衡曲线。固定发射功率β从0.1扫到10画出通信速率-感知互信息的前沿这其实就是把每个工作点的mimo信道容量图像画出来了。曲线前沿形状应当是平滑凸的任何一个点凹陷都代表局部优化没收敛。收敛技巧比较朴素但很实用每次迭代保存 J(F_RF·F_BB) 的值画出来看形状。如果曲线前5轮陡升、之后缓慢上扬说明步长合适如果锯齿状明显先降步长再看量化是否已经引入。我都把这条收敛轨迹打印到日志里因为这类优化问题最大的翻车不是结果差而是不知道结果是在哪个环节变差的。我在一次复现里因为漏改了初始化码本的过采样倍数谱效低了2dB排查了整整两天都找不到原因最后从收敛轨迹里看到前3轮就停滞才怀疑到初始点不够好。希望帮到你少走这段路。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门