均匀线阵(ULA)模型:阵列几何结构、阵元间距设计、空间采样定理

各位同学,今天我们聊聊波束形成里最基础、也最经典的一个模型——均匀线阵。说白了,就是把天线排成一条直线,间距相等。你想想看,这是不是最简单直观的阵列结构?我刚开始接触阵列信号处理时,第一个接触的就是它。别小看这个模型,它背后藏着很多有意思的物理直觉和数学规律。

一、阵列几何结构:一条直线上的故事

均匀线阵,英文叫 Uniform Linear Array,简称 ULA。它的几何结构特别简单:N 个全向阵元,等间距地排列在一条直线上。通常我们假设阵元沿着 x 轴放置,第一个阵元在原点,第 n 个阵元的位置就是 (n-1)*d,其中 d 是阵元间距。

我个人习惯把阵元编号从 0 开始,这样公式写起来更清爽。当然,有些教材从 1 开始,这个无所谓,你只要保持一致就行。

这里有个关键点:我们假设所有阵元都是全向的,也就是说,它们对来自任何方向的信号都有相同的响应。实际工程中,阵元本身会有方向图,但那是后面章节要讨论的内容。现阶段,我们先聚焦在阵列本身带来的空间滤波特性上。

核心概念:均匀线阵的阵列流形向量(Array Manifold Vector)描述了不同方向信号在阵列上的相位差。对于来自角度 θ 的远场窄带信号,第 n 个阵元相对于参考阵元(通常取第一个阵元)的相位延迟为:

a(θ) = [1, e^(-j*2π*d*sin(θ)/λ), e^(-j*4π*d*sin(θ)/λ), ..., e^(-j*2π*(N-1)*d*sin(θ)/λ)]^T

这个向量,就是我们后续所有波束形成算法的基础。你把它记住了,后面就顺了。

二、阵元间距设计:不是随便选的

阵元间距 d 怎么选?这个问题我当年也困惑过。是不是越小越好?或者越大越好?

嗯,这里要注意:阵元间距直接决定了阵列的波束宽度和栅瓣位置。我给大家总结三条经验:

  • d = λ/2:最经典的选择。此时阵列在可见区域(-90° 到 90°)内不会出现栅瓣,同时波束宽度也适中。我个人项目中 80% 的情况都用这个值。
  • d < λ/2:波束变宽,分辨率下降。但好处是阵列物理尺寸小,适合空间受限的场景。我记得有一次做车载雷达,阵元间距只能做到 λ/4,结果角度分辨率惨不忍睹。
  • d > λ/2:波束变窄,分辨率提高。但小心!会出现栅瓣,也就是在其他方向上也出现了和主瓣一样大的波束,这会导致角度模糊。

避坑指南:我曾经在一个项目里,为了追求高分辨率,把阵元间距设成了 λ。结果测出来的角度完全不对,信号明明在 30°,波束却在 -30° 和 90° 也出现了峰值。后来查了半天才发现是栅瓣捣的鬼。所以,除非你明确知道信号只来自某个有限角度范围,否则老老实实用 λ/2

三、空间采样定理:时域到空域的映射

你学过数字信号处理,肯定知道时域采样定理——采样频率必须大于信号最高频率的两倍。其实,空间采样定理是它的孪生兄弟

在空域里,阵元间距 d 相当于采样间隔,信号的空间频率由波数 k = 2π/λ 决定。空间采样定理告诉我们:

阵元间距 d ≤ λ/2,才能无模糊地重建空间谱

为什么会这样?你想想看,相邻阵元之间的相位差是 2π*d*sin(θ)/λ。当 d > λ/2 时,对于某些 θ,相位差可能超过 π,这就产生了相位模糊——我们无法区分这个相位差是来自 θ 还是来自另一个角度。

说白了,空间采样定理保证了阵列响应在角度域上是单射的。一个方向对应一个唯一的阵列响应向量,反过来也成立。

我的经验:在实际工程中,我通常会把阵元间距设为略小于 λ/2,比如 0.48λ。为什么?因为实际阵元有物理尺寸,太近了会互相耦合。留一点余量,既满足采样定理,又避免互耦问题。这个细节,很多教材不会告诉你。

四、知识体系结构图

下面我用一张 SVG 图来总结本章的核心逻辑,你看完应该能一目了然:

均匀线阵(ULA)模型知识体系 阵列几何结构 • N个全向阵元 • 等间距d排列 • 沿x轴放置 • 阵列流形向量 a(θ) 阵元间距设计 • d = λ/2:经典选择 • d < λ/2:波束变宽 • d > λ/2:出现栅瓣 • 实际取 0.48λ 避互耦 空间采样定理 • d ≤ λ/2 • 无模糊重建 • 避免相位模糊 • 空域采样定理 核心结论:ULA 模型是波束形成的基石,几何结构决定自由度,间距决定分辨率,采样定理决定无模糊范围 示例:N=8, d=λ/2 的 ULA,在 θ=30° 方向形成波束 阵列流形:a(30°) = [1, e^(-jπsin30°), e^(-j2πsin30°), ..., e^(-j7πsin30°)]^T

五、一个简单的 Python 示例

光说不练假把式。我写了一段代码,帮你生成 ULA 的阵列流形向量,并画出不同间距下的波束图。你可以在自己的电脑上跑跑看:

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
N = 8          # 阵元数
d = 0.5        # 阵元间距,单位:波长
theta = np.linspace(-90, 90, 181)  # 扫描角度

# 生成阵列流形矩阵
def array_manifold(N, d, theta):
    theta_rad = np.deg2rad(theta)
    k = 2 * np.pi * d * np.sin(theta_rad)
    A = np.exp(-1j * np.outer(np.arange(N), k))
    return A

# 计算波束图(常规波束形成)
A = array_manifold(N, d, theta)
w = np.ones(N) / N  # 均匀加权
B = np.abs(w.conj() @ A)  # 波束响应

# 绘制
plt.figure(figsize=(8, 4))
plt.plot(theta, 20*np.log10(B/np.max(B)))
plt.xlabel('角度 (度)')
plt.ylabel('归一化幅度 (dB)')
plt.title(f'ULA 波束图 (N={N}, d={d}λ)')
plt.grid(True)
plt.ylim(-40, 0)
plt.show()

这段代码里,我用了均匀加权,也就是所有阵元的权重都是 1/N。你试试把 d 改成 0.6 或者 1.0,看看波束图会发生什么变化。嗯,栅瓣会像幽灵一样冒出来。

本章要点回顾:

  • ULA 是最简单的阵列结构,N 个阵元等间距排列
  • 阵列流形向量 a(θ) 是波束形成的数学基础
  • 阵元间距 d = λ/2 是黄金标准,兼顾分辨率和无模糊
  • 空间采样定理是时域采样定理在空域的对应
  • 实际工程中,d 取 0.48λ 左右可以避免互耦

好了,这一章的内容就到这里。ULA 模型虽然简单,但它是后面所有波束形成算法的起点。你把它吃透了,后面学 MVDR、MUSIC 这些算法时,会发现很多概念都是相通的。


公众号:蓝海资料掘金营,微信deep3321