跳到主要内容

1.1 阵列观测模型与均匀线阵

在正式进入算法之前,我们需要先建立起用数学语言描述阵列系统的基本方式。本章的任务,就是搭建这套数学语言体系。

这一章涉及的概念不多,但每一个都很基础,后续章节的所有算法都建立在这些定义之上。同学们不必急着记住所有细节,先理解每个概念的物理直觉,公式自然就有了落脚点。


1.1 阵列观测模型与均匀线阵

1.1.1 从单个天线到天线阵列

先想一个最简单的情形:你手头只有一根天线,空间中有一个信号源正在发射信号。这根天线能接收到信号,告诉你"有信号"——但仅此而已。它无法告诉你信号从哪个方向来,因为一根全向天线对所有方向的响应是完全相同的,方向信息根本进不了观测数据。

怎么办?答案是多用几根天线,把它们按照某种空间排列组合起来,构成一个天线阵列(antenna array)。当一列平面波从某个方向入射时,它到达各根天线的时刻会略有先后,产生细微的时间差——或者等效地,产生各阵元之间的相位差(phase difference)。正是这个相位差,携带了信号的方向信息。阵列信号处理的任务,就是从这些相位差中反推出信号的来源方向。

阵列的几何形状可以有很多种:直线、圆形、平面、三维立体……本教程聚焦最基础、最常用的一种——均匀线阵(Uniform Linear Array,ULA)。

1.1.2 均匀线阵的几何结构

顾名思义,均匀线阵是将 MM 个阵元沿一条直线等间距排列,相邻阵元之间的间距为 dd。我们把第一个阵元(编号为 m=1m = 1)的位置选作参考原点,则第 mm 个阵元位于坐标 (m1)d(m-1)d 处,如下图所示。

阵元编号:  1      2      3    ...    M
位置坐标: 0 d 2d ... (M-1)d

这个结构简单得几乎令人觉得"太朴素了"。但恰恰是这种规则性,赋予了 ULA 两个非常好的性质:其一,各阵元之间的相位关系具有整齐的等差结构,数学上非常便于推导;其二,几乎所有经典 DOA 算法(MUSIC、ESPRIT 等)最初都是为 ULA 设计的,理论结果最为成熟。因此,ULA 是学习 DOA 估计的标准起点。

阵元间距 dd 的选取是有讲究的。工程上通常取 d=λ/2d = \lambda/2,其中 λ\lambda 是信号的波长。这一选择并非任意,它来自奈奎斯特采样定理在空间域的对应——以半波长间距采样,恰好能无混叠地覆盖 [90°,90°][-90°, 90°] 的全部角度范围。如果 d>λ/2d > \lambda/2,就会出现空间混叠(spatial aliasing),不同方向的信号会产生完全相同的相位差,导致方向无法唯一确定。这一点我们在后续分析 MUSIC 算法时还会再回来讨论。

1.1.3 单个阵元的观测信号

现在我们来建立数学模型。假设空间中有 KK 个信号源,第 kk 个信号源的入射方向(即与阵列法线方向的夹角)为 θk\theta_k,发射的复基带信号为 sk(t)s_k(t)

什么是复基带信号? 在通信和雷达中,信号通常是某个高频载波的调制结果。经过解调之后,我们提取出低频的复包络信号,称为复基带信号。它保留了原始信号的幅度和相位信息,但频率已降至零附近,便于数字处理。本教程中所有的 sk(t)s_k(t) 均指复基带信号。

由于信号源位于远场(far field),即信号源到阵列的距离远大于阵列孔径,入射波在阵列所在区域可以近似为平面波(plane wave)。这意味着波前是一个与传播方向垂直的平面,同一波前上各点的相位完全相同。

以第一个阵元为参考,平面波以角度 θk\theta_k 入射时,到达第 mm 个阵元的传播路程比第一个阵元多(或少):

Δrm,k=(m1)dsinθk\Delta r_{m,k} = (m-1) d \sin\theta_k

这段路程差对应的时间延迟为:

τm,k=(m1)dsinθkc\tau_{m,k} = \frac{(m-1) d \sin\theta_k}{c}

其中 cc 是信号的传播速度(电磁波取光速,声波取声速)。在窄带假设下(我们将在 1.2 节详细说明),时间延迟可以等效为一个纯相位偏移。因此,第 kk 个信号源的信号到达第 mm 个阵元时,相比参考阵元附加了相位因子:

ej2πλ(m1)dsinθk=ej(m1)ψke^{-j \frac{2\pi}{\lambda}(m-1)d\sin\theta_k} = e^{j(m-1)\psi_k}

