简介:面向无线通信与雷达感知研究人员的学术资料包,围绕低轨卫星通信与感知一体化场景,给出基于大规模多输入多输出正交时频空间调制的混合预编码优化方案。资源聚焦于在不损失雷达感知精度的前提下提升通信性能,系统推导了时延多普勒信道模型、下行链路信号传输以及雷达波束成形的数学表达式;针对混合预编码优化提出交替优化方法求解功率分配问题,仿真结果验证所提方案可显著提高系统综合表现。压缩包为单个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_BB,F_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量级 |
| 载频 fc | 3.5 GHz | C波段,兼顾多普勒规模与链路预算 |
| 相对径向速度 | 7.5 km/s | 星地最大径向速度,决定多普勒 |
| 最大多普勒 ν_max | 约87.5 kHz | 由 v·fc/c 算得 |
| 子载波间隔 Δf | 240 kHz | 必须覆盖 ±ν_max |
| 时延维栅格 M | 32 | 对应32个时延仓 |
| 多普勒维栅格 N | 16 | 对应16个多普勒仓 |
| 时延分辨率 | 约130 ns | 1/(M·Δf) |
| 多普勒分辨率 | 15 kHz | Δf/N |
| 发射天线 N_t | 64(8×8 UPA) | 可退化为ULA |
| 接收天线 N_r | 16(4×4 UPA) | 用户端天线 |
| 射频链数 N_RF | 4 | 数据流 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_CP+1:end); s]; % 整帧加循环前缀这两段代码的逻辑核心是:先定义DD域格点上的信道抽头,再对发送符号做ISFFT和海森堡变换。ISFFT的作用是把时延-多普勒域上的符号“铺”到时频域上;海森堡变换则完成OFDM调制那一半工作。L_CP取64是因为最大时延抽头40乘以约130 ns时延分辨率约5.2 μs,64个采样点刚好留出约8.3 μs的保护间隔。
需要注意,不同文献里ISFFT的方向约定偶尔会不一样,有的是多普勒维DFT加时延维IDFT。这不会影响最终结果,只要接收端的SFFT严格取发送端ISFFT的逆过程就行。复现时别混用两套约定,否则星座图一定转圈。
3.3 接收端解调与等效DD域信道矩阵
接收端解调只是发送端的逆过程,代码骨架为:
% otfs_rx.m 最小OTFS接收端解调 r = rx_signal(L_CP+1: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_RF=4、N_s=2 是一个性价比很高的起点,先把这组跑通,再把 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。前面参数里 Δf=240kHz、N=16 时,多普勒分辨率是15kHz。如果卫星真实多普勒是87.5 kHz,除以15 kHz后得到5.83,量化到抽头6之后有约0.83格点的残余误差,这0.83格点的能量会通过脉冲成形滤波器的旁瓣泄漏到相邻格点上。
解决:提高 N 或对OTTFS符号做加窗处理。把 N 从16提到32,多普勒分辨率就变成7.5kHz,87.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_RF=4时,两者差距应在1~2dB以内;N_RF提升到8,差距继续缩小。如果差距超过4dB,先怀疑 F_RF 初始化码本粒度不够,再怀疑功率归一化顺序。第二,DD域星座点误差向量幅度随多普勒分辨率的变化。把 N 从8调到64,误差应该单调下降并出现平台;如果平台出现得过早,说明时延抽头或循环前缀长度不匹配。第三,通信速率和感知互信息的权衡曲线。固定发射功率,β从0.1扫到10,画出通信速率-感知互信息的前沿,这其实就是把每个工作点的mimo信道容量图像画出来了。曲线前沿形状应当是平滑凸的,任何一个点凹陷都代表局部优化没收敛。
收敛技巧比较朴素但很实用:每次迭代保存 J(F_RF·F_BB) 的值,画出来看形状。如果曲线前5轮陡升、之后缓慢上扬,说明步长合适;如果锯齿状明显,先降步长再看量化是否已经引入。我都把这条收敛轨迹打印到日志里,因为这类优化问题最大的翻车不是结果差,而是不知道结果是在哪个环节变差的。
我在一次复现里因为漏改了初始化码本的过采样倍数,谱效低了2dB,排查了整整两天都找不到原因,最后从收敛轨迹里看到前3轮就停滞,才怀疑到初始点不够好。希望帮到你少走这段路。
本文还有配套的精品资源,点击获取