第三章 经典波束成形:延时求和(DAS)与常规波束形成(CBF)

各位同学,欢迎来到第三章。前两章我们聊了雷达测角的基本原理,从相位差聊到了阵列模型。今天咱们要动真格的了——把理论变成实实在在的算法。

这一章,我打算带大家吃透两个最经典的波束成形方法:延时求和波束成形(DAS)常规波束形成(CBF)。说白了,它们就是波束成形界的“Hello World”。你想想看,搞懂了这两个,后面那些自适应波束形成、MIMO波束成形,理解起来就顺溜多了。

3.1 延时求和波束成形(DAS)——最直观的思路

先问大家一个问题:如果你面前有一排麦克风,一个人从左边说话,你该怎么让这排麦克风“听”清楚左边的声音?

答案其实很朴素:把每个麦克风收到的信号,按照它离声源的距离,补上不同的时间延迟,然后加起来。这就是延时求和(Delay-And-Sum, DAS)的核心思想。

在雷达里,道理一模一样。只不过声波换成了电磁波,麦克风换成了天线阵元。

3.1.1 数学上怎么干?

假设我们有一个N元均匀线阵,阵元间距为d。一个远场目标从角度θ方向发射信号s(t)。那么第n个阵元收到的信号是:

x_n(t) = s(t - τ_n) + n_n(t)

其中τ_n是第n个阵元相对于参考阵元的时延。对于均匀线阵,这个时延可以写成:

τ_n = (n-1) * d * sin(θ) / c

c是光速,n从1开始编号。

现在,如果我们想“看”某个特定方向θ₀,就做这么一件事:

y(t) = Σ w_n * x_n(t + τ_n(θ₀))

这里w_n是加权系数(通常取1/N做归一化),τ_n(θ₀)是我们人为补偿的时延。补偿完再求和,来自θ₀方向的信号就会同相叠加,幅度变大;其他方向的信号则不会完全同相,幅度相对较小。

核心要点:DAS的本质就是“对齐-求和”。对齐的是相位,求和的是能量。

3.1.2 我在项目中踩过的坑

我记得刚入行那会儿,第一次用DAS做实测数据。阵元数不多,就8个。我兴冲冲地写完代码,一跑结果——方向图主瓣宽得吓人,旁瓣还高。我当时就懵了,心想这算法是不是有问题?

后来一查,问题出在量化误差上。我用的时延补偿是离散的,采样率不够高,导致补偿精度不够。你想想看,8个阵元,每个阵元的时延都差那么一点点,累积起来误差就大了。

避坑指南:做DAS时,如果采样率不够,建议用插值或者分数时延滤波器来提高时延补偿精度。我曾经因为偷懒没做插值,结果角度估计偏差了3度,这在雷达里可是致命的。

3.2 常规波束形成(CBF)——频域里的DAS

好,DAS讲完了。但DAS有个问题:它是在时域里操作的,计算量大,而且对窄带信号不太友好。于是就有了常规波束形成(Conventional Beamforming, CBF)。

CBF说白了,就是把DAS搬到频域里做。对于窄带信号,时延在频域里就变成了相位旋转。这样一来,计算量小了很多,而且可以方便地利用FFT加速。

3.2.1 CBF的数学表达

对于窄带信号,第n个阵元的接收信号可以写成:

x_n = A * exp(-j * 2π * f * τ_n) + n_n

其中f是信号频率。那么CBF的输出就是:

y(θ₀) = w^H * x

这里w是导向矢量(steering vector),对于均匀线阵:

w(θ₀) = [1, exp(j * 2π * d * sin(θ₀) / λ), ..., exp(j * 2π * (N-1) * d * sin(θ₀) / λ)]^T

λ是波长。x是所有阵元接收信号的向量。上标H表示共轭转置。

你发现没有?CBF其实就是用导向矢量对接收信号做加权求和。导向矢量里的相位项,正好补偿了不同阵元之间的波程差。

个人习惯:我一般把CBF叫做“匹配滤波的阵列版本”。因为它的思路和匹配滤波一模一样——用已知的模板(导向矢量)去和接收信号做相关。

3.2.2 CBF的代码实现

下面我给出一段简单的MATLAB风格的伪代码,演示CBF怎么做:

% 参数设置
N = 8;          % 阵元数
d = 0.5 * lambda; % 阵元间距(半波长)
theta_scan = -90:0.1:90; % 扫描角度范围

% 接收数据(假设已经采集到了)
X = received_signal; % N x 快拍数 的矩阵

% 计算空间谱
P_cbf = zeros(size(theta_scan));
for k = 1:length(theta_scan)
    theta = theta_scan(k) * pi / 180;
    % 构造导向矢量
    a = exp(1j * 2 * pi * d * sin(theta) / lambda * (0:N-1)');
    % CBF输出功率
    P_cbf(k) = (a' * X * X' * a) / (N^2);
end

% 找峰值
[~, idx] = max(P_cbf);
theta_est = theta_scan(idx);

这段代码里,我用了X * X'来估计协方差矩阵。实际工程中,如果快拍数不够,协方差矩阵估计会不准,导致波束形成性能下降。这个问题我们后面讲自适应波束形成时会详细聊。

3.3 波束方向图分析——看看你的“耳朵”长啥样

算法写完了,怎么评价它好不好?这时候就要看波束方向图了。

波束方向图,说白了就是阵列对不同方向信号的响应。它告诉你:你的雷达“耳朵”到底有多灵,能听清哪个方向的声音,哪个方向的声音会被忽略。

3.3.1 方向图的数学定义

对于CBF,波束方向图定义为:

B(θ) = |w^H(θ₀) * a(θ)|

其中w(θ₀)是我们指向θ₀方向的加权矢量,a(θ)是来自θ方向的导向矢量。B(θ)表示:当我们想听θ₀方向时,来自θ方向的信号会被放大(或衰减)多少倍。

对于均匀线阵,如果加权是均匀的(即w = a(θ₀)/N),那么方向图可以写成闭式解:

B(θ) = |sin(N * π * d * (sinθ - sinθ₀) / λ) / (N * sin(π * d * (sinθ - sinθ₀) / λ))|

这个公式眼熟不?对,它就是sinc函数的离散版本

3.3.2 方向图的关键指标

看方向图,我一般关注四个指标:

指标 定义 我的经验值
主瓣宽度(3dB波束宽度) 主瓣峰值下降3dB对应的角度范围 对于N元半波长间距线阵,约等于 0.886/(N*d/λ) 弧度
旁瓣电平 最大旁瓣相对于主瓣的幅度比 均匀加权时约-13.2dB,这个值其实挺高的
栅瓣位置 当d > λ/2时,会出现与主瓣一样高的栅瓣 这是个大坑,后面会细说
零点位置 方向图幅度为零的角度 可以用来抑制特定方向的干扰

警告:我曾经在一个项目里,为了省成本把阵元间距拉到了0.8λ。结果方向图里出现了栅瓣,把旁边一个强干扰当成了目标。那次教训让我记住了:阵元间距必须≤λ/2,这是空间采样的奈奎斯特条件。

3.3.3 如何通过加窗压低旁瓣?

均匀加权的方向图,旁瓣电平只有-13.2dB。这在很多场景下是不够的。比如你旁边有个强干扰,-13dB的旁瓣可能就把目标淹没了。

怎么办?加窗。就像做FFT时加窗一样,我们可以在阵列加权时引入窗函数。

常用的窗函数有:

  • 汉明窗:旁瓣约-43dB,但主瓣展宽约1.5倍
  • 布莱克曼窗:旁瓣约-58dB,主瓣展宽约2倍
  • 切比雪夫窗:可以指定旁瓣电平,但主瓣宽度会相应变化

加窗后的加权矢量变成:

w_windowed = w_uniform .* window_vector

其中window_vector是窗函数的系数。

我的建议:如果对旁瓣要求不高,用均匀加权就行,主瓣最窄。如果旁边有强干扰,我一般先用切比雪夫窗,设定-30dB的旁瓣电平,然后根据实测结果再调整。

3.4 DAS与CBF的对比总结

最后,我做个简单的对比,方便大家记忆:

对比项 DAS CBF
工作域 时域 频域(窄带)
核心操作 时延补偿 + 求和 相位补偿 + 求和
适用信号 宽带信号 窄带信号
计算复杂度 较高(需插值) 较低(可用FFT)
方向图 与CBF等价(窄带时) sinc函数形状

嗯,这一章的内容就到这儿。DAS和CBF虽然简单,但它们是所有波束成形算法的基础。你想想看,后面要讲的自适应波束形成,无非就是在CBF的基础上,加了一个“自适应”的权重优化过程。所以,把今天的内容吃透,后面的路就好走了。

下一章,我们聊聊波束方向图的栅瓣问题——这可是工程里最容易踩的坑之一。到时候我会分享一个我当年因为栅瓣问题差点搞砸项目的经历,保证让你印象深刻。