如图, 是在各种教材中经常看到的天线方向图。 上图表示的是当前天线经过波束成形后在空间中 指向 30度方向 (一般考虑的方向是0-180度)。这里解释一下天线方向: 不失一般性的,一个MISO系统的接收信号(简洁起见,省略噪声)可以表示为:
y
=
h
v
x
(1)
\mathbf{y} = \mathbf{h}\mathbf{v}x \tag{1}
y=hvx(1) 那么, 如何把数学建模里的 代表 波束成形向量 的
v
\mathbf{v}
v 与 我们平常所说的 将 天线阵列对准某个方向发射的物理意义对应呢?
正如我们生活中使用手电筒一样, 把手电筒照向某个方向, 其实就对应于最后某个方向是亮的, 而其他方向是暗的。 波束成形也是如此。 让波束成形后的天线阵列所谓对准某一方向, 指的就是在该方向上的信噪比显著地高于其他方向。
由于噪声的功率是一定的, 信噪比其实就是(1)中 y \mathbf{y} y的能量。 也就是: P = y H y = ∣ x ∣ 2 ∣ v H h H h v P=\mathbf{y}^H\mathbf{y}=|x|^2|\mathbf{v}^H\mathbf{h}^H\mathbf{h}\mathbf{v} P=yHy=∣x∣2∣vHhHhv
由于 ∣ x ∣ 2 |x|^2 ∣x∣2也是相同的, 因此对于同一波束成形的天线阵列, 不同方向的信噪比就取决于 ∣ h v ∣ 2 |\mathbf{h}\mathbf{v}|^2 ∣hv∣2. 这里先类比一下, 方便大家理解物理意义:
手电筒波束成形改变手电筒的方向改变天线阵列的波束成形向量将手电筒照向某个方向通过波束成形后天线阵列对准某个方向发送信号某个方向的亮度当前波束成形下某个方向的信噪比将有限的能量聚焦于想看的方向将有限的发送功率对准用户所在的方向明白了物理意义, 现在我们来看如何判断当前的某个 v \mathbf{v} v,对应于朝向哪个方向发射。 首先, 根据MISO信道的建模, 我们有, 对于某个方向 ϕ \phi ϕ, 其对应的归一化ULA阵列信道为: h U L A ( ϕ ) = 1 N [ 1 , e − j π cos ( ϕ ) , … , e − j π ( N − 1 ) cos ( ϕ ) ] \mathbf{h}_{\mathrm{ULA}}(\phi)=\frac{1}{\sqrt{N}}\left[1, e^{-j \pi \cos(\phi)}, \ldots, e^{-j \pi(N-1) \cos (\phi)}\right] hULA(ϕ)=N 1[1,e−jπcos(ϕ),…,e−jπ(N−1)cos(ϕ)] 将不同方向的信道络成一个大矩阵 H \mathbf{H} H, 其每一行对应于一个方向的 h U L A ( ϕ ) \mathbf{h}_{\mathrm{ULA}}(\phi) hULA(ϕ)信道, 那么我们只需要计算 v H H H H v \mathbf{v}^H\mathbf{H}^H\mathbf{H}\mathbf{v} vHHHHv, 就能得到一个列向量, 其每一项代表了当前波束成形向量 v \mathbf{v} v在这个方向上的能量大小。
通过天线方向图和Matlab实例说明接下来通过实例来说明: 令 v = 1 N [ 1 , e j π cos ( θ ) , … , e j π ( N − 1 ) cos ( θ ) ] T \mathbf{v}=\frac{1}{\sqrt{N}}\left[1, e^{j \pi \cos(\theta)}, \ldots, e^{j \pi(N-1) \cos (\theta)}\right]^T v=N 1[1,ejπcos(θ),…,ejπ(N−1)cos(θ)]T 这其实是将天线阵列对准 θ \theta θ 方向发送的波束成形向量。 我们来验证他就是对准了 θ \theta θ 方向, 比如我们令其为 空间30度方向。
N = 16;
idx = (0 : N-1)';
angle_set = (1 : 1 : 360) / 180 * pi;
Hset = exp(1j * pi * idx * cos(angle_set));
theta = 30;
x = exp(1j * pi * idx * cos(theta / 180 * pi));
r = Hset' * x;
polarplot(angle_set, abs(r))
运行后, 就能得到文章开头的那张图了。 这是一个极坐标图, 可以清楚的看到, 在30度方向上是能量最大的, 而在其他绝大部分方向上, 能量为0。这也就是我们一开始说的, 通过有效的波束成形, 可以将能量集中, 让天线阵列对准某个方向发送。
也可以根据自己的画图需求改变一下坐标,比如将上面代码第三行替换为
angle_set = (0 : 0.01 : 180) / 180 * pi;
就是画出0~180度的响应, 并且将分辨率提升至0.01度。 效果如图: 我们可以试着改变
N
N
N, 即天线数的大小。 如
N = 64;
可以明显的看到,波束更窄了, 能量更集中了。 这也是为什么天线数越多,通信性能越好的原因, 指向性也越为精准。
UPA的话就涉及两个角度了 仰角
ϕ
\phi
ϕ 和 水平角
θ
\theta
θ。 因此很难用二维的图进行绘制。 这里给出代码, 细节不再赘述, 和ULA的方法类似: 效果图:
主函数main.m
clear
M = UPA_code3(16, 32);
phi = -1 : 0.01 : 1;
theta = -1 : 0.01 : 1;
[aa, bb] = meshgrid(phi, theta);
Aset = []';
G = zeros(512, 1);
G(256+11) = 1;
s = M * G;
for i = 1 : length(phi)
a = phi(i);
for j = 1 : length(theta)
tmp = acos(a);
b = theta(j) / sin(tmp);
ar = UPA_arrayresponse2(16,32, acos(b), acos(a));
C(j,i) = abs(s' * ar);
end
end
surf(aa, bb, C)
调用的两个函数文件:
- UPA_code3.m
function [Aset] = UPA_code3(P,Q)
% P, Q: rows and columns of UPA
% theta, phi: AODs
Aset = [];
for n = 0 : 1 / P * pi : (P-1)/P*pi
for m = 0 : 1 / Q * pi : (Q-1)/Q*pi
A = zeros(P, Q);
for p = 1 : P
for q = 1 : Q
A(p, q) = exp(1j*pi*(q-1)*cos(m) * sin(n)+1j*pi*(p-1)*cos(n));
end
end
a = A(:);
Aset = [Aset, a];
end
end
- UPA_arrayresponse2.m
function [A] = UPA_arrayresponse2(P,Q, theta, phi)
% P, Q: rows and columns of UPA
% theta, phi: AODs
A = zeros(P, Q);
for p = 1 : P
for q = 1 : Q
A(p, q) = exp(1j*pi*(q-1)*sin(phi)*cos(theta)+1j*pi*(p-1)*cos(phi));
end
end
A = A(:);
相关阅读
- 专栏: 混合波束成形
- 专栏: 智能反射面
- 混合波束成形|基础:深入浅出5G,毫米波,大规模MIMO与波束赋形
- 混合波束成形|进阶:深入浅出混合波束赋形
- 混合波束成形| 基于坐标迭代更新法的混合波束赋形算法
- 混合波束成形| 基于正交匹配追踪(Orthogonal Matching Pursuit)法的混合波束赋形算法
- 混合波束成形| 论文:基于MMSE准则的混合波束成形算法
- 混合波束成形| 通过天线空间方向图理解波束成形的物理意义
- 混合波束成形| 基于深度学习的大规模天线阵列混合波束成形设计
- 混合波束成形| MIMO系统的DFT码本
- 混合波束成形| HBF系统的克拉美罗下界