1.1 阵列观测模型与均匀线阵
在正式进入算法之前,我们需要先建立起用数学语言描述阵列系统的基本方式。本章的任务,就是搭建这套数学语言体系。
这一章涉及的概念不多,但每一个都很基础,后续章节的所有算法都建立在这些定义之上。同学们不必急着记住所有细节,先理解每个概念的物理直觉,公式自然就有了落脚点。
1.1 阵列观测模型与均匀线阵
1.1.1 从单个天线到天线阵列
先想一个最简单的情形:你手头只有一根天线,空间中有一个信号源正在发射信号。这根天线能接收到信号,告诉你"有信号"——但仅此而已。它无法告诉你信号从哪个方向来,因为一根全向天线对所有方向的响应是完全相同的,方向信息根本进不了观测数据。
怎么办?答案是多用几根天线,把它们按照某种空间排列组合起来,构成一个天线阵列(antenna array)。当一列平面波从某个方向入射时,它到达各根天线的时刻会略有先后,产生细微的时间差——或者等效地,产生各阵元之间的相位差(phase difference)。正是这个相位差,携带了信号的方向信息。阵列信号处理的任务,就是从这些相位差中反推出信号的来源方向。
阵列的几何形状可以有很多种:直线、圆形、平面、三维立体……本教程聚焦最基础、最常用的一种——均匀线阵(Uniform Linear Array,ULA)。
1.1.2 均匀线阵的几何结构
顾名思义,均匀线阵是将 个阵元沿一条直线等间距排列,相邻阵元之间的间距为 。我们把第一个阵元(编号为 )的位置选作参考原点,则第 个阵元位于坐标 处,如下图所示。
阵元编号: 1 2 3 ... M
位置坐标: 0 d 2d ... (M-1)d
这个结构简单得几乎令人觉得"太朴素了"。但恰恰是这种规则性,赋予了 ULA 两个非常好的性质:其一,各阵元之间的相位关系具有整齐的等差结构,数学上非常便于推导;其二,几乎所有经典 DOA 算法(MUSIC、ESPRIT 等)最初都是为 ULA 设计的,理论结果最为成熟。因此,ULA 是学习 DOA 估计的标准起点。
阵元间距 的选取是有讲究的。工程上通常取 ,其中 是信号的波长。这一选择并非任意,它来自奈奎斯特采样定理在空间域的对应——以半波长间距采样,恰好能无混叠地覆盖 的全部角度范围。如果 ,就会出现空间混叠(spatial aliasing),不同方向的信号会产生完全相同的相位差,导致方向无法唯一确定。这一点我们在后续分析 MUSIC 算法时还会再回来讨论。
1.1.3 单个阵元的观测信号
现在我们来建立数学模型。假设空间中有 个信号源,第 个信号源的入射方向(即与阵列法线方向的夹角)为 ,发射的复基带信号为 。
什么是复基带信号? 在通信和雷达中,信号通常是某个高频载波的调制结果。经过解调之后,我们提取出低频的复包络信号,称为复基带信号。它保留了原始信号的幅度和相位信息,但频率已降至零附近,便于数字处理。本教程中所有的 均指复基带信号。
由于信号源位于远场(far field),即信号源到阵列的距离远大于阵列孔径,入射波在阵列所在区域可以近似为平面波(plane wave)。这意味着波前是一个与传播方向垂直的平面,同一波前上各点的相位完全相同。
以第一个阵元为参考,平面波以角度 入射时,到达第 个阵元的传播路程比第一个阵元多(或少):
这段路程差对应的时间延迟为:
其中 是信号的传播速度(电磁波取光速,声波取声速)。在窄带假设下(我们将在 1.2 节详细说明),时间延迟可以等效为一个纯相位偏移。因此,第 个信号源的信号到达第 个阵元时,相比参考阵元附加了相位因子:
其中定义 ,称为空间频率(spatial frequency),它是 的一个函数,将角度信息"编码"进了相位。
考虑所有 个信号源以及加性噪声,第 个阵元接收到的信号为:
其中 是第 个阵元上的加性噪声,通常建模为零均值的复高斯白噪声。
1.1.4 矢量化:阵列观测模型
单个阵元的方程很直观,但处理 个阵元时,逐一写出 个标量方程既繁琐又不利于矩阵运算。我们把所有阵元的观测值堆叠成一个 维列向量:
类似地,定义信号向量 和噪声向量 。
对于第 个信号源,各阵元的相位因子可以整理为一个 维向量:
这个向量描述了来自方向 的信号在各阵元上的响应分布,称为导向矢量(steering vector)。它是整个 DOA 理论中最核心的概念之一,我们将在 1.2 节专门深入讨论。
把 个导向矢量并排拼成一个 的矩阵:
这个矩阵称为阵列流形矩阵(array manifold matrix),它完整地描述了阵列对来自不同方向信号的响应规律。
于是,整个阵列的观测可以用一个简洁的矩阵方程统一表示:
这就是阵列信号处理的基本观测模型,也是后续所有算法的出发点。它的物理含义非常清晰:阵列在某时刻的观测值 ,等于各路信号以其对应导向矢量为权重的叠加,再加上噪声。
1.1.5 用代码构造 ULA 的导向矢量
理解了模型之后,我们来看看如何用 Python 实现它。以下代码构造一个 阵元、半波长间距的 ULA,并计算来自 方向的导向矢量:
import numpy as np
# 阵列参数
M = 8 # 阵元数
d = 0.5 # 阵元间距(以波长为单位,d = λ/2)
def steering_vector(theta_deg, M, d):
"""
计算 ULA 导向矢量
参数:
theta_deg : 入射角度(度)
M : 阵元数
d : 阵元间距(波长归一化)
返回:
a : 导向矢量,形状为 (M,),复数
"""
theta = np.deg2rad(theta_deg)
# 空间频率 ψ = 2π·d·sin(θ)
psi = 2 * np.pi * d * np.sin(theta)
# 各阵元相位:[0, ψ, 2ψ, ..., (M-1)ψ]
m = np.arange(M)
a = np.exp(1j * m * psi)
return a
# 示例:θ = 30°
a = steering_vector(30, M, d)
print("导向矢量(模值均为 1):", np.abs(a))
print("导向矢量(相位,弧度):", np.angle(a))
运行这段代码,你会发现导向矢量的每个分量模值均为 1,只有相位在递增——这正是平面波在等间距阵列上产生等差相位的体现。
1.1.6 小结
本节建立了均匀线阵的基本几何结构,并推导出阵列观测的矩阵模型:
其中,阵列流形矩阵 由各信号源方向对应的导向矢量拼成,它是连接"空间角度"与"阵列观测"的桥梁。DOA 估计的任务,本质上就是从观测数据 中反推出 的列向量所对应的角度 。
不过,这里还有一个关键问题我们还没有正面回答:导向矢量为什么可以用这种相位递进的形式表达?这背后依赖的是远场假设和窄带信号假设。这两个假设,正是下一节要重点讨论的内容。