3D-MIMO信道模型的理论简介与MATLAB仿真分析
3D-MIMO(三维多输入多输出)是传统2D-MIMO的扩展,区别在于将天线阵列的维度从水平面拓展到垂直面,同时考虑电磁波在方位角(Azimuth Angle)和俯仰角(Elevation Angle)两个维度的传播特性。相比2D-MIMO,3D-MIMO能够利用垂直维度的波束赋形实现用户的精准区分,大幅提升频谱效率和系统容量,是5G/6G移动通信的核心技术之一。3D-MIMO信道模型的核心目标是准确描述电磁波从发射端(BS,基站)到接收端(UE,用户终端)的传播过程,包括路径损耗、阴影衰落、多径衰落(含角度域特性)等关键要素。
1.3D-MIMO信道建模概述
首先假设:
1.电磁波传播分为视距(LOS) 和非视距(NLOS) 两种场景;
2.多径分量(MPC)的到达 / 离开角度服从特定的概率分布(如均匀分布、拉普拉斯分布);
3.信道的时变特性由用户移动导致的多普勒频移描述;
4.天线阵列在垂直和水平维度均为均匀线性阵列(ULA)或均匀平面阵列(UPA)。
3D-MIMO信道矩阵可分解为:

其中:

2.3D-MIMO信道模型实现步骤
确定系统参数与场景配置
首先定义3D-MIMO系统的基础参数,包括:
发射端(基站)天线配置:水平天线数NT,x,垂直天线数NT,z,总发射天线数NT=NT,x×NT,z;
接收端(用户)天线配置:水平天线数NR,x,垂直天线数NR,z,总接收天线数NR=NR,x×NR,z;
载波频率fc(如3.5GHz,对应波长λ=c/fc,c=3×108m/s);
天线间距:水平间距dx=λ/2,垂直间距dz=λ/2(工程常用值);
场景参数:基站高度hB(如30m),用户高度hU(如1.5m),基站与用户的水平距离d(如100m);
信道参数:簇数Ncl(如10),每簇射线数Nray(如20),LOS/NLOS场景标识。
路径损耗计算
路径损耗描述电磁波传播的平均衰减,3GPP 38.901标准中3D信道的路径损耗公式分LOS和NLOS场景:
1.LOS场景路径损耗

2.NLOS场景路径损耗

3.阴影衰落计算
阴影衰落描述建筑物、地形等造成的慢衰落,服从高斯分布:

4.角度域参数生成(方位角+俯仰角)
3D-MIMO的核心是角度域特性,需生成每个簇-射线的到达角(AOA)和离开角(AOD):
方位角:方位角范围为[0,2π),LOS场景下主径的方位角集中在直射方向,NLOS场景下服从均匀分布或拉普拉斯分布:

俯仰角:俯仰角范围为[0,π/2)(向上为正),计算公式:

5.阵列响应向量计算
阵列响应向量描述天线阵列对不同角度入射波的响应,以基站侧均匀平面阵列(UPA)为例(接收端同理):

其中:

6.多径复增益计算
每个簇-射线的复增益αc,r由小尺度衰落(瑞利/莱斯衰落)决定:

7.信道矩阵合成
结合上述所有参数,合成最终的3D-MIMO信道矩阵:

