☰
无人机对船舶毫米波MIMO极化信道建模与MATLAB复现指南
2026/10/15 5:08:39 网站建设 项目流程

做无线通信仿真这些年,我一直有个习惯:接到一个信道建模需求,先不急着写代码,而是先问一句——这条链路的传播环境,和常见场景相比,到底特殊在哪里。最近在复现无人机对船舶的毫米波MIMO极化信道模型时,正好遇到一道典型的题:看起来能套现成工具箱,实际上到处都要自己填坑。这篇文章把复现过程中涉及的核心物理概念、关键参数、MATLAB代码结构和验证方法完整梳理一遍,给准备做无人机通信、海上宽带中继或极化MIMO仿真的朋友一条能直接开工的路线。

无人机到船舶这条链路,频率高、平台动、环境杂,三个因素叠在一起,信道模型写起来比普通地面基站场景麻烦不少。下面我按自己实际复现的顺序来写,不绕弯子。

1. 为什么“无人机—船舶”场景需要单独做毫米波极化信道建模

1.1 传播环境的差异不只是“多了个海面”

很多人一听到海上信道,第一反应是“把陆地模型里的城市建筑参数删掉,换成开阔环境不就行了”。但无人机对船舶的场景,远不是删参数这么简单。

先说几何关系。无人机通常在几十米到几百米高度飞行,船舶上的天线高度一般只有十几米甚至几米,两者之间的水平距离可能从几百米跨到几公里。这个几何结构导致链路仰角变化很大——无人机低空悬停时接近水平传输,高空巡航时又变成大角度俯视。舰船天线的波束指向还会随着船体横摇、纵摇来回摆动,幅度稍大一点就会让天线增益和极化匹配状态发生明显变化。

再说多径来源。开阔海域没有建筑物反射,但海面本身就是一个巨大的反射体。无人机下行到船舶的信号,除了直达径,还会有一条经海面反射到达接收端的路径。海面不是光滑平面,波浪起伏会把这股反射信号打散,形成一系列时延接近、角度分散的微小分量。海况差的时候,波浪遮挡还会造成阴影效应。这些在标准的陆地信道模型里通常没有专门体现。

还有一个容易被忽略的点:无人机平台一直在动。飞行速度稍微快一点,多普勒频移就非常大。在毫米波频段,这个效应会被进一步放大,信道在几十毫秒内就可能发生明显变化。要模拟“移动中继”“盘旋巡检”这类任务,模型必须带时间维。

1.2 毫米波、MIMO、极化三个词的耦合关系

这个标题里三个词不是并列关系,而是一条因果链。

先用毫米波,是因为海上远距离传输需要大带宽。视频回传、雷达数据、传感器流,这些业务随便一跑就是几百兆比特每秒,低频段很难提供连续的大带宽。毫米波在28GHz、38GHz、60GHz附近都有可用频谱,波长只有厘米级甚至毫米级,发射和接收天线都能做得很小,适合挂在无人机和船舶这类平台。

但毫米波路径损耗大,单天线很难撑起链路余量,于是需要MIMO。MIMO的本质是用多根天线同时收发,把空间资源利用起来:既能用波束成形把能量集中到目标方向,也能用多流复用提升速率。在无人机和船舶上,天线数量不可能像地面基站那样装一面大阵列,所以更看重“在有限尺寸里塞进更多有效端口”这件事。

极化就是在这时候加进来的。一副双极化天线可以同时收发电磁波的垂直和水平两个正交分量,相当于把天线端口数量翻倍,却不显著增加物理尺寸。极化MIMO不是简单地把两个极化当成两根独立天线,因为垂直极化和水平极化之间会互相泄漏;海面反射、天线互耦、平台姿态变化都会加剧这种泄漏。于是就有了“极化信道模型”这个专门话题。

1.3 直接套用陆地信道模型会出什么问题

为了省时间,一开始我也试着直接把常用信道模型里的城市宏小区参数拿过来,只把时延扩展调小一点。结果发现三个明显问题。

第一,簇的到达角和离开角分布完全不对。城市环境里大量散射体在街道两侧,角度分布很宽;海面场景的强反射点集中在镜像方向附近,散射集中在海面这一侧。如果强行套用,空间相关性会被明显高估或低估,后面的波束成形仿真结果自然不可信。

