一、搭建5g异构蜂窝网络通信系统
首先需要设置一个宏蜂窝基站,3 个小蜂窝基站。宏基站的位置设置在坐标 原点,设置小基站的分布半径为 r=200,小基站设置分布在一个半径为 200 的圆 周上,每个小基站的角度间隔 120 度,最后根据小基站的角度,利用极坐标与直角坐标的关系如下
求得小基站在坐标系的直角坐标。求得宏基站和小基站的坐标后,此时需要设置在此系统中用户的数量为 50 个用户,用户的的坐标可以通过下面的公式求 出
其中 rand 是一个函数,生成一(0,1)的随机数,num 是设置的用户数量,r 是小基站的分布半径。求得宏基站、小基站与用户的坐标之后便可利用 MATLAB 构建出一个最基本的 5G 异构蜂窝网络系统

代码如下:
% 清空环境
clc;
clear;
% 设置宏基站的中心位置
macro_bs_center = [0, 0]; % 宏基站放在坐标原点
% 设定小基站的数量
num_small_cells = 3;
% 随机生成小基站的位置(在一定范围内围绕宏基站)
small_cell_radius = 200; % 小基站分布半径
theta = linspace(0, 2*pi, num_small_cells+1); % 均匀分布
small_bs_positions = small_cell_radius * [cos(theta(1:end-1))', sin(theta(1:end-1))'];
% 绘制宏基站
figure;
plot(macro_bs_center(1), macro_bs_center(2), 'rp', 'MarkerSize', 12,
'MarkerFaceColor', 'r');
hold on;
text(macro_bs_center(1)+10, macro_bs_center(2), 'Macro BS', 'FontSize', 10);
% 绘制小基站
plot(small_bs_positions(:,1), small_bs_positions(:,2), 'bo', 'MarkerSize', 10,
'MarkerFaceColor', 'b');
for i = 1:num_small_cells
11
text(small_bs_positions(i,1)+10, small_bs_positions(i,2), ['Small BS ', num2str(i)],
'FontSize', 10);
end
% 设定用户数量
num_users=30;
% num_users=30;
% 生成用户位置,用户分布范围覆盖整个场景
user_x = (rand(num_users, 1) - 0.5) * 2 * (small_cell_radius + 100); % 用户分布
在小基站和宏基站覆盖的区域
user_y = (rand(num_users, 1) - 0.5) .* 2 * (small_cell_radius + 100);
user_positions = [user_x, user_y];
% 绘制用户
plot(user_positions(:,1), user_positions(:,2), 'k.', 'MarkerSize', 8);
% 绘制覆盖区域的圆(假设每个基站的覆盖范围是圆形的)
coverage_radius_macro = 250; % 宏基站的覆盖半径
coverage_radius_small = 100; % 小基站的覆盖半径
% % 绘制宏基站的覆盖范围
% viscircles(macro_bs_center, coverage_radius_macro, 'LineStyle', '--', 'LineWidth', 0.5);
%
% % 绘制每个小基站的覆盖范围
% for i = 1:num_small_cells
% viscircles(small_bs_positions(i,:), coverage_radius_small, 'LineStyle', '--',
'LineWidth', 0.5);
% end
% 设置图形属性
axis equal;
xlabel('X Position (meters)');
ylabel('Y Position (meters)');
title('Macrocell and Small-Cell Base Station User Distribution');
grid on;
hold off;
二、计算基站与用户的SINR值以及用户的下载速率
本问需要在第一问构建 5G 通信系统继续求解,首先需要设置基站和用户的 用户参数。首先需要设置宏基站和小基站的发射功率,宏基站的发射功率 (P_T_mcro)为 43dbm,小基站的发射功率(P_T_small)为 33dbm,路径损耗指数 n 设为 3.5,参考路径损耗(PL_0)设置为 30dbm,噪声功率(No)设置为-104dbm, 信道带宽(B)设置为 10MHZ,基于以上设置的基本参数结合第一问建立的模型, 可以计算机出宏基站与用户的距离,其计算公式如下
其中 dmro u 代表宏基站与用户的距离, x1为第一问设置的宏基站的横坐标, y1为第一问设置的宏基站的纵坐标, x2为用户的横坐标, y2 为用户的纵坐标。类似的用户与小基站的距离计算公式如下:
上式中, dsmall u 小基站与用户的距离, x3 是小基站的横坐标, y3 是小基站的纵坐标。计算出每个基站与用户的距离之后,利用路径损耗公式算出每个基站的发射功率经过路径传播损耗之后到达用户的功率,其宏基站的路径损耗如下:
小基站的路径损耗如下:
在用户接收端,用户接收到宏基站的功率计算公式如下:
在用户接收端,用户接收到小基站的功率计算公式如下:
计算出每个用户接收到基站的功率之后。需要找到每个用户接收到信号最强的基 站,在此模型中,通过比较每个用户与小基站的距离和宏基站的距离,设置用户 与离他最近的基站匹配。如果用户与宏基站连接则设置一个标志位,此外在求解 过程中,不仅需要考虑到噪声的影响,还需要考虑到了其他基站的干扰。 如果用户连接到宏基站,这需要考虑小基站的干扰,其小基站的干扰的计算公式 如下:
式中 P _ r _ small1、 P _ r _ small2 、 P _ r _ small3 分别表示每个小基站对宏基站的 影响,其次还要考虑到噪声的影响,最终用户连接到宏基站所受到总的干扰的计 算公式如下:
则用户连接到宏基站的信噪比计算公式如下:
利用下面公式转换为 DB 的形式:
再利用香农公式求解出用户的下载速率
如果用户连接到小基站求解方法也类似,基站干扰需要考虑到其他小基站与宏基 站的干扰,其余的求解步骤类似,最后通过 MTALB 求得每个用户的信噪比和下载速率下图所示
求解代码如下:
P_tx_macro = 43; % 宏基站发射功率,dBm
P_tx_small = 33; % 小基站发射功率,dBm
n = 3.5; % 路径损耗指数
PL_0 = 30; % 参考路径损耗,dB
% 噪声功率
noise_power = -104; % 噪声功率,dBm
% 信道带宽
B = 10e6; % 带宽,Hz (10 MHz)
% 计算基站到用户的距离
distances_macro = sqrt((user_positions(:,1) - macro_bs_center(1)).^2 + ... (user_positions(:,2) - macro_bs_center(2)).^2);
distances_small = zeros(num_users, num_small_cells);
for i = 1:num_small_cells
distances_small(:,i) = sqrt((user_positions(:,1) - small_bs_positions(i,1)).^2 + ... (user_positions(:,2) - small_bs_positions(i,2)).^2);
end
% 计算路径损耗 (宏基站与小基站)
PL_macro = PL_0 + 10 * n * log10(distances_macro); % 宏基站到用户的路径损
耗
PL_small = PL_0 + 10 * n * log10(distances_small); % 小基站到用户的路径损
耗
% 计算接收到的信号功率
P_rx_macro = P_tx_macro - PL_macro; % 宏基站到用户的接收功率
P_rx_small = P_tx_small - PL_small; % 小基站到用户的接收功率
% 对每个用户,找到接收到信号最强的基站
[best_P_rx, best_bs_idx] = max([P_rx_macro, P_rx_small], [], 2);
% 计算 SINR
SINR = zeros(num_users, 1);
for i = 1:num_users
if best_bs_idx(i) == 1 % 该用户连接宏基站
signal_power = P_rx_macro(i);
interference_power = sum(10^(P_rx_small(i,:) / 10)); % 小基站产生的干扰
else %该用户连接小基站
13
14
signal_power = P_rx_small(i, best_bs_idx(i)-1);
interference_power = 10^(P_rx_macro(i) / 10) + sum(10.^(P_rx_small(i, [1:best_bs_idx(i)-1, best_bs_idx(i):num_small_cells]) / 10));
end
% 计算总干扰加噪声
SINR(i) = 10^(signal_power / 10) / (interference_power + 10^(noise_power / 10));
end
% 将 SINR 转换为 dB
SINR_dB = 10 * log10(SINR);
% 计算每个用户的下载速率
R = B * log2(1 + SINR);
% 显示用户的 SINR 和下载速率结果
for i=1:30
fprintf('USER%d SINR=%.2fdB R=%.2fMbps\n', i, SINR_dB(i), R(i)/1e6);
end
三、网络资源的分配
在本问中利用最大信噪比关联基站,求得不同用户数量下,求得时延随着迭代次数的变化。
求得结果如下图:
代码由于权限问题,第三问只放部分代码的截图:
声明:作者水平有限,若有错误请在评论区或者私信作者指出。