其中定义 ψk=2πdλsinθk\psi_k = \frac{2\pi d}{\lambda}\sin\theta_k,称为空间频率(spatial frequency),它是 θk\theta_k 的一个函数,将角度信息"编码"进了相位。

考虑所有 KK 个信号源以及加性噪声,第 mm 个阵元接收到的信号为:

xm(t)=k=1Ksk(t)ej(m1)ψk+nm(t)x_m(t) = \sum_{k=1}^{K} s_k(t)\, e^{j(m-1)\psi_k} + n_m(t)

其中 nm(t)n_m(t) 是第 mm 个阵元上的加性噪声,通常建模为零均值的复高斯白噪声。

1.1.4 矢量化:阵列观测模型

单个阵元的方程很直观,但处理 MM 个阵元时,逐一写出 MM 个标量方程既繁琐又不利于矩阵运算。我们把所有阵元的观测值堆叠成一个 MM 维列向量:

x(t)=[x1(t), x2(t), , xM(t)]CM\mathbf{x}(t) = [x_1(t),\ x_2(t),\ \cdots,\ x_M(t)]^\top \in \mathbb{C}^{M}

类似地,定义信号向量 s(t)=[s1(t),s2(t),,sK(t)]CK\mathbf{s}(t) = [s_1(t), s_2(t), \cdots, s_K(t)]^\top \in \mathbb{C}^K 和噪声向量 n(t)=[n1(t),n2(t),,nM(t)]CM\mathbf{n}(t) = [n_1(t), n_2(t), \cdots, n_M(t)]^\top \in \mathbb{C}^M

对于第 kk 个信号源,各阵元的相位因子可以整理为一个 MM 维向量:

a(θk)=[1, ejψk, ej2ψk, , ej(M1)ψk]\mathbf{a}(\theta_k) = \left[1,\ e^{j\psi_k},\ e^{j2\psi_k},\ \cdots,\ e^{j(M-1)\psi_k}\right]^\top

这个向量描述了来自方向 θk\theta_k 的信号在各阵元上的响应分布,称为导向矢量(steering vector)。它是整个 DOA 理论中最核心的概念之一,我们将在 1.2 节专门深入讨论。

KK 个导向矢量并排拼成一个 M×KM \times K 的矩阵:

A(θ)=[a(θ1), a(θ2), , a(θK)]\mathbf{A}(\boldsymbol{\theta}) = [\mathbf{a}(\theta_1),\ \mathbf{a}(\theta_2),\ \cdots,\ \mathbf{a}(\theta_K)]

这个矩阵称为阵列流形矩阵(array manifold matrix),它完整地描述了阵列对来自不同方向信号的响应规律。

于是,整个阵列的观测可以用一个简洁的矩阵方程统一表示:

x(t)=A(θ)s(t)+n(t)\boxed{\mathbf{x}(t) = \mathbf{A}(\boldsymbol{\theta})\,\mathbf{s}(t) + \mathbf{n}(t)}

这就是阵列信号处理的基本观测模型,也是后续所有算法的出发点。它的物理含义非常清晰:阵列在某时刻的观测值 x(t)\mathbf{x}(t),等于各路信号以其对应导向矢量为权重的叠加,再加上噪声。

1.1.5 用代码构造 ULA 的导向矢量

理解了模型之后,我们来看看如何用 Python 实现它。以下代码构造一个 M=8M = 8 阵元、半波长间距的 ULA,并计算来自 θ=30°\theta = 30° 方向的导向矢量:

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 小结

本节建立了均匀线阵的基本几何结构,并推导出阵列观测的矩阵模型:

x(t)=A(θ)s(t)+n(t)\mathbf{x}(t) = \mathbf{A}(\boldsymbol{\theta})\,\mathbf{s}(t) + \mathbf{n}(t)

其中,阵列流形矩阵 A\mathbf{A} 由各信号源方向对应的导向矢量拼成,它是连接"空间角度"与"阵列观测"的桥梁。DOA 估计的任务,本质上就是从观测数据 x(t)\mathbf{x}(t) 中反推出 A\mathbf{A} 的列向量所对应的角度 θ=[θ1,θ2,,θK]\boldsymbol{\theta} = [\theta_1, \theta_2, \cdots, \theta_K]^\top

不过,这里还有一个关键问题我们还没有正面回答:导向矢量为什么可以用这种相位递进的形式表达?这背后依赖的是远场假设窄带信号假设。这两个假设,正是下一节要重点讨论的内容。