第二,极化参数没有物理依据。陆地模型通常给一个固定的交叉极化鉴别度,但海面反射对不同极化分量的影响差异很大,平静海面和波浪海面给出的XPD可能差出10dB以上。用固定值会让容量仿真出现严重偏差。

第三,时间演进逻辑不对。无人机高速运动带来的多普勒扩展、平台摆动带来的信道非平稳特性,在静态链路模型里根本体现不出来。所以最终决定从头实现一套面向该场景的极化信道模型,至少把影响最大的物理因素都放进参数里。

2. 三条核心物理线索:XPD、去极化机制和阵列几何

2.1 XPD决定双极化信道的容量天花板

XPD是交叉极化鉴别度的缩写,可以理解成“同极化分量”和“交叉极化分量”之间能量差的一种度量。假设发射端只发垂直极化波,接收端用一副双极化天线接收,那么接收到的垂直极化功率与水平极化功率之比,就是XPD。

用公式表达就是:

XPD = 10 * log10( P_同极化 / P_交叉极化 )

单位是dB。XPD越大,说明交叉极化泄漏越少,两个极化端口越“干净”。XPD等于10dB时,交叉极化功率是同极化功率的十分之一;等于20dB时,是百分之一。双极化MIMO之所以能实现极化复用,前提就是XPD不能太低。如果XPD只有3dB,两个极化端口的信号混在一起,接收端很难分离开,容量提升自然有限。

在无人机到船舶的场景里,XPD不是一个固定值。视距直达径的极化保持性通常比较好,XPD可以到15到20dB甚至更高;海面反射路径则会因为反射系数和粗糙度的影响,让交叉极化分量明显增强,XPD可能降到10dB左右。高海况时有些极端仿真场景需要设到5dB以下。

建模时不要只填一个数。正确做法是让每条多径有自己的XPD,并且把视距和非视距区分开。这样最终合成的信道矩阵才会出现合理的极化耦合结构。

2.2 海面反射与粗糙散射如何改变极化状态

电磁波打到海面上,反射特性与入射角、极化方式、海水平均介电常数都有关。不同极化的反射系数不一样,这本身就意味着反射后垂直极化和水平极化的幅度关系会发生改变。再加上海面不是理想光滑平面,波浪起伏会让反射波发生漫散射,把一部分能量散射到非镜像方向,其中就包含与入射极化正交的分量。

粗糙度的影响可以用一个粗糙度衰减因子来近似。海面越粗糙,这个因子越小,镜面反射的能量越少,散射分量占比越大。我们的实现里把每条海面反射路径的功率拆成两部分:一部分是规则反射分量,保留较强的极化相关性;另一部分是漫散射分量,交叉极化比例更高、角度散布更大。

这里有一个很关键的建模细节:粗糙度因子会随风速和海况变化。构建模型时,至少要留出一个输入参数来控制海面粗糙程度,不能写死。我一般用浪高或者风速等级作为间接输入,再映射到粗糙度因子和对应的XPD修正量,这样后续做不同海况的对比仿真会方便很多。

2.3 阵列极化响应矩阵的建立方式

要生成极化MIMO信道,不能只给每个天线算一根线的方向增益,必须把每个天线端口和两种极化状态都建立起来。

常见的做法是先把空间导向矢量和极化响应分开计算。空间导向矢量描述的是:某个方向来的平面波,在不同位置的天线阵元上产生的相位差。极化响应描述的是:发射极化经过传播路径后,在接收双极化端口上形成的2x2系数矩阵。

这个2x2极化响应矩阵可以简化写成:

P = [ p_vv, p_vh; p_hv, p_hh ]

其中p_vv是垂直发射、垂直接收的系数,p_vh是垂直发射、水平接收的系数,其他两个以此类推。同极化系数的功率和交叉极化系数的功率,要满足XPD设定。我给交叉极化项加独立随机相位,理由也很简单:真实传播路径中极化转换往往伴随不可预测的相位变化,这个随机相位对多个路径叠加后的衰落特性影响很大,不能省略。

