前面我们推导的波束指向角公式:
Δ ϕ = 2 π d λ ⋅ sin ( θ ) \Delta\phi = \frac{2\pi d}{\lambda} \cdot \sin(\theta) Δϕ=λ2πd⋅sin(θ)
**基于一维线性阵列(Uniform Linear Array,简称 ULA)**的假设!
一、这个公式成立的前提假设:
假设条件 | 说明 |
---|---|
线性阵列 | 所有天线阵元在一条直线上均匀排列,阵元间距为 d d d |
波束扫描方向限制在二维平面 | 通常为水平面(azimuth)或垂直面(elevation)一个方向 |
远场假设(Fraunhofer region) | 被探测目标足够远,入射波认为是平面波(这通常在 > 2D²/λ 的距离满足) |
波形一致 | 所有阵元发射频率相同,仅相位不同 |
静态场景 | 没有目标运动时的多普勒频移影响波束形成 |
二、阵列扩展到二维(平面阵列)时怎么办?
一旦你使用的是二维天线阵列(如 Nx × Ny 的矩阵),波束控制就不再是简单的一个角度了,而是:
波束方向 = ( θ azimuth , θ elevation ) \text{波束方向} = (\theta_{\text{azimuth}}, \theta_{\text{elevation}}) 波束方向=(θazimuth,θelevation)
在二维阵列中,必须控制两个方向的相位差,即:
- 水平方向阵元间的相位差 → 控制方位角(Azimuth)
- 垂直方向阵元间的相位差 → 控制俯仰角(Elevation)
三、二维阵列的波束形成公式(简化)
设阵列在 X-Y 平面上,入射方向是 θ \theta θ(俯仰)和 ϕ \phi ϕ(方位),则第 ( m , n ) (m,n) (m,n) 个阵元的相位应该是:
ϕ m , n = 2 π d λ ⋅ ( m ⋅ sin θ ⋅ cos ϕ + n ⋅ sin θ ⋅ sin ϕ ) \phi_{m,n} = \frac{2\pi d}{\lambda} \cdot (m \cdot \sin\theta \cdot \cos\phi + n \cdot \sin\theta \cdot \sin\phi) ϕm,n=λ2πd⋅(m⋅sinθ⋅cosϕ+n⋅sinθ⋅sinϕ)
变量 | 含义 |
---|---|
m , n m, n m,n | 阵列在X和Y方向上的索引 |
d d d | 阵元间距 |
θ \theta θ | 俯仰角(Elevation) |
ϕ \phi ϕ | 方位角(Azimuth) |
这允许你在三维空间内任意指向波束!
四、实际雷达中阵列布局例子
阵列类型 | 特点 | 示例 |
---|---|---|
一维线阵(ULA) | 波束控制简单,只能扫描一个平面 | 常用于成本敏感雷达,如车前毫米波雷达 |
二维平面阵(UPA) | 可在二维平面内扫描,支持3D定位 | 高端车载雷达 / 空天雷达 / 5G基站天线阵列 |
三维立体阵 | 可用于全向覆盖,高复杂度 | 飞机机头/雷达罩(如美军AN/APG-81) |
五、总结对比
类型 | 控制维度 | 可扫描角度 | 实现复杂度 |
---|---|---|---|
一维线性阵列 | 1D(Azimuth 或 Elevation) | 单方向波束扫描 | ⭐(简单) |
二维阵列 | 2D(Azimuth + Elevation) | 全向波束扫描 | ⭐⭐⭐(中等) |
三维体阵 | 3D(任意方向) | 球面波束可定向 | ⭐⭐⭐⭐(复杂) |
六、二维波束形成图像化模型(Python):
8×8二维天线阵列在空间中的波束形成图
上图展示的是一个 8×8 二维天线阵列在空间中的波束形成图。
- 横轴是方位角 φ(Azimuth),从 0° 到 360°;
- 纵轴是俯仰角 θ(Elevation),从 0°(正上方)到 90°(地平面);
- 波束主瓣指向了我们设定的方向:(θ=50°, φ=45°);
- 主瓣最强(0 dB),其余方向出现副瓣(sidelobes);
- 已将 -40dB 以下部分截断,方便观察主瓣形状。
这个图展示了电子波束通过阵列干涉在空间中聚焦到一个方向的物理现象。
图像化模型展示的Python源代码:
import numpy as np
import matplotlib.pyplot as plt
# 常量定义
wavelength = 0.01 # 波长 (单位:米),对应频率30GHz(毫米波)
d = wavelength / 2 # 阵元间距,常设为 λ/2
k = 2 * np.pi / wavelength # 波数
# 阵列规模(二维)
M = 8 # X方向阵元数
N = 8 # Y方向阵元数
# 波束方向设置(目标指向角)
theta_target = 70 * np.pi / 180 # elevation
phi_target = 45 * np.pi / 180 # azimuth
# 空间角度网格
theta = np.linspace(0, np.pi / 2, 181) # 0 to 90°
phi = np.linspace(0, 2 * np.pi, 360) # 0 to 360°
theta_grid, phi_grid = np.meshgrid(theta, phi)
# 计算方向向量 u = sin(theta) * cos(phi), v = sin(theta) * sin(phi)
ux = np.sin(theta_grid) * np.cos(phi_grid)
uy = np.sin(theta_grid) * np.sin(phi_grid)
# 波束形成函数(Array Factor)
AF = np.zeros_like(ux, dtype=np.complex128)
for m in range(M):
for n in range(N):
phase_shift = k * d * (m * (ux - np.sin(theta_target) * np.cos(phi_target)) +
n * (uy - np.sin(theta_target) * np.sin(phi_target)))
AF += np.exp(1j * phase_shift)
# 归一化功率谱
AF_magnitude = np.abs(AF)
AF_dB = 20 * np.log10(AF_magnitude / np.max(AF_magnitude))
# 仅显示主瓣附近部分(抑制-40dB以下)
AF_dB_clipped = np.clip(AF_dB, -40, None)
# 绘图
fig = plt.figure(figsize=(10, 6))
ax = fig.add_subplot(111, projection='polar')
c = ax.contourf(phi_grid, theta_grid * 180 / np.pi, AF_dB_clipped, levels=40, cmap='viridis')
plt.title("2D Beam Pattern (M=8, N=8), Beam Pointing at (θ=30°, φ=45°)")
fig.colorbar(c, ax=ax, label='Relative Gain (dB)')
plt.show()