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,因此存在栅瓣。

验证方法

运行上述代码,观察输出峰值列表和方向图。判定标准:

  1. 方向图在φ₀=60°处增益最高(约0 dB),且关于60°对称;
  2. 峰值列表中除60°外,还存在其他接近0 dB的栅瓣,其方位角与理论值一致(本案例中栅瓣约出现在φ₀±k×60°附近,即120°、180°、240°、300°等位置);
  3. 将R改为0.1m(使d<λ/2),重新运行后栅瓣消失,仅保留60°一个主瓣,验证栅瓣条件。
均匀圆阵方向图与栅瓣分析(M=12, R=0.6m, λ=0.15m) 主瓣 60° 栅瓣 180° 栅瓣 300° 栅瓣 120° 栅瓣 240° 阵元位置 关键结论 • 对称性:方向图关于期望方向 φ₀=60° 镜像对称 B(φ₀+Δ) = B(φ₀−Δ),源于圆阵旋转不变性 • 栅瓣条件:阵元弧长 d = 2πR/M = 0.314m d/λ = 2.09 > 0.5 → 空间欠采样 → 产生栅瓣 • 栅瓣位置:φ₀ ± k·60°(k=1,2,3,4,5) 即 120°, 180°, 240°, 300°, 0° 处出现等增益峰 • 消除方法:减小 R 使 d ≤ λ/2 例如 R=0.1m 时 d=0.052m < 0.075m,栅瓣消失 验证:修改R值重跑,观察栅瓣是否消失

运行与判定

将代码保存为uca_beamforming.py,在装有NumPy和Matplotlib的Python环境中运行python uca_beamforming.py。程序输出峰值列表并保存方向图uca_pattern.png。若峰值列表包含60°主瓣及多个接近0 dB的栅瓣,且方向图关于60°对称,则实现正确。将R改为0.1后重跑,栅瓣消失,进一步验证栅瓣条件分析。