3. 均匀圆阵的波束形成
任务定义
本案例实现均匀圆阵(UCA)的波束形成。给定阵元数、半径、工作频率和期望波达方向,计算阵列流形矢量并合成波束方向图,重点分析圆阵方向图关于方位角的对称性,以及阵元间距超过半波长时出现的栅瓣条件。
均匀圆阵模型
设M个全向阵元均匀分布在半径为R的圆周上,第m个阵元方位角为φm = 2πm/M。对于来自方位角φ、俯仰角θ(相对阵列平面法向)的远场平面波,第m个阵元相对圆心的传播延迟为:
τm(φ,θ) = R·cos(φ − φm)·sin(θ) / c
阵列流形矢量为 a(φ,θ) = [e−j2πfτ1, …, e−j2πfτM]T。常规波束形成权矢量取 w = a(φ0,θ0),方向图响应为 B(φ,θ) = wHa(φ,θ)。本案例固定俯仰角θ = 90°(阵列平面内扫描),此时sin(θ)=1,问题退化为仅关于方位角φ的一维方向图。
代码实现
import numpy as np
import matplotlib.pyplot as plt
# 参数设置
M = 12 # 阵元数
R = 0.6 # 圆阵半径(米)
f = 3e8 / 0.15 # 工作频率,对应波长 λ=0.15m
c = 3e8
lam = c / f
phi0 = np.deg2rad(60) # 期望方向(方位角)
theta0 = np.pi / 2 # 俯仰角90°,阵列平面内
# 阵元位置
m_arr = np.arange(M)
phi_m = 2 * np.pi * m_arr / M
def array_manifold(phi, theta):
"""计算均匀圆阵流形矢量(phi: 方位角标量或数组)"""
phi = np.atleast_1d(phi)
# 延迟矩阵: (M, N)
tau = R * np.cos(phi[None, :] - phi_m[:, None]) * np.sin(theta) / c
return np.exp(-1j * 2 * np.pi * f * tau)
# 期望方向流形作为权矢量
w = array_manifold(phi0, theta0).conj() # 取共轭转置
# 扫描方位角 0~360°
phi_scan = np.linspace(0, 2*np.pi, 720)
A = array_manifold(phi_scan, theta0) # (M, 720)
B = w.conj() @ A # 方向图响应 (720,)
B_db = 20 * np.log10(np.abs(B) + 1e-12)
# 找出主瓣和栅瓣位置
peaks = []
for i in range(1, len(B_db)-1):
if B_db[i] > B_db[i-1] and B_db[i] > B_db[i+1] and B_db[i] > -3:
peaks.append((np.rad2deg(phi_scan[i]), B_db[i]))
print("主瓣/栅瓣位置(方位角°, 增益dB):")
for p in peaks:
print(f" {p[0]:6.1f}° {p[1]:6.2f} dB")
# 绘制方向图
plt.figure(figsize=(8, 4))
plt.plot(np.rad2deg(phi_scan), B_db)
plt.axhline(-3, color='gray', ls='--', lw=0.8)
plt.axvline(np.rad2deg(phi0), color='red', ls=':', lw=1)
plt.xlabel('方位角 (deg)'); plt.ylabel('增益 (dB)')
plt.title(f'UCA方向图 M={M}, R={R}m, λ={lam:.3f}m')
plt.grid(alpha=0.3); plt.xlim(0, 360); plt.ylim(-40, 5)
plt.tight_layout(); plt.savefig('uca_pattern.png', dpi=100)
plt.show()
对称性与栅瓣分析
对称性:均匀圆阵的阵列流形关于圆心旋转对称。当阵元数M较大且扫描范围覆盖全360°时,方向图关于期望方向φ₀呈镜像对称,即B(φ₀+Δ) = B(φ₀−Δ)。这是因为圆阵几何在任意旋转下不变,且权矢量本身由期望方向唯一确定。与均匀线阵不同,圆阵方向图不关于阵列轴线对称,而是关于期望方向对称。
栅瓣条件:圆阵相邻阵元弧长间距为d = 2πR/M。当d > λ/2时,空间采样不足,方向图会出现与主瓣等高的栅瓣。栅瓣出现在满足以下条件的方位角φg:
φg = φ₀ ± 2πk·λ/(M·d·sinθ) 的离散解,实际中通过数值搜索峰值位置确定。本案例中d = 2π×0.6/12 ≈ 0.314m,λ = 0.15m,d/λ ≈ 2.09 > 0.5,因此存在栅瓣。
验证方法
运行上述代码,观察输出峰值列表和方向图。判定标准:
- 方向图在φ₀=60°处增益最高(约0 dB),且关于60°对称;
- 峰值列表中除60°外,还存在其他接近0 dB的栅瓣,其方位角与理论值一致(本案例中栅瓣约出现在φ₀±k×60°附近,即120°、180°、240°、300°等位置);
- 将R改为0.1m(使d<λ/2),重新运行后栅瓣消失,仅保留60°一个主瓣,验证栅瓣条件。
运行与判定
将代码保存为uca_beamforming.py,在装有NumPy和Matplotlib的Python环境中运行python uca_beamforming.py。程序输出峰值列表并保存方向图uca_pattern.png。若峰值列表包含60°主瓣及多个接近0 dB的栅瓣,且方向图关于60°对称,则实现正确。将R改为0.1后重跑,栅瓣消失,进一步验证栅瓣条件分析。