ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

常规波束形成原理与工程实践:导向矢量、波束图及关键参数

常规波束形成原理与工程实践:导向矢量、波束图及关键参数 常规波束形成Conventional BeamformingCBF这个名字看着有点学院派但它其实遍布在声呐、麦克风阵列、雷达和5G通信里。我第一次认真啃CBF是在做水声阵列试验的时候八个阵元排成一条直线把权矢量对准目标方向船尾螺旋桨的宽带噪声瞬间被压下去一截那一刻我才真正明白为什么它被称作“常规”——因为它是所有波束形成算法的第一课也是MVDR、MUSIC这些“进阶玩法”的对标基准。这篇文章我打算把CBF的原理从头到尾推一遍把导向矢量、时延补偿、波束图这些概念用最直白的方式讲清楚再补一些工程里容易踩的坑。如果你是刚接触阵列信号处理的学生或者正在做声学阵列、射频阵列但手里只有现成库、没自己推过公式那这篇内容应该能帮你省下不少时间。1. 从一个直觉问题说起多个阵元如何“听”到一个方向1.1 为什么需要波束形成人在嘈杂的聚会上能听清朋友的说话声靠的是两只耳朵对声源方位的分辨。麦克风阵列、声呐基阵、雷达天线本质上干的是同一件事利用多个传感器在空间位置的差异把某个方向来的信号从各种干扰和噪声里“捞”出来。CBF解决的就是这个最基础的空间滤波问题——它不做任何统计优化只靠几何关系做时延补偿、然后加权求和所以也被称为延迟求和Delay-and-Sum波束形成器。拿一个最常见的生活场景举例智能音箱里排着几个麦克风你站在音箱左侧说“播放音乐”算法如果能判断声音从左侧来就可以只放大左侧方向的声波、抑制右侧电视发出的噪声。这个“只放大某个方向”的动作落到数学上就是给每个麦克风信号乘一个复系数再加起来。CBF就是这套操作里最简单、最直观的一种系数设计方法。1.2 CBF在整个算法谱系里的位置从算法家族来看CBF是一个非自适应波束形成器意思是它的权矢量只由波束指向决定跟接收数据的统计特性没关系。MVDR这一类自适应波束形成器会利用协方差矩阵来动态调整权值在干扰方向生成零陷效果更强但代价是对阵列误差特别敏感、计算量也大。MUSIC这类子空间类算法则更进一步能做超分辨角度估计但它需要先做特征分解对信噪比和阵元一致性要求更高。反观CBF它的优点就三条鲁棒、实时、物理意义清晰。阵列标定、目标检测、算法初版验证这些场景CBF永远是最优先被拉出来跑一遍的东西。我经常跟人说CBF就像一把经过校准的直尺后来自适应算法算出的结果到底靠不靠谱先拿CBF的结果比一比就知道了。很多实际工程——比如麦克风阵列的初步语音增强、声呐的快速扫描——用CBF完全够用这也是它至今没有被淘汰的原因。2. CBF原理推导从时延补偿到阵列响应2.1 信号模型与窄带假设推导前先把条件列清楚。假设有一个M元均匀线阵ULA阵元间距为d参考阵元放在原点。某个远场目标以角度θ入射因为距离足够远到达阵列的波前可以近似看作平面波。此时第m个阵元相对参考阵元的波程差就是md sinθ对应的时延为[\tau_m \frac{md \sin\theta}{c}]c是介质中的传播速度。这里有个很重要的窄带假设信号的载波频率远高于其带宽包络变化很慢。在这个前提下时延主要体现在载波相位差上包络本身几乎不变。于是第m个阵元收到的信号可以写成[x_m(t) \approx s(t) e^{-j\omega \tau_m} s(t) e^{-j2\pi md \sin\theta / \lambda}]其中ω是载波角频率λ是波长。把所有阵元的接收信号堆成一个列向量[\mathbf{x}(t) s(t) \cdot \mathbf{a}(\theta) s(t) \begin{bmatrix} 1 \ e^{-j2\pi d\sin\theta/\lambda} \ \vdots \ e^{-j2\pi (M-1)d\sin\theta/\lambda} \end{bmatrix}]这一步是整个阵列信号处理的核心抽象一个从θ方向来的信号在阵列上呈现出一种固定的“相位图案”而这个图案只和方向θ、阵列几何、波长有关。2.2 导向矢量是阵列的“指纹”上面这个列向量a(θ)就是导向矢量也叫阵列流形向量。它描述的是当单位幅度平面波从θ方向入射时各阵元之间固有的相位关系。不同方向对应不同的导向矢量因此它可以理解为阵列对空间的“指纹”映射。稍微注意一下相位参考点的选择。我这里选的参考是原点处的0号阵元所以向量第一项是1。如果把参考点挪到阵列中心导向矢量每一项会多出一个公共相位项但这对波束图的模值没有任何影响。实际工程里参考点怎么选都行只要代码里前后一致、别把相位参考搞混就行。2.3 核心推导CBF的权矢量和输出要让阵列“听”向θ0方向思路很直接把每个阵元信号里对应θ0方向的固有相位差补偿掉再累加。写成数学形式就是[y(t) \frac{1}{M}\sum_{m0}^{M-1} x_m(t) e^{j2\pi md \sin\theta_0 / \lambda}]这里乘的e^{j2πmd sinθ0/λ}正是导向矢量a(θ0)每一项的共轭。所以CBF的权矢量就是[\mathbf{w} \frac{1}{M}\mathbf{a}(\theta_0), \quad y(t) \mathbf{w}^H \mathbf{x}(t)]注意上标H表示共轭转置。接下来做一件有意思的事看看如果实际来波方向是θ这个输出会变成什么样。把x s·a(θ)代入[y(t) s(t) \cdot \frac{1}{M}\sum_{m0}^{M-1} e^{j2\pi md \sin\theta_0/\lambda} e^{-j2\pi md \sin\theta/\lambda} s(t) \cdot \frac{1}{M}\sum_{m0}^{M-1} e^{-j2\pi md (\sin\theta - \sin\theta_0)/\lambda}]当θ θ0时每一项的指数都是0M项同相相加输出就是s(t)即信号无失真通过。当θ偏离θ0时各项相位不再一致求和以后幅度必然小于1。也就是说这个输出天然就是一个关于来波方向的滤波器。把输出对输入信号的幅度比提取出来就是CBF的波束图[B(\theta) \left|\frac{1}{M}\sum_{m0}^{M-1} e^{-j2\pi md (\sin\theta - \sin\theta_0)/\lambda}\right|]这是一个等比级数可以闭式求和。令ξ πd(sinθ - sinθ0)/λ则[B(\theta) \left|\frac{\sin(M\xi)}{M\sin(\xi)}\right|]这个式子长得像傅里叶变换里的Dirichlet核后面所有关于波束宽度、旁瓣高度的结论都可以从它推出来。2.4 从匹配滤波角度看CBF有一点值得多说一句CBF本质上是一个空间匹配滤波器。它拿“期望方向的导向矢量”当作匹配模板和接收信号做内积。当到达方向正好匹配时内积最大失配越多输出越小。换句话说CBF是在“搜索”哪个方向上的导向矢量与接收数据最吻合和通信里的匹配滤波器、雷达里的脉冲压缩是同一个思想。如果把加权矢量在整个角度范围内扫描一遍得到的B(θ)画出来就是空间谱峰值对应的角度就是目标来向。这套扫描思路在测向、声学成像里非常常见。但因为CBF的波束有宽度空间谱里点目标看起来不是一根针而是一个有宽度的峰——这个峰的宽度就是分辨率极限下面细说。3. 关键参数与性能指标波束图、主瓣、旁瓣、分辨率3.1 波束图长什么样拿一个具体例子感受一下。设M 16d λ/2这是工程里最常见的半波长间距波束指向θ0 0°。用上面的公式画B(θ)在可见区域[-90°, 90°]内只会看到一个主瓣它关于0°对称两侧各有一串逐渐衰减的旁瓣。第一旁瓣的高度大约是-13.3 dB这个数字是均匀加权CBF的固有特征由Dirichlet核的旁瓣结构决定不会随阵元数改变阵元数改变的是旁瓣位置和密度不是第一旁瓣的相对高度。主瓣的零点位置也很好算令|sin(Mξ)/Msin(ξ)| 0第一个零点出现在Mξ π也就是sinθ - sinθ0 λ/(Md)。在θ00、小角度近似下第一个零点大约在θ ±λ/(Md)弧度处。而3 dB波束宽度约等于一半多点的第一零点宽度工程近似式可以写成[\Delta\theta_{3dB} \approx \frac{0.886\lambda}{Md\cos\theta_0} \text{ (弧度)} \approx \frac{50.8\lambda}{Md\cos\theta_0} \text{ (度)}]按上面M16、dλ/2、θ00算一下Md 8λ所以Δθ ≈ 50.8/8 ≈ 6.35°。也就是说这个16元阵列对法向入射信号的角度分辨能力大约在6°左右。3.2 分辨率取决于阵列孔径而非阵元数注意上面式子里的Md其实就是阵列总孔径长度L。所以决定分辨率的一是波长λ二是孔径L三是指向角θ0。阵元数M的作用是通过增大孔径来压窄波束——如果只增加阵元数但总孔径不变阵元间距变小主瓣宽度基本不变只是旁瓣数量变了抗空间混叠能力变差。这个点经常有人搞错以为“阵元越多波束越窄”其实严格说应该是“孔径越大波束越窄”。还有一个工程直觉频率越高相同物理孔径对应的λ越小分辨率越好。这解释了为什么声学阵列、水声阵列做高频段时波束可以很尖做低频段时波束就钝得像一团。低频目标在空间上本来就难分辨这不是算法的问题是物理孔径不足。3.3 栅瓣问题为什么一般要求阵元间距不大于半波长波束图里最需要警惕的是栅瓣。回到波束图公式当阵元间相位差变化达到2π时会出现另一个和主瓣增益几乎一样的峰。栅瓣出现的条件可以从相邻阵元的相位关系推出来相邻阵元在方向θ和指向θ0之间的相位差为2πd(sinθ - sinθ0)/λ当这个值等于±2π时[\sin\theta - \sin\theta_0 \pm\frac{\lambda}{d}]只要这个方程在[-1, 1]范围内有解栅瓣就会出现在可见区域内。要保证任何指向下都不出现栅瓣最保险的条件是d ≤ λ/2。因为当d λ/2时右边是±2已经超出sinθ的取值区间方程无解。做宽带系统时要特别小心阵距是按最高频率最短波长来卡标准而不是按中心频率。如果一个阵列工作频带到10 kHz但设计阵距时按5 kHz算那10 kHz的信号就会出现显著栅瓣空间上会“看到”假目标。我在实际调试中就遇到过一次扫描显示有两个等高大峰表面看像两个目标一查阵距才发现是栅瓣。3.4 窗函数加权压低旁瓣的代价均匀加权的CBF第一旁瓣只有-13.3 dB在很多场景不够用。比如强目标旁边的弱目标可能被旁瓣泄漏完全淹没。解决办法和数字信号处理里加窗一样对每个阵元用幅度加权比如汉明窗、汉宁窗、泰勒窗。加窗后第一旁瓣能压到-40 dB甚至更低但主瓣会明显变宽。这是一个铁律主瓣宽度和旁瓣高度不可兼得你不可能同时把波束做得又窄又干净。工程上怎么选如果做目标检测、测向需要尽量高的分辨率和角度精度那就用均匀加权或者浅窗如果做成像、对弱目标探测、有强干扰背景优先考虑低旁瓣窗。水声领域常用-30 dB到-40 dB泰勒窗折中效果不错。注意加窗还有一个附加作用把阵列的有效孔径“变软”边缘阵元贡献小等效孔径略降所以波束肯定比均匀加权宽一些。4. 从窄带到宽带CBF的实际工程扩展4.1 窄带假设什么时候失效CBF的推导建立在窄带假设上信号包络变化足够慢时延可以只当作载波相位旋转。但在语音、超声成像、水声chirp这类宽带信号面前这个假设很快就不成立了。你拿中心频率算的导向矢量在频带边缘就有偏差高频分量会指向偏转低频分量波束变宽结果整个波束被“抹糊”了。最初我用窄带CBF处理语音信号出来的声音像隔着一层墙就是这个问题。在阵列信号处理里判断“窄不窄”没有一个死标准一般经验是如果信号带宽B相对于中心频率f0来说小于十分之一左右窄带近似还可以凑合用如果B/f0到了百分之几十就必须上宽带波束形成了。4.2 时域延迟线实现回到最初的时延补偿宽带CBF最直接的做法是回到“时延补偿”这个物理本质每个阵元不补相位而是真正对它施加一个时间延迟然后再求和。延迟量就是定向所需的md sinθ0/c。不过在数字域里这个延迟不一定是采样周期的整数倍可能落在两三个采样点之间这时就需要分数延迟滤波器。实现方法有线性插值、sinc插值、多相滤波还有硬件里常用的Farrow结构。我比较推荐sinc插值它精度高、思路直观理想插值就是用sinc函数做卷积实际用加窗sinc截断到一定长度比如16到32阶。注意延迟量和采样率的关系如果采样率是48 kHz一个采样间隔大约20.8微秒在水声里声速1500 m/s这对应3厘米左右的波程差。声学阵列如果想精确到1毫米级时延分辨率远不够所以分数延迟不是可选项是必须项。4.3 频域子带方法工程里最常用的宽带走法更常见的工程路线是频域子带处理。思路很简单把接收信号分帧做FFT或者通过滤波器组分解成若干子带因为每个频点带宽足够窄窄带近似在每个子带内重新成立。这样在每个频点上重新计算导向矢量——注意波长λ要按该频点频率算——然后对每个频点分别做窄带CBF最后加权合成回时域波形。这个流程听起来绕但实现起来其实不复杂而且计算效率高特别适合麦克风阵列、声呐这种实时处理需求。关键技术点是时域分帧的窗函数和重叠率避免帧间不连续频点数量足够密时波束图在整个频带内都能保持稳定。我自己的经验是用时域延迟线适合对音质要求高、延迟预算宽松的离线处理频域子带适合实时流式处理比如智能音箱的波束成形前端。5. 实操要点与调试经验5.1 阵列误差对CBF的实际影响理论推导爽一上实物就露馅。最常见的误差来源有三个通道间增益不一致、通道间相位不一致、阵元实际位置和标称位置有偏差。增益误差会把波束图的旁瓣抬高相位误差会同时造成主瓣增益下降和指向偏移。位置误差的效果类似于随机相位扰动对高频影响尤其明显。可以量化感受一下理想16元阵列均匀加权时输出信噪比相比单阵元应该有10log10(16) ≈ 12 dB的提升但实测经常只有8到10 dB甚至更低。问题基本不在算法而在阵列一致性。要验证这一点最简单的办法是做一次“空载自检”所有通道同时采集一段无关的输入比如同一信号源直连对比各通道的幅度和相位是否一致。5.2 阵列校准方法校准的目标是估计出每个通道相对参考通道的复增益误差然后在波束形成前做补偿。我最常用的方法是远场单源校准把声源或信号源放到阵列远场、已知方向θcal发射一个单频连续波或线性调频然后估计每个通道相对参考通道的幅度比和相位差。估计方法不复杂取每个通道数据在发射频点处的FFT值除以参考通道同频点FFT值得到的就是复增益误差。做这个实验时要注意远场条件声源到阵列的距离至少要满足2L²/λL为阵列孔径否则波前不是平面波校准结果会带入近场误差。还有一个坑是反射房间里墙面、桌面反射会把校准信号搞脏我建议在校准时选开阔场地或者至少用时间窗把直达波从反射里分出来。5.3 从仿真到实测的推荐流程我每次做一个新的阵列系统都会按这个流程走一遍先纯仿真验证参数确定阵元数、阵距、工作频段、指向和窗函数然后用仿真数据把CBF、自适应算法、测向算法的基线结果跑出来存好接着实测采集数据先离线回放处理确认波形、频谱、时延都对得上最后再上实时系统。这套流程里最容易出问题的是第三步。多条通道必须严格同步采集共用一个时钟否则各通道间的相位参考是乱的所有波束形成结果全不可信。采集完看一眼原始波形如果两个通道间有明显固定时差多半是线缆长度不一致或采集时延没对准。CBF的调试并不神秘大部分问题都能在数据层找到答案。6. 常见问题排查速查表CBF本身公式不复杂复杂的是把它和真实系统结合起来。我把这些年遇到的高频问题整理成一个速查表方便现场排查。现象可能原因排查思路波束指向明显偏移阵元位置误差、通道相位漂移检查几何安装尺寸做通道幅相校准旁瓣异常抬高通道增益失配、附近有强反射体校准增益排除多径干扰出现多个等高大峰阵距超过半波长、宽带信号混叠按最高频率重算阵距要求输出信噪比提升远低于理论值通道间噪声相关性强、时间不同步检查采集时钟是否同源检查线缆屏蔽窄带处理宽带信号时声音发闷窄带假设失效改用频域子带或时延线实现低频目标完全没法分辨物理孔径不足增加孔径或使用低频段调算法没用实测波束图和仿真对不上通道频率响应不一致做宽带通道均衡而不是简单单频校准除了表里这些还想强调一个容易被忽略的小点CBF输出功率要做归一化处理。很多时候你看到的“波束变高”其实是通道增益累加的结果不是真实方向性提升。做阵列增益分析时统一用理想均匀加权CBF作为参考把实测结果归一到自己仿真出来的波束图上差异一眼就能看出来。最后聊一点个人体会。我在水声阵列上做过一次CBF对比试验理论波束图画得漂漂亮亮一到湖上实测就被边界反射和近场干扰搞得乱七八糟。后来我总结出一条经验CBF的公式五分钟能推完但它把问题焦点集中到了阵列几何误差、通道一致性和环境干扰上——这些才是真正要花时间的部分。每次搭新阵列我都会先跑一遍CBF当“体检”确认主瓣位置、旁瓣水平、阵列增益都和仿真对得上再上自适应算法。CBF很简单但它是一把最可靠的标尺这个位置短期之内没有别的算法能替代。
返回列表