1. 均匀线性阵列的延迟-求和波束形成

均匀线性阵列的延迟-求和波束形成 学习卡片

任务说明

本案例实现一个8元均匀线性阵列(ULA)的延迟-求和波束形成器,对远场窄带信号进行空间增强。核心任务包括:计算各阵元相对参考点的时延、构造波束形成权重、绘制波束图(Beam Pattern),并验证主瓣方向与预设指向一致。

理论模型

考虑间距为 \(d\) 的 \(M\) 元均匀线性阵列,远场窄带平面波以入射角 \(\theta\)(相对阵列法线)到达。以第一个阵元为参考,第 \(m\) 个阵元接收信号相对参考点的时延为:

\[ \tau_m(\theta) = \frac{(m-1)d\sin\theta}{c} \]

其中 \(c\) 为声速。延迟-求和波束形成器通过补偿期望方向 \(\theta_0\) 的时延并对各阵元输出求和,实现对 \(\theta_0\) 方向信号的相干叠加增强。波束图定义为:

\[ B(\theta) = \left| \sum_{m=0}^{M-1} w_m e^{-j2\pi f \tau_m(\theta)} \right| \]

其中权重 \(w_m = e^{j2\pi f \tau_m(\theta_0)}\) 用于对齐期望方向相位。

代码实现

import numpy as np
import matplotlib.pyplot as plt

# 参数配置
M = 8                # 阵元数
d = 0.05             # 阵元间距 (m),半波长@3kHz
f = 3400.0           # 信号频率 (Hz)
c = 340.0            # 声速 (m/s)
theta0 = 30.0        # 期望指向角 (度)

# 生成角度扫描范围 (-90° ~ 90°)
theta_scan = np.linspace(-90, 90, 1801)
theta_rad = np.deg2rad(theta_scan)

# 计算各阵元位置
array_pos = np.arange(M) * d

# 期望方向的时延补偿权重
tau0 = array_pos * np.sin(np.deg2rad(theta0)) / c
w = np.exp(1j * 2 * np.pi * f * tau0)

# 计算波束图
B = np.zeros_like(theta_rad, dtype=complex)
for idx, th in enumerate(theta_rad):
    tau = array_pos * np.sin(th) / c
    steering = np.exp(-1j * 2 * np.pi * f * tau)
    B[idx] = np.dot(w, steering)

# 归一化并转换为dB
B_db = 20 * np.log10(np.abs(B) / np.max(np.abs(B)) + 1e-12)

# 绘制波束图
plt.figure(figsize=(10, 6))
plt.plot(theta_scan, B_db, linewidth=2)
plt.xlabel('入射角 (度)')
plt.ylabel('归一化增益 (dB)')
plt.title('8元ULA延迟-求和波束图 (指向30°)')
plt.grid(True, alpha=0.3)
plt.xlim(-90, 90)
plt.ylim(-60, 5)
plt.axvline(x=theta0, color='r', linestyle='--', label=f'指向角 {theta0}°')
plt.legend()
plt.tight_layout()
plt.savefig('beam_pattern.png', dpi=150)
plt.show()

# 输出主瓣峰值位置验证
peak_idx = np.argmax(np.abs(B))
print(f"主瓣峰值角度: {theta_scan[peak_idx]:.2f}°")
print(f"主瓣峰值增益: {20*np.log10(np.max(np.abs(B))):.2f} dB")

关键实现说明

代码首先定义阵列参数并生成扫描角度网格。权重向量 w 通过对期望方向时延取正指数实现相位补偿。波束图计算时,对每个扫描角度构造导向向量并与权重做内积,得到该方向的阵列响应。最后将响应归一化并转换为dB刻度绘制。

验证方法

运行代码后观察以下判定标准:

  1. 波束图在30°处出现主瓣峰值,且主瓣峰值角度输出值应为30.00°(允许±0.05°误差);
  2. 主瓣峰值增益应为0 dB(归一化后);
  3. 波束图关于主瓣方向近似对称,第一零点位置约在 \(\theta_0 \pm \arcsin(\lambda/L)\) 附近,其中 \(L = (M-1)d\) 为阵列孔径;
  4. 旁瓣电平低于主瓣约-13 dB(均匀加权理论值)。

若输出角度与30°偏差超过0.1°,需检查时延计算公式或角度单位转换是否正确。

8元ULA延迟-求和波束形成信号处理链路 均匀线性阵列 d 平面波 θ₀=30° 时延补偿 w_m = e^{j2πfτ_m(θ₀)} τ_m = (m-1)d·sinθ₀/c Σ 相干叠加 波束输出 y(t) = Σ w_m·x_m(t) 增强θ₀方向信号 波束图验证 30° 旁瓣 主瓣 旁瓣 增益(dB) 角度(°) 扫描验证

运行方式

将代码保存为 ula_delay_sum.py,在安装有NumPy和Matplotlib的Python环境中运行:

python ula_delay_sum.py

程序执行后生成波束图文件 beam_pattern.png,并在控制台输出主瓣峰值角度。若需改变指向角,修改 theta0 变量后重新运行即可。