进场先讲一个我自己的经历。几年前做被动声呐测向项目阵元拿到手第一件事不是跑什么高深算法而是老老实实把常规波束形成Conventional BeamformingCBF推一遍。当时觉得这东西太“常规”了无非是时延补偿再求和。真正推完才发现导向矢量、空间采样定理、主瓣宽度、栅瓣条件这些概念全是从这一个“简单加法”里长出来的。后面再接触Capon、MUSIC、ESPRIT脑子里始终有一根弦它们都是在CBF这个骨架上面做文章。这篇文章我就把这套推导过程完整写出来信号模型、导向矢量、加权规则、波束图闭式解、主瓣/栅瓣公式、协方差矩阵形式全部过一遍最后补充工程实现里我踩过的几个坑。如果你是做阵列信号处理、声呐、雷达或麦克风阵列的入门者或者想把这些公式真正落到代码里这篇应该能帮你省不少时间。1. 从“只听到想听的方向”说起CBF要解决的问题1.1 一个最直觉的场景声音怎么被“定向”增强想象你在一个嘈杂的展厅里面前有人跟你说话周围全是交谈声和杯碟碰撞声。人类听觉系统其实一直在做波束形成大脑根据两只耳朵收到的微小到达时间差增强来自正前方的信号同时削弱侧面噪声。这就是生物意义上的“延迟求和波束形成”。阵列信号处理做的事情完全一致用多个传感器麦克风、声呐阵元、雷达天线阵元同时采集空间不同位置的信号再对每个阵元的信号施加不同的时延窄带下表现为相位和幅度权重最后叠加到一起。如果加权时延恰好补偿了某个方向来波在阵元间产生的自然时延该方向信号就会同相叠加、幅度增强其他方向的信号由于相位没对齐叠加时互相抵消一部分被相对抑制。于是阵列有了方向选择性。CBF是所有这类方法里最直接的一种权重固定、不依赖数据统计特性纯粹做“时间对齐 求和”。它虽然简单却是理解所有自适应波束形成算法的一把钥匙。这里先给一个贯穿全文的数字直觉N元均匀线阵方向θ0的信号对齐叠加后信号幅度变成N倍功率变成N²倍而各阵元独立噪声的功率只叠加N倍。所以阵列处理增益是N这就是为什么用N个阵元信噪比理论上最多能提升N倍。注意这里是功率域的N倍很多人第一次推导会把幅度增益和功率增益混在一起我在第3节归一化部分会专门再强调。1.2 数学建模前的三个假设推导之前必须先建立物理模型否则公式很容易飘在空中。CBF的完整推导基于三个基本假设远场假设信号源距离阵列足够远到达阵列的波前近似为平面波而不是球面波。这样我们就能用单一入射角θ描述整个阵列接收到的信号而不需要考虑距离差。窄带假设信号中心频率为f0带宽足够窄使得在阵列孔径跨越的传播时间内信号复包络基本不变。这样时延可以近似为相移问题从“时域时延补偿”变成“频域相位补偿”数学上清爽很多。如果信号是宽带信号就需要把带宽拆成多个子带分别处理我在第6节会展开。理想通道假设阵元之间互耦忽略不计各阵元幅度和相位响应一致阵列处于均匀介质中。工程上互耦会破坏这个假设所以实测标定是绕不开的环节但原理推导阶段先把它放一边。这三个假设是所有阵列信号处理推导的“默认前提”。不懂这些假设后面公式一旦跟实测对不上你都不知道该怀疑哪里。2. 数学准备阵列流形向量就是一组“方向标签”2.1 位置差如何变成相位差考虑一个N元均匀线阵阵元间距为d沿直线排列。远场窄带平面波从方向θ入射这里的θ定义为来波方向与阵列法线的夹角。波前先到达参考阵元第0个阵元再依次到达第n个阵元。由于波前是平面第n个阵元相对参考阵元的传播路径差为$$\Delta_n n d \sin\theta$$路径差除以传播速度c就是时间差$$\tau_n \frac{n d \sin\theta}{c}$$窄带假设下时间差转换为相位差$$\phi_n 2\pi f_0 \tau_n \frac{2\pi n d \sin\theta}{\lambda}$$其中λ c/f0为波长。这是整个推导的核心公式后面所有内容都从这里长出来。随便代入一组数字感受一下d/λ0.5、θ30°时相邻阵元相位差为2π×0.5×0.5π/2也就是90°非常可观。如果参考阵元收到的信号记为s(t)第n个阵元收到的信号忽略噪声和幅度衰减就是$$x_n(t) s(t) e^{-j 2\pi n d \sin\theta / \lambda}$$注意指数里的负号取决于坐标定义不同教材可能差一个共轭。关键是整个推导过程保持同一套符号约定不要混用。2.2 导向矢量的定义与角度约定把N个阵元的相对相位差放进一个列向量这就是阵列流形向量也叫导向矢量或方向向量$$a(\theta) \left[1,\ e^{-j 2\pi d \sin\theta/\lambda},\ e^{-j 4\pi d \sin\theta/\lambda},\ \cdots,\ e^{-j 2\pi (N-1) d \sin\theta/\lambda}\right]^T$$这个向量的物理含义非常直接来自方向θ的单位幅度窄带信号在N个阵元上形成的相位模式。它相当于给每个角度做了一张“N维复数标签”。在阵元间距满足d≤λ/2的条件下不同角度对应不同导向矢量这就是阵列能分辨方向的根本原因。这里必须强调角度定义θ的取值范围通常是[-90°, 90°]0°是阵列法线方向也叫侧射方向±90°是端射方向来波与阵列共线。这种定义下公式里出现的是sinθ。如果换成“与阵列轴向的夹角”公式就变成cosθ初学者最容易在这里被绕晕。另外导向矢量的相位参考点选在哪一个阵元会改变向量的整体相位偏移但不会影响波束形成输出功率因为二次型计算时共同相位会抵消。所以参考阵元位置在实际中是个自由参数。3. CBF加权推导从“对齐时延”到“匹配导向矢量”的两条路线3.1 路线一从时延补偿直接推导回到最原始的直觉我们要让来自方向θ0的信号在求和前“相位对齐”。已知第n个阵元相对参考阵元的相位延迟是n倍的基本相位φ0 2πd sinθ0/λ那就在求和前对第n个阵元乘上补偿因子e^{j n φ0}。这样θ0方向信号在各阵元的相位都校正到一致$$y(t) \sum_{n0}^{N-1} e^{j n \phi_0} x_n(t)$$把θ0方向信号代入即 (x_n(t) s(t) e^{-j n \phi_0})得到$$y(t) N s(t)$$信号幅度被放大了N倍。用向量形式表达这个加权求和就是$$y(t) a(\theta_0)^H x(t)$$也就是说CBF的权重向量就是导向矢量本身(w a(\theta_0))。上标H表示共轭转置因为接收信号里是e^{-jφ}权重里是e^{jφ}两者相乘相位正好归零。如果希望输出保持信号幅度不变就把权重除以N即(w a(\theta_0)/N)。此时y(t)s(t)信号幅度不放大而各阵元独立噪声的功率会从σ²降到σ²/N。这就是N倍信噪比提升的全部来源信号同相叠加功率×N²噪声非相参叠加功率只×N。很多推导直接跳过了这个信噪比变化的解释实际上这是“为什么用阵列”最核心的动机。3.2 路线二匹配滤波视角为什么w取导向矢量除了“对齐相位”的直觉还有一个更深层的理解匹配滤波。在N维信号空间里如果要检测来自方向θ0的信号s(t)a(θ0)在加性高斯白噪声背景下最优线性检测器就是把接收向量投影到信号方向也就是权重正比于信号本身$$w \propto a(\theta_0)$$这不只是“对齐相位”而且是信噪比最优的结论。两条路线殊途同归一条从几何出发一条从统计出发。CBF之所以被称为“常规”正因为它在白噪声环境下确实是统计最优的。但这个最优性有个明确边界——一旦噪声不是白噪声或者存在强相关干扰固定权重就不再最优。这个边界正是Capon、LCMV等自适应波束形成算法存在的理由也是为什么我一直建议先把CBF吃透再往深学。3.3 归一化除以N还是不除以N这是一个工程里经常引发争论的细节。不同教材、不同代码库对CBF的归一化约定不统一直接导致输出绝对值对不上。我梳理了三种常见约定约定权重形式输出特点典型用途无归一化w a主波束输出为N·s波束图分析、方向性观察1/N幅度归一w a / N主波束输出为s信号波形恢复、幅度估计1/N功率归一空间谱P a^H R a输出约等于信号功率空间谱估计、测向我个人做波束扫描看角度峰时习惯用无归一化版本峰值高度直观反映阵列增益如果后续要恢复波形或估计真实幅度就必须用1/N否则幅度会大N倍。更隐蔽的是空间谱表达式 (P(\theta) a(\theta)^H R a(\theta)) 里的量纲问题这里的R是采样协方差矩阵P的量纲是信号功率不需要额外除以N²但如果用幅度归一化权重 (w a/N)就应写成 (P(\theta) w^H R w)两者相差N²倍画成dB图就是几十dB的差距。动手写代码前先确认自己用的是哪一种。4. 波束图长什么样闭式解、主瓣宽度和栅瓣判据4.1 Dirichlet核形式的完整推导波束图描述的是“阵列对各个方向来波的幅度响应”。假设聚焦方向为θ0、扫描方向为θ权重取wa(θ0)则波束图$$B(\theta) w^H a(\theta) \sum_{n0}^{N-1} e^{j n \phi_0} e^{-j n \phi} \sum_{n0}^{N-1} e^{-j n (\phi - \phi_0)}$$其中 (\phi 2\pi d \sin\theta/\lambda)(\phi_0 2\pi d \sin\theta_0/\lambda)。这是一个等比数列求和。设 (r e^{-j\Delta\phi})其中 (\Delta\phi \phi - \phi_0)则$$B(\theta) \frac{1 - r^N}{1 - r} \frac{1 - e^{-jN\Delta\phi}}{1 - e^{-j\Delta\phi}}$$分子分母同时提取半角因子这是化简模值的关键一步$$1 - e^{-jN\Delta\phi} 2j e^{-jN\Delta\phi/2} \sin(N\Delta\phi/2)$$$$1 - e^{-j\Delta\phi} 2j e^{-j\Delta\phi/2} \sin(\Delta\phi/2)$$代入后得到$$B(\theta) e^{-j(N-1)\Delta\phi/2} \frac{\sin(N\Delta\phi/2)}{\sin(\Delta\phi/2)}$$这里包含一个线性相位项和一个幅度项。大多数场景只关心幅度$$\left|B(\theta)\right| \left|\frac{\sin(N\Delta\phi/2)}{\sin(\Delta\phi/2)}\right|$$这就是Dirichlet核形式。当Δφ→0时该极限等于N对应主瓣峰值。这个表达式能回答所有关于波束形状的问题分子为零、分母不为零时波束图出现零点分子和分母同时为零即Δφ2kπ时所有阵元相位再次对齐产生等高的主瓣或栅瓣主瓣两侧的旁瓣由分子sin的振荡决定第一个旁瓣相对主瓣高度约-13.3dB这个数字对均匀加权线阵是固定的不管N取多少。4.2 主瓣宽度的工程估算0.886λ/(Nd)从哪来主瓣宽度是阵列角度分辨能力的度量。第一个零点位置让分子第一次取零(N\Delta\phi/2 \pi)即Δφ 2π/N。代入Δφ的定义$$\sin\theta - \sin\theta_0 \frac{\lambda}{N d}$$这是主瓣零点偏移量。两个零点之间的宽度在sin域为2λ/(Nd)。但零点宽度不是工程上最常用的-3dB宽度。半功率宽度需要求解$$\left|\frac{\sin(N\Delta\phi/2)}{N\sin(\Delta\phi/2)}\right| \frac{1}{\sqrt{2}}$$这个超越方程没有初等闭式解工程上通常用近似公式均匀线阵、侧射方向$$\text{BW}_{3dB} \approx 0.886 \frac{\lambda}{N d} \ \text{弧度}$$换算成角度并考虑扫描角偏离法线时波束在角度域会变宽$$\text{BW}_{3dB}(\theta_0) \approx \frac{0.886\lambda}{N d \cos\theta_0}$$原因很简单sin域的波束形状不随扫描角变化但映射回角度域时dθ d(sinθ)/cosθ分母的cos因子把角度域波束拉宽了。代入一组数字感受一下N32、dλ/2时侧射3dB波束宽度约0.886/(32×0.5)×180/π≈3.17°非常接近常见雷达系统的实际波束宽度量级。这里要额外强调一个很多人搞混的概念决定分辨率的是阵列孔径LNd而不是阵元数N。如果d减半而N翻倍孔径不变主瓣宽度也不变。评价一个阵列系统时记住控制分辨率的物理量是“以波长为单位的孔径尺寸”不是传感器数量。4.3 栅瓣的本质空间采样定理栅瓣可以用“空间采样混叠”来理解。当Δφ2kπ时分子分母同时为零波束图出现与主瓣等高的极大值。也就是说当$$\frac{d(\sin\theta - \sin\theta_0)}{\lambda} k$$来自θ方向的信号与来自θ0方向的信号在阵列上形成的相位差恰好相差整数个周期阵列无法区分这两个方向。这跟时域采样率不足导致的频谱混叠在数学上完全同构只是把时间轴换成了空间轴。避免可见区域内出现栅瓣的条件最保守也最常用的就是$$d \le \frac{\lambda}{2}$$半波长间距不是随便拍脑袋定的它就是空间采样定理的直接结果。实际中如果只关注某个窄扇区比如±30°阵元间距可以适当放宽到约2λ/3而不产生栅瓣但工程上为了标定容差和波束扫描灵活性绝大多数均匀线阵还是守住λ/2。如果你在仿真里看到波束图出现等高的“额外主瓣”第一反应就该检查d/λ是不是超过0.5了。5. 从单快拍走向统计估计CBF的空间谱输出5.1 为什么工程上总是用协方差矩阵R前面的推导集中在单快拍线性输出y(t)。但实际做方向估计时我们通常不只看单个时刻的输出而是统计一段时间内波束输出的平均功率。原因有两层信号和噪声都是随机过程单个快拍的相位起伏会掩盖功率差异多快拍平均还能降低估计方差。把N个阵元在k时刻的采样写成一个向量x(k)采样协方差矩阵为$$\hat{R} \frac{1}{K}\sum_{k1}^{K} x(k)x(k)^H$$那么方向θ的CBF输出功率可以写成$$P(\theta) a(\theta)^H \hat{R} a(\theta)$$这个表达式其实等价于对所有快拍波束输出 (y(k)a(\theta)^H x(k)) 的模平方求平均$$P(\theta) \frac{1}{K}\sum_{k1}^{K} |y(k)|^2 a(\theta)^H \left(\frac{1}{K}\sum_{k1}^{K} x(k)x(k)^H\right) a(\theta) a(\theta)^H \hat{R} a(\theta)$$这段话是理解“为什么所有空间谱估计算法都围绕R展开”的钥匙。CBF是对R做固定权重的二次型Capon是对R求逆后再做二次型MUSIC是对R做特征分解后取噪声子空间投影。R是整个阵列信号处理的中心对象而CBF是理解这个对象的最短路径。5.2 波束扫描的完整流程用CBF做角度估计的工程流程浓缩下来就是五步采集K个快拍的N通道数据整理成矩阵XN×K估计协方差矩阵R XX^H/K生成角度扫描网格比如-90°到90°步进0.1°对每个网格角度计算导向矢量a(θ)再计算P(θ) a^H R a找到P(θ)的峰值对应角度就是目标方向估计值。给一段MATLAB/Octave风格的示意代码方便直接落地实验% N: 阵元数, d: 阵元间距(m), lambda: 波长(m) % X: N x K 快拍数据矩阵 R X * X / size(X, 2); theta -90:0.1:90; P zeros(size(theta)); for i 1:length(theta) a exp(-1j * 2 * pi * d * sind(theta(i)) * (0:N-1) / lambda); P(i) abs(a * R * a); % 无归一化版本 end [~, idx] max(P); est_angle theta(idx); plot(theta, 10*log10(P / max(P))); xlabel(角度 (deg)); ylabel(归一化功率 (dB));这段代码里我刻意保留了循环。虽然改成矩阵运算更快但循环结构跟公式一一对应排查错误时更直观。另外注意MATLAB里sind用的是度sin用的是弧度混用会导致主瓣方向整体偏移。5.3 与Capon波束形成的一页纸对比CBF固定权重等于导向矢量的做法在有一个强干扰时会暴露短板假设θ0方向有目标、θj方向有强干扰CBF的波束图在θj处不会自动形成零陷干扰会从旁瓣漏进来。CaponMVDR在保证目标方向增益为1的约束下最小化输出功率$$\min_w \ w^H R w \quad \text{s.t.} \quad w^H a(\theta_0) 1$$解为$$w_{capon} \frac{R^{-1}a(\theta_0)}{a(\theta_0)^H R^{-1}a(\theta_0)}$$输出功率$$P_{capon} \frac{1}{a(\theta_0)^H R^{-1}a(\theta_0)}$$两种方法的核心差异整理成一张表对比维度CBFCapon权重是否依赖数据否固定w a(θ0)是依赖R的估计白噪声下是否最优是是存在强干扰时干扰从旁瓣漏入自适应形成零陷模型失配角度误差、互耦鲁棒性较强敏感可能自消目标计算量低一次二次型较高需要矩阵求逆角度分辨率受瑞利限限制可优于瑞利限我的经验是先上CBF打底观察谱峰形态如果干扰确实严重再切换到Capon同时对R做对角加载加载量一般取R对角线均值的0.01到0.1倍。这套组合拳在实测数据里比单独用任何一个都稳。6. 推导之外工程实现中绕不开的几个坑6.1 角度定义和sin/cos的约定陷阱我第2.2节提过一次角度定义这里必须再说透因为这是代码review里最高频的错误来源。同一个阵列不同资料对θ的定义不同法线角定义θ0°为阵列法线方向θ±90°为端射方向相位差为2πd sinθ/λ轴向角定义θ0°为阵列轴向相位差变成2πd cosθ/λ还有些代码把入射角定义为与水平面的夹角需要自己做sin/cos转换。如果你在复用别人的代码时发现波束图“左右镜像”或者零点对不上先检查角度定义而不是怀疑公式本身。另外MATLAB的sind/rad转换、Python里math.sin用弧度但numpy.sin同样用弧度单位混用导致的“主瓣方向偏了”问题我在实际项目里至少见过三次。6.2 宽带信号时延补偿与子带分解窄带假设在宽带场景下会失效因为不同频率成分对应的相移不匹配。工程上处理宽带信号有两条路线一是真正的时域时延补偿也就是延迟求和。对每个阵元施加纯时延τ_n nd sinθ0/c再求和可以天然处理宽带信号。但时延往往是采样间隔的小数倍需要插值滤波器实现成本较高。二是频域子带分解这是声呐和麦克风阵列中最常用的稳健方案。把每个通道信号做FFT将宽带划分成若干窄带子带每个子带用自己对应的中心频率和波长做CBF最后把各子带输出功率累加。我实际项目中更常用第二种。FFT帧长要保证子带内信号近似窄带每个频点独立计算导向矢量然后合成宽带空间谱。这个方案的优点是频率自适应能处理任意宽带信号代价是帧内信号需平稳非平稳场景下估计质量会下降。如果要深入宽带CBF的推导记住一句话就够了宽带波束形成本质上是一组不同频率窄带CBF的加权平均每个频率的导向矢量里波长必须用该子带的中心频率计算不能用整个频带的平均波长。6.3 阵元间距、频率和角度的换算细节最后一个工程坑也是最常见的一类到底用哪个波长计算d/λ。如果做固定阵列测向信号往往是频带而非单频。阵元间距要以最高频率对应的最短波长λ_min为约束即d ≤ λ_min/2这样才能保证整个工作频段都不出现栅瓣。如果只按中心频率设计高频段就会出现空间混叠实测中表现为多个方向的模糊峰。如果做子带CBF每个子带的波长都不同导向矢量必须按当前子带频率逐点计算不能用全局平均波长近似。高频子带用错了波长旁瓣会明显抬升波束图整体畸变。还有一个关于角度网格的经验把扫描角度映射到sin域后在sin域均匀划分网格往往比在角度域均匀划分更稳定尤其是扫描范围覆盖端射附近时。因为sin域的波束形状几乎不随扫描角变化而角度域网格在端射附近会引入不均匀的波束畸变。这条经验也是从波束图推导里自然带出来的很多工程细节其实都藏在公式结构里。如果你拿到的阵列不是均匀线阵而是圆阵、L型阵或随机稀疏阵导向矢量不再有等比求和的闭式解但核心思路完全不变按阵元位置计算相位差 (\phi_n -2\pi \hat{k} \cdot p_n)其中(\hat{k})是来波方向的单位矢量(p_n)是第n个阵元的位置向量。CBF的输出公式 (P(\theta) a(\theta)^H R a(\theta)) 在任何阵型下都成立变化的只是a(θ)的表达式。能把今天这套推导迁移到任意阵列构型上CBF这个“地基”才算真正打牢了。