阵列侧的天线端口数量要注意:一副双极化天线包含两个端口,所以8乘8的双极化天线阵列,物理上仍然有64个阵元,但信道端口数是128,也就是64个阵元乘2个极化。很多初学仿真的人会在这里把矩阵维度写错,做出来的信道矩阵规模差了一倍,后续容量和波束赋形验证全乱套。

3. MATLAB复现:一份可运行的极化MIMO信道生成流程

3.1 参数配置:先定边界条件再写代码

我在写具体函数之前,会把仿真边界条件列成一张表,参数全部集中放在脚本开头,方便改。下面这份配置可以当作起点:

% 基本频率与带宽 fc = 28e9; c = 3e8; lambda = c / fc; bw = 200e6; % 拓扑几何 d_2d = 800; % 水平距离,单位米 h_uav = 120; % 无人机高度,单位米 h_ship = 12; % 船舶天线高度,单位米 v_uav = 20; % 无人机水平速度,单位米/秒 % 天线配置 Ntx = 8; Nty = 8; % 发射UPA每行每列阵元数 Nrx = 16; % 接收ULA阵元数 Npol = 2; % 每个阵元双极化端口数 % 多径簇设置 num_cluster = 6; num_ray = 10; % 每簇内子径数量 % 极化参数 xpd_los_db = 18; % 视距径XPD xpd_nlos_db = 10; % 反射/散射径XPD

载频选28GHz比较合适,是当前毫米波通信研究的高频热点。带宽200MHz够一个高清晰度视频回传链路使用,也方便后面做正交频分复用子载波映射。天线尺寸上用半波长间距,阵面不会太大,符合无人机载荷限制。无人机速度20米每秒大约相当于机动巡航状态,多普勒效应已经比较明显,适合验证模型的时间演进能力。

3.2 空间导向矢量与极化响应函数

空间导向矢量的代码不复杂,但相位公式要写对。这里用ULA和UPA两个函数:

function a = steering_ula(N, phi, theta) % 均匀线阵,阵元沿x轴排列 d = 0.5; % 半波长间距 n = (0:N-1).'; a = exp(1i * 2 * pi * d * n * sin(phi) * cos(theta)); end function a = steering_upa(Nx, Ny, phi, theta) % 均匀面阵,x和y方向间距均为半波长 nx = (0:Nx-1).'; ny = (0:Ny-1).'; phase_x = 2 * pi * 0.5 * nx * sin(phi) * cos(theta); phase_y = 2 * pi * 0.5 * ny * sin(phi) * sin(theta); a = exp(1i * (phase_x + phase_y)); % [Nx*Ny, 1] a = reshape(a, Nx * Ny, 1); end

注意这里方位角和俯仰角的定义要和后面角度参数保持一致,否则模型内部会自相矛盾。极化响应函数我单独写:

function [pvv, pvh, phv, phh] = pol_components(xpd_db) x = 10.^(-xpd_db / 10); pvv = sqrt(1 / (1 + x)); pvh = sqrt(x / (1 + x)) * exp(1i * 2 * pi * rand()); phv = sqrt(x / (1 + x)) * exp(1i * 2 * pi * rand()); phh = sqrt(1 / (1 + x)); end

这个函数保证了每条路径的极化总功率是归一化的,同时交叉极化分量占的比例由XPD决定。这里交叉项使用随机相位是经过实测对比之后确定的:如果省略随机相位,生成的信道会出现明显的极化相关性尖峰,和实际海面测量数据对不上。

3.3 多径叠加与信道系数矩阵组装

有了导向矢量和极化分量,就可以逐条多径累加生成信道。以窄带快照为例:

