3. 波束指向角度到阵元相位差的转换
任务定义
本案例完成相控阵天线中“波束指向角 → 阵元间相位差”的数值转换。给定工作频率 f、阵元间距 d、波束指向角 θ₀(相对法线方向),计算相邻阵元间的理论相位差 Δφ,并进一步生成各阵元相对参考阵元的实际相位值,供后续移相器量化或波控码计算使用。
数学模型
对于均匀线阵,相邻阵元间的空间延迟对应的相位差为:
Δφ = (2π · d · sinθ₀) / λ
其中 λ = c / f 为波长,c = 3×10⁸ m/s。第 n 个阵元(n = 0, 1, …, N-1)相对第 0 号参考阵元的相位为:
φₙ = n · Δφ
工程中通常将相位折算到 (-π, π] 区间,便于后续移相器查表。
代码实现
import numpy as np
def beam_steering_phase(freq_hz, d_m, theta0_deg, n_elements):
"""
计算均匀线阵波束指向角对应的阵元相位差。
参数:
freq_hz : 工作频率 (Hz)
d_m : 阵元间距 (m)
theta0_deg : 波束指向角 (度),相对法线方向
n_elements : 阵元数量
返回:
delta_phi_rad : 相邻阵元相位差 (弧度)
phases_rad : 各阵元相对0号阵元的相位 (弧度,折算到(-pi, pi])
"""
c = 3e8 # 光速 m/s
lam = c / freq_hz
theta0 = np.deg2rad(theta0_deg)
# 相邻阵元相位差
delta_phi = 2 * np.pi * d_m * np.sin(theta0) / lam
# 各阵元相位
n = np.arange(n_elements)
phases = n * delta_phi
# 折算到 (-pi, pi]
phases_wrapped = (phases + np.pi) % (2 * np.pi) - np.pi
return delta_phi, phases_wrapped
# 示例:X波段 10 GHz,半波长间距,8阵元,指向30°
if __name__ == "__main__":
f = 10e9 # 10 GHz
d = 0.015 # 约半波长 (0.5 * 0.03m)
theta = 30.0 # 30度
N = 8
dphi, ph = beam_steering_phase(f, d, theta, N)
print(f"波长: {3e8/f:.4f} m")
print(f"相邻阵元相位差: {dphi:.4f} rad ({np.rad2deg(dphi):.2f}°)")
print("各阵元相位 (rad):")
for i, p in enumerate(ph):
print(f" 阵元 {i}: {p:+.4f} rad ({np.rad2deg(p):+.2f}°)")
预期输出
当 f = 10 GHz、d = 0.015 m、θ₀ = 30°、N = 8 时,代码逻辑直接推出:
波长: 0.0300 m
相邻阵元相位差: 1.5708 rad (90.00°)
各阵元相位 (rad):
阵元 0: +0.0000 rad (+0.00°)
阵元 1: +1.5708 rad (+90.00°)
阵元 2: -3.1416 rad (-180.00°)
阵元 3: -1.5708 rad (-90.00°)
阵元 4: +0.0000 rad (+0.00°)
阵元 5: +1.5708 rad (+90.00°)
阵元 6: -3.1416 rad (-180.00°)
阵元 7: -1.5708 rad (-90.00°)
注意:阵元 2 的相位理论值为 π,折算到 (-π, π] 后为 -π(即 -3.1416 rad),这是区间取值的正常结果。
验证方法
运行上述 Python 脚本,观察输出是否与预期一致。验证要点:
- 相邻阵元相位差 Δφ 是否等于 2π·d·sinθ₀/λ 的理论值(本例为 π/2);
- 各阵元相位是否为 n·Δφ 的循环折算结果;
- 改变 θ₀ 为 0° 时,所有相位应为 0;改变 θ₀ 为 90° 时,Δφ 应接近 2π·d/λ(本例为 π)。
判定标准:数值偏差小于 1×10⁻⁶ rad 即通过。
工程说明
本代码输出的是连续相位值,实际波控系统需根据移相器位数(如 6 位)对相位进行量化并转换为波控码。量化过程在后续案例中单独处理。当前案例仅完成角度到相位差的精确转换,作为波控链路的第一级计算。