2. 均匀面阵的二维波束形成

任务说明

本案例实现矩形栅格均匀面阵(URA)的二维波束形成。给定阵元间距、工作频率与期望指向角(方位角 φ、俯仰角 θ),计算各阵元复加权系数,并生成二维方向图,用于分析波束指向性与旁瓣特性。

阵列模型与加权计算

设面阵位于 x-y 平面,沿 x 轴 M 个阵元、沿 y 轴 N 个阵元,阵元间距均为 d。第 (m,n) 个阵元位置为 (md, nd, 0)。远场信号到达方向由方位角 φ(与 x 轴夹角,0~360°)和俯仰角 θ(与 z 轴夹角,0~90°)描述。期望指向 (φ₀, θ₀) 的常规波束形成加权为:

w(m,n) = exp[ j·(2π/λ)·(md·sinθ₀·cosφ₀ + nd·sinθ₀·sinφ₀) ]

方向图计算时,对任意扫描角 (φ, θ),阵列流形向量与加权向量内积取模,归一化后得到 dB 方向图。

代码实现


import numpy as np
import matplotlib.pyplot as plt

# 参数设置
M, N = 8, 8          # x轴和y轴阵元数
d = 0.5              # 阵元间距(波长归一化,d=0.5λ)
theta0 = 30.0        # 期望俯仰角(度)
phi0 = 45.0          # 期望方位角(度)

# 生成阵元坐标(单位:波长)
x = (np.arange(M) - (M-1)/2) * d
y = (np.arange(N) - (N-1)/2) * d
X, Y = np.meshgrid(x, y)

# 计算加权系数(常规波束形成)
theta0_r = np.deg2rad(theta0)
phi0_r = np.deg2rad(phi0)
w = np.exp(1j * 2*np.pi * (X * np.sin(theta0_r) * np.cos(phi0_r) +
                            Y * np.sin(theta0_r) * np.sin(phi0_r)))
w = w / np.sqrt(M*N)   # 归一化

# 扫描角度网格
theta_scan = np.linspace(0, 90, 181)      # 俯仰角 0~90°
phi_scan = np.linspace(0, 360, 361)       # 方位角 0~360°
TH, PH = np.meshgrid(np.deg2rad(theta_scan), np.deg2rad(phi_scan))

# 计算方向图
pattern = np.zeros_like(TH, dtype=complex)
for idx, (th, ph) in enumerate(zip(TH.ravel(), PH.ravel())):
    # 扫描方向的阵列流形
    a = np.exp(1j * 2*np.pi * (X.ravel() * np.sin(th) * np.cos(ph) +
                                Y.ravel() * np.sin(th) * np.sin(ph)))
    pattern.ravel()[idx] = np.dot(w.ravel().conj(), a)

pattern_db = 20 * np.log10(np.abs(pattern) / np.abs(pattern).max() + 1e-12)

# 绘制二维方向图(以方位角-俯仰角为坐标)
plt.figure(figsize=(10, 8))
plt.pcolormesh(phi_scan, theta_scan, pattern_db.T, shading='auto', cmap='jet', vmin=-40)
plt.colorbar(label='归一化增益 (dB)')
plt.xlabel('方位角 φ (度)')
plt.ylabel('俯仰角 θ (度)')
plt.title(f'均匀面阵二维方向图 (M={M}, N={N}, d={d}λ, 指向: φ₀={phi0}°, θ₀={theta0}°)')
plt.grid(alpha=0.3)
plt.tight_layout()
plt.savefig('ura_pattern.png', dpi=150)
plt.show()

# 输出主瓣峰值位置(用于验证)
peak_idx = np.unravel_index(np.argmax(np.abs(pattern)), pattern.shape)
print(f"方向图峰值位置: φ={phi_scan[peak_idx[0]]:.1f}°, θ={theta_scan[peak_idx[1]]:.1f}°")

运行与验证

依赖:numpy、matplotlib。运行上述脚本将生成二维方向图并保存为 ura_pattern.png。

验证方法:观察方向图峰值是否出现在设定的 (φ₀=45°, θ₀=30°) 位置。由于代码中加权向量与期望方向流形精确匹配,峰值必然位于该角度。同时检查方向图是否关于主瓣对称,且旁瓣电平随角度偏离而下降。

判定标准:控制台输出的峰值位置与设定指向偏差小于 0.5°(受扫描网格分辨率限制);方向图在非指向方向增益明显低于主瓣,且无栅瓣(因 d=0.5λ 满足空间采样条件)。

均匀面阵二维波束形成验证流程 阵列几何 (M×N=8×8, d=0.5λ) y (N) x (M) 期望指向 (φ₀=45°, θ₀=30°) θ₀=30° 主瓣方向 φ₀=45° 验证观测点 ① 峰值位置 应位于 (45°, 30°) ±0.5° ② 旁瓣电平 远离主瓣方向增益下降 ③ 栅瓣检查 d=0.5λ 时无栅瓣出现 计算流程: 生成阵元坐标 计算加权系数 w 扫描方向图 峰值位置验证 方向图峰值位置由加权向量与扫描流形内积决定,理论上精确指向设定角度