function H = generate_channel_snapshot(params) Nt = params.Ntx * params.Nty; Nr = params.Nrx; H_vv = zeros(Nr, Nt); H_vh = zeros(Nr, Nt); H_hv = zeros(Nr, Nt); H_hh = zeros(Nr, Nt); for c = 1:params.num_cluster % 每一簇的中心角度和时延,这里用随机生成替代 phi_t = -30 + 60 * rand(); % 离开方位角 theta_t = 60 + 40 * rand(); % 离开俯仰角 phi_r = -20 + 40 * rand(); % 到达方位角 theta_r = 70 + 30 * rand(); % 到达俯仰角 for r = 1:params.num_ray % 子径角度在簇中心附近扰动 d_phi_t = phi_t + 3 * randn(); d_theta_t = theta_t + 3 * randn(); d_phi_r = phi_r + 3 * randn(); d_theta_r = theta_r + 3 * randn(); a_tx = steering_upa(params.Ntx, params.Nty, ... d_phi_t, d_theta_t); a_rx = steering_ula(params.Nrx, d_phi_r, d_theta_r); G = a_rx * a_tx.'; % 空间耦合矩阵 [Nr, Nt] % 子径功率按簇功率均分,并加随机复增益 ray_power = (1 / params.num_ray) * 10^(-c / 4); alpha = sqrt(ray_power) * (randn() + 1i * randn()) / sqrt(2); if c == 1 [pvv, pvh, phv, phh] = ... pol_components(params.xpd_los_db); else [pvv, pvh, phv, phh] = ... pol_components(params.xpd_nlos_db); end H_vv = H_vv + alpha * pvv * G; H_vh = H_vh + alpha * pvh * G; H_hv = H_hv + alpha * phv * G; H_hh = H_hh + alpha * phh * G; end end % 组装完整极化MIMO矩阵 H = [H_vv, H_vh; H_hv, H_hh]; end

这段代码生成了一个窄带快照下的信道矩阵,行对应接收端口,列对应发射端口,维度是(Nrx乘2)乘(Nt乘2)。如果要做宽带正交频分复用仿真,可以在每个子载波上重复这个过程,或者先生成时域冲激响应再做傅里叶变换。时域方式更高效,因为不同子载波之间共享相同的时延和角度结构。

3.4 把无人机移动引入时间维度

窄带快照只是静态链路,无人机运动必须体现在时间序列上。最直接的办法是给每条子径加一个多普勒相位:

% 每条子径的多普勒频移 doppler = (v_uav / lambda) * ... cos(d_phi_r) * sin(d_theta_r); % 第k个快照时,在al里乘上相位项 phase_shift = exp(1i * 2 * pi * doppler * t_k);

当无人机朝接收端方向飞行时,多普勒频移最大;垂直侧飞时,多普勒接近零。实际海上场景海浪运动还会带来低频微多普勒,这部分可以用一个额外的慢变正弦角度叠加到到达角上,不需要单独给每条子径都建模,否则计算量太大。

4. 模型验证:容量、相关性和多普勒谱

模型写完不能直接收工。我一般先做三类验证:极化泄漏是否符合设定、信道容量随信噪比的变化是否合理、多普勒谱是否与运动速度匹配。

4.1 极化泄漏与天线相关性的快速检查

第一个检查很简单:用生成的信道矩阵估计XPD,看它是否落在设定范围附近。比如发射用垂直极化端口,接收的水平极化端口平均功率与垂直极化端口平均功率之比,就是XPD的估计值。

p_cross = mean(abs(H_vh).^2, 'all'); p_co = mean(abs(H_vv).^2, 'all'); xpd_est = 10 * log10(p_co / p_cross);

由于多径衰落和随机相位的影响,估计值不会严格等于设定值,但应该在一个合理的区间内。如果差别超过3dB,要回头检查极化响应函数里的功率归一化和端口顺序。另一个检查是天线空间相关性,计算发射相关矩阵:

R_tx = H' * H / norm(H, 'fro')^2; corr_offdiag = mean(abs(R_tx - diag(diag(R_tx))), 'all');

角度扩展越小时,这个对角线外均值应该越大,符合空间相关性的基本规律。如果相关性几乎为零,说明角度随机范围可能设置得过宽,和海上散射集中在较小角度区的物理特征不符。

4.2 信道容量计算与XPD的关系

极化MIMO的容量验证,最容易看出模型有没有问题。给定信噪比,单用户MIMO容量可以写成:

snr = 10^(20 / 10); C = log2(det(eye(size(H, 1)) + (snr / size(H, 2)) * (H * H')));

这里H按一次信道实现来算,实际要跑几百次取平均,消除随机衰落影响。可以做一个XPD扫描对比:把视距XPD从25dB调到10dB,观察平均容量变化。XPD较高时,两个极化端口相对独立,容量随着信噪比增加的斜率接近理想双流复用;XPD较低时,容量增长速度变缓,说明极化复用性能被泄漏拖累。

如果扫描结果出现“XPD越低容量反而越高”的反常结论,就要注意是不是H矩阵的功率归一化出了问题。信道矩阵总功率会随交叉极化变化,容量计算前最好先把H归一化到平均接收信噪比。

4.3 多普勒谱验证移动性

时间序列生成之后,对某个收发端口组合的信道系数沿时间轴做傅里叶变换,可以看到多普勒谱。最大多普勒频率的理论值是:

f_d_max = v_uav / lambda

代入20米每秒和28GHz,大约是1867Hz。仿真结果里多普勒谱的主瓣边缘应该接近这个值,而且要出现明显的“U形”分布特征,这是经典移动信道里因为多径来向不同导致的频谱扩展。如果频谱完全集中在零频附近,说明多普勒相位项没加对。如果频谱范围远超理论值,则要检查角度生成时是否出现了超出物理范围的方向余弦。

这个验证对无人机通信尤为重要。无人机高机动场景下,信道非平稳性很强,时间序列生成和验证必须一起做,不能只看单快照容量。

5. 参数标定与工程化扩展建议

5.1 用实测数据做轻标定

仿真模型最终要和实测对得上。没有完整信道探测设备时,也可以用简单方法做“轻标定”:在若干距离点测接收功率,拟合路径损耗指数;再比较双极化端口的接收平均功率,估计XPD。这样至少能把大尺度衰落和极化泄漏这两个对系统设计影响最大的参数校准到合理水平。

我在某个沿海试验场景里用这个方法校准过一次。初始模型用的路径损耗指数是2.2,结果实测拟合值接近2.8,说明海上低空链路比自由空间衰减更严重。原因是一部分能量被海面漫散射吸收,并且低空大气折射也有影响。校准之后,容量仿真的结果和实际链路测试的吞吐曲线能基本对上。

5.2 从单链路走向编队与动态平台

单条无人机到船舶链路建模只是第一步。实际应用中经常有多架无人机协同执行任务,这时候要扩展成多输入多输出的干扰信道。比较省力的做法是保留核心信道生成函数,外部增加一个循环:每架无人机对应一组位置和运动参数,分别生成到船舶接收端的信道矩阵,再叠加成上行干扰模型。

船舶平台摇摆这个因素也可以模块化处理。生成信道快照之前,根据当前横摇角和纵摇角给接收阵列方向矢量施加一个旋转矩阵。虽然计算量会增加一些,但能明显提升模型在真实海况下的可信度。要注意的是摇摆带来的信道变化往往是慢变过程,不需要每个快照都重新生成全部多径角度,可以每几十毫秒更新一次平台姿态。

5.3 计算效率与代码组织

极化MIMO信道的矩阵维度不小,如果还要跑宽带子载波和蒙特卡洛统计,计算开销很容易失控。我的经验是分三层组织代码:第一层是参数配置,第二层是信道生成函数,第三层是验证脚本。生成函数里尽量预先计算固定角度网格上的导向矢量,多径角度落在网格附近时直接查表,比每次调用三角函数快很多。

另外,时间序列生成可以采用并行方式。每个快照之间在物理上存在依赖关系,但只要把平台姿态和多普勒相位预先算好,独立生成每个快照再叠加,就可以用并行循环加速。对一套8乘8双极化发射、16单元双极化接收的配置,单次蒙特卡洛仿真可以从几分钟压缩到几十秒,调试效率提升非常明显。

最后说一个我自己的实际体会。复现这类极化信道模型,最花时间的往往不是代码本身,而是确定每个参数的物理边界。XPD设成30dB,双极化MIMO和单极化几乎没区别,容量结果漂亮但不真实;XPD设成3dB,容量看起来高,因为信道矩阵满秩了,可实际波束赋形效率会很差。我的做法是保留一份参数与结果的对照表,每次改参数前先问一句:这个取值在真实海面测试里能不能测到?能测到,就留下;测不到,再好的容量曲线也只是纸面数据。这样写出来的模型,至少能在物理上讲得通。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询