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场景的波束赋形增益更高(直射径增强了波束指向性);

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