3.MATLAB仿真
clear; clc; close all;
rng(2026);
%% ====================== 1. 系统参数配置 ======================
% 基础参数
fc = 3.5e9; % 载波频率(3.5GHz)
c = 3e8; % 光速(m/s)
lambda = c/fc; % 波长(m)
d_x = lambda/2; % 水平天线间距(m)
d_z = lambda/2; % 垂直天线间距(m)
% 天线配置(基站BS:发射端;用户UE:接收端)
N_Tx = 8; N_Tz = 4; % 基站水平/垂直天线数
N_T = N_Tx * N_Tz; % 总发射天线数
N_Rx = 2; N_Rz = 2; % 用户水平/垂直天线数
N_R = N_Rx * N_Rz; % 总接收天线数
% 场景参数
h_B = 30; % 基站高度(m)
h_U = 1.5; % 用户高度(m)
d = 100; % 基站-用户水平距离(m)
N_cl = 10; % 簇数
N_ray = 20; % 每簇射线数
K = 10; % 莱斯因子(dB),LOS场景
SNR_dB = 0:5:30; % 信噪比范围(dB)
% 场景标识(0=NLOS,1=LOS)
scenario = [0, 1]; % 同时仿真NLOS和LOS场景
%% ====================== 2. 路径损耗与阴影衰落计算 ======================
% 断点距离
d_BP = (4 * pi * h_B * h_U) / lambda;
% LOS路径损耗(dB)
PL_LOS = 22*log10(d) + 40*log10(1/lambda) + 20*log10(sqrt((4*pi*h_B*h_U/lambda)^2 + d^2)) - 9*log10(1 + d/d_BP);
% NLOS路径损耗(dB)
PL_NLOS = 32.4 + 20*log10(d) + 20*log10(fc/1000) + 0.22*(d/1000)^0.8*(h_B - 1.5) + 18.3*log10(h_B/1.5);
% 路径损耗线性值
L_PL_LOS = 10^(-PL_LOS/10);
L_PL_NLOS = 10^(-PL_NLOS/10);
% 阴影衰落(高斯分布)
SF_LOS = normrnd(0, 4); % LOS:sigma=4dB
SF_NLOS = normrnd(0, 8); % NLOS:sigma=8dB
L_SF_LOS = 10^(-SF_LOS/10);
L_SF_NLOS = 10^(-SF_NLOS/10);
%% ====================== 3. 角度生成(方位角+俯仰角) ======================
% 初始化角度矩阵(弧度)
theta_AOD = zeros(N_cl, N_ray); % 发射端方位角AOD
phi_AOD = zeros(N_cl, N_ray); % 发射端俯仰角AOD
theta_AOA = zeros(N_cl, N_ray); % 接收端方位角AOA
phi_AOA = zeros(N_cl, N_ray); % 接收端俯仰角AOA
% LOS场景角度均值(弧度)
theta_mean_LOS = pi/4; % 方位角均值45度
phi_mean_LOS = atan((h_B - h_U)/d); % 俯仰角均值
% 生成角度
for c = 1:N_cl
for r = 1:N_ray
% 方位角(LOS:拉普拉斯分布;NLOS:均匀分布)
theta_AOD(c,r) = theta_mean_LOS + laprnd(0, deg2rad(5)); % 5度标准差
theta_AOA(c,r) = theta_mean_LOS + laprnd(0, deg2rad(5));
% 俯仰角
phi_AOD(c,r) = phi_mean_LOS + laprnd(0, deg2rad(3)); % 3度标准差
phi_AOA(c,r) = phi_mean_LOS + laprnd(0, deg2rad(3));
% 角度范围限制(0~pi/2)
phi_AOD(c,r) = max(0, min(pi/2, phi_AOD(c,r)));
phi_AOA(c,r) = max(0, min(pi/2, phi_AOA(c,r)));
end
end
%% ====================== 4. 阵列响应向量生成 ======================
% 生成发射端阵列响应矩阵(N_T x (N_cl*N_ray))
A_T = zeros(N_T, N_cl*N_ray);
% 生成接收端阵列响应矩阵(N_R x (N_cl*N_ray))
A_R = zeros(N_R, N_cl*N_ray);
for c = 1:N_cl
for r = 1:N_ray
idx = (c-1)*N_ray + r; % 簇-射线索引
% 发射端UPA阵列响应向量
a_T = zeros(N_T, 1);
for i = 1:N_Tx % 水平天线索引
for k = 1:N_Tz % 垂直天线索引
n = (k-1)*N_Tx + i; % 天线总索引
arg = 2*pi*(d_x/lambda*(i-1)*sin(phi_AOD(c,r))*cos(theta_AOD(c,r)) + ...
d_z/lambda*(k-1)*sin(phi_AOD(c,r))*sin(theta_AOD(c,r)));
a_T(n) = exp(1j*arg)/sqrt(N_T);
end
end
A_T(:, idx) = a_T;
% 接收端UPA阵列响应向量
a_R = zeros(N_R, 1);
for m = 1:N_Rx % 水平天线索引
for n = 1:N_Rz % 垂直天线索引
p = (n-1)*N_Rx + m; % 天线总索引
arg = 2*pi*(d_x/lambda*(m-1)*sin(phi_AOA(c,r))*cos(theta_AOA(c,r)) + ...
d_z/lambda*(n-1)*sin(phi_AOA(c,r))*sin(theta_AOA(c,r)));
a_R(p) = exp(1j*arg)/sqrt(N_R);
end
end
A_R(:, idx) = a_R;
end
end
%% ====================== 5. 多径复增益生成 ======================
% LOS场景:莱斯衰落
alpha_LOS = sqrt(K/(K+1)) * (1 + 1j*0) + sqrt(1/(K+1)) * (randn(N_cl*N_ray,1) + 1j*randn(N_cl*N_ray,1))/sqrt(2);
% NLOS场景:瑞利衰落
alpha_NLOS = (randn(N_cl*N_ray,1) + 1j*randn(N_cl*N_ray,1))/sqrt(2);
%% ====================== 6. 信道矩阵合成 ======================
% LOS信道矩阵
H_LOS = sqrt(L_PL_LOS * L_SF_LOS / (N_cl*N_ray)) * A_R * diag(alpha_LOS) * A_T';
% NLOS信道矩阵
H_NLOS = sqrt(L_PL_NLOS * L_SF_NLOS / (N_cl*N_ray)) * A_R * diag(alpha_NLOS) * A_T';
%% ====================== 7. 信道容量计算 ======================
C_LOS = zeros(size(SNR_dB)); % LOS场景容量
C_NLOS = zeros(size(SNR_dB)); % NLOS场景容量
for i = 1:length(SNR_dB)
rho = 10^(SNR_dB(i)/10); % 信噪比线性值
% LOS容量
C_LOS(i) = log2(det(eye(N_R) + (rho/N_T) * H_LOS * H_LOS'));
% NLOS容量
C_NLOS(i) = log2(det(eye(N_R) + (rho/N_T) * H_NLOS * H_NLOS'));
end
%% ====================== 8. 波束赋形增益计算 ======================
% 最优波束成形向量(基于SVD)
[U_LOS, S_LOS, V_LOS] = svd(H_LOS);
w_opt_LOS = U_LOS(:,1); % 接收最优向量
v_opt_LOS = V_LOS(:,1); % 发射最优向量
G_BF_LOS = abs(w_opt_LOS' * H_LOS * v_opt_LOS)^2 / trace(H_LOS * H_LOS') * N_T;
[U_NLOS, S_NLOS, V_NLOS] = svd(H_NLOS);
w_opt_NLOS = U_NLOS(:,1);
v_opt_NLOS = V_NLOS(:,1);
G_BF_NLOS = abs(w_opt_NLOS' * H_NLOS * v_opt_NLOS)^2 / trace(H_NLOS * H_NLOS') * N_T;
%% ====================== 9. 仿真结果可视化 ======================
figure('Position', [100, 100, 1200, 800]);
% 子图1:信道矩阵幅度分布(LOS vs NLOS)
subplot(2,2,1);
imagesc(abs(H_LOS));
title('LOS场景信道矩阵幅度');
xlabel('发射天线索引');
ylabel('接收天线索引');
colorbar;
colormap(parula);
subplot(2,2,2);
imagesc(abs(H_NLOS));
title('NLOS场景信道矩阵幅度');
xlabel('发射天线索引');
ylabel('接收天线索引');
colorbar;
colormap(parula);
% 子图2:角度分布(方位角+俯仰角)
subplot(2,2,3);
histogram(rad2deg(theta_AOD(:)), 10);
hold on;
histogram(rad2deg(phi_AOD(:)), 10);
title('AOD角度分布(度)');
xlabel('角度');
ylabel('频次');
legend('方位角','俯仰角');
grid on;
% 子图4:波束赋形增益对比
subplot(2,2,4);
bar([G_BF_LOS, G_BF_NLOS]);
title('波束赋形增益对比');
xlabel('场景');
ylabel('增益 (dB)');
xticklabels({'LOS','NLOS'});
grid on;
% 保存仿真图
saveas(gcf, '3D-MIMO信道仿真结果.png');
%% ====================== 辅助函数:拉普拉斯分布生成 ======================
function y = laprnd(mu, sigma)
% 生成拉普拉斯分布随机数
% mu:均值,sigma:尺度参数
u = rand(size(mu)) - 0.5;
y = mu - sigma * sign(u) .* log(1 - 2*abs(u));
end
测试结果如下:

图1,图2为信道矩阵幅度分布:LOS/NLOS场景下信道矩阵的幅度差异(LOS场景因直射径存在,幅度分布更集中);
图3为AOD角度分布:方位角和俯仰角的统计分布特性,验证角度生成的合理性;
图4为波束赋形增益对比:LOS场景的波束赋形增益更高(直射径增强了波束指向性);
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)