近场2D beamforming Heatmap图

想法

参考论文Beam Focusing for Near-Field Multiuser MIMO Communications,可视化beam focusing效应

在这里插入图片描述

代码

完全不对,狗屁不通。


clc;
clear;

% 网格范围
D = 1; % 整个均匀平面阵列的孔径
lambda = 1e-2; % 波长0.01m,单位:米   30Ghz

N_d = floor(2 * D / lambda); % 垂直方向的阵元数  600
N_e = floor(2 * D / lambda); % 水平方向的阵元数  600
spacing = D / N_d;

x_range = -20:0.25:20; %* spacing - D / 2 ;
y_range = -20:0.25:20; %* spacing - D / 2 ;

% 生成网格四
[X, Y] = meshgrid(x_range, y_range);
% 计算每个点的信号强度
signal_strength = zeros(numel(x_range),numel(y_range));

for x_index = 1:numel(x_range)
    x_b = x_range(x_index);
    for y_index = 1:numel(y_range)
        y_b = y_range(y_index);
        signal_strength(x_index,y_index) = NearFieldFDA2D(x_b,y_b,D,lambda);
        fprintf('测量点的横坐标%g,纵坐标%g\n',x_b,y_b);
    end
end


% 绘制彩色图
figure;
imagesc(x_range, y_range, signal_strength);
title('xy平面近场信号强度图');
xlabel('X轴位置');
ylabel('Y轴位置');
colorbar;  % 添加颜色条

函数

function SignalPower_xbyb = NearFieldFDA2D(x_b, y_b, D, lambda)
% 定义参数和变量
N_d = floor(2 * D / lambda); % 垂直方向的阵元数  600
N_e = floor(2 * D / lambda); % 水平方向的阵元数  600
spacing = D / N_d;
M = 2; % 用户数
b = 2; % Boresight gain参数
% x_b = 5; % 用户 Bob 的 x 坐标
% y_b = 5; % 用户 Bob 的 y 坐标
z_b = 0; % 用户 Bob 的 z 坐标

k = 2 * pi / lambda; % 波数
alpha_c = 1.2;
beta_c = 827.67;


% 生成信道系数
% rho = rand(N_d, N_e); % 元件位置
A_b = zeros(N_d, N_e);
A_w = zeros(N_d, N_e);
s = randn(N_d, N_e); % 模拟发送信号

SignalPower_xbyb = 0;

for i = 1:N_d
    for l = 1:N_e
        % rho(i, l) = 
        p_i_l = [(i - 1) * spacing - D / 2, 0, (l - 1) * spacing - D / 2];
        % p_i_l = [0, (i - 1) * spacing - D / 2, (l - 1) * spacing - D / 2];
        % 计算用户 Bob 的信道系数
        p_b = [x_b, y_b, z_b];
        Theta_i_l_b = calculateTheta(p_i_l, p_b);
        distance_b_il = norm(p_b - p_i_l); % 计算距离 |p_m - p_i_l|
        phase_b_il = exp(-1i * k * distance_b_il); % 计算相位 e^{-j*k*|p_m - p_i_l|}
        A_b(i, l) = sqrt(F(Theta_i_l_b)) * (lambda / (4 * pi * norm(p_b - p_i_l))) * phase_b_il;
        SignalPower_xbyb = SignalPower_xbyb + A_b(i, l);
    end
end

SignalPower_xbyb = norm(SignalPower_xbyb);

end
% 计算辐射函数 F
function F_theta = F(Theta)
    b = 2;  % Boresight gain参数
    if Theta >= 0 && Theta <= pi/2
        F_theta = 2 * (b + 1) * cos(Theta)^b;
    else
        F_theta = 0;
    end
end


% 计算信道方向角Theta
function Theta = calculateTheta(p_i_l, p)
    delta_x = p(1) - p_i_l(1);
    delta_y = p(2) - p_i_l(2);
    delta_z = p(3) - p_i_l(3);
    Theta = atan2(delta_z, sqrt(delta_x^2 + delta_y^2));
end


目前啥样

目前仅仅考虑了所有天线向各个方向等功率发送,也就是目前还没有针对某一个用户的beam focusing,这一点的实现需要后续专门设计优化算法,可以这么理解: 是beamforming矩阵 W \mathbf{W} W的存在让波束聚焦在一个具体的位置,目前代码中仅仿真了近场信道,波束赋形矩阵 W \mathbf{W} W等价于单位阵。

在这里插入图片描述

SVD预编码

如果发射天线是一个均匀线阵(Uniform Planar Array,UPA),并且接收天线数为1,我们可以使用SVD预编码来简化通信,并提高系统性能。在这种情况下,我们将信道矩阵分解为 ( U Σ V H \mathbf{U} \mathbf{\Sigma} \mathbf{V}^H VH),其中 ( U \mathbf{U} U) 包含发射天线的方向信息,而 ( V \mathbf{V} V) 则包含接收天线的方向信息。

以下是一个简单的MATLAB示例代码,说明如何实现这一点:

% 设置信道参数
N_t = 4; % 发射天线数
N_r = 1; % 接收天线数

% 生成随机信道矩阵
H = randn(N_r, N_t);

% 奇异值分解 (SVD)
[U, S, V] = svd(H);

% 选择前 N_s 个奇异值,这里假设 N_s = 1
N_s = 1;
U_s = U(:, 1:N_s);
V_s = V(:, 1:N_s);

% 生成要发送的符号向量
x = [1; -1; 1; -1]; % 假设发送的符号向量

% 预编码
y = H * V_s * x; % 使用预编码矩阵进行预编码

% 打印预编码后的信号
disp('预编码后的信号:');
disp(y);

在这个示例中,我们首先生成了一个随机的信道矩阵 (H),然后进行了奇异值分解以获取 (U)、(\Sigma) 和 (V)。接着,我们选择了前 (N_s) 个奇异值对应的左右奇异向量,并将右奇异向量作为预编码矩阵 (V_s)。最后,我们生成了一个符号向量 (x) 并使用预编码矩阵对其进行预编码,得到发送信号 (y)。

矩阵向量化

将矩阵向量化是指将矩阵中的元素按照某种顺序排列成一个向量。在MATLAB中,可以使用(:)操作符来实现矩阵向量化。这个操作符会按列优先的顺序将矩阵中的元素排列成一个列向量。

例如,假设有一个 3x3 的矩阵 A:

A = [1, 2, 3; 4, 5, 6; 7, 8, 9];

使用(:)操作符,可以将矩阵 A 向量化:

A_vectorized = A(:);

结果将是一个包含矩阵 A 所有元素的列向量:

A_vectorized =

     1
     4
     7
     2
     5
     8
     3
     6
     9

这样,矩阵中的元素按列优先的顺序排列成了一个列向量。

如果想按行优先的顺序进行向量化,可以使用reshape函数:

A_vectorized_row_major = reshape(A.', 1, []);

这将产生一个按行优先的向量。

总的来说,矩阵向量化可以通过(:)操作符或reshape函数来实现,具体取决于你希望的排列顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值