第三章 经典波束成形:延时求和(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的基础上,加了一个“自适应”的权重优化过程。所以,把今天的内容吃透,后面的路就好走了。
下一章,我们聊聊波束方向图的栅瓣问题——这可是工程里最容易踩的坑之一。到时候我会分享一个我当年因为栅瓣问题差点搞砸项目的经历,保证让你印象深刻。