均匀直线阵常规波束形成:从导向矢量到波束图全解析
简介针对均匀直线阵常规波束形成CBF的MATLAB仿真资源面向无线通信、雷达与声纳领域的工程师与学习者覆盖均匀直线阵列信号模型、相位差控制与定向波束合成等核心知识点。资源包共2个文件均为.m格式的MATLAB脚本整体大小仅2KB代码精简完整呈现了从信号采集、相位校正、权矢量计算到波束合成与扫描的典型处理流程。目前已有1689人学习下载适合初学阵列信号处理或正在为课程实验、课题仿真寻找可直接运行示例的读者。脚本虽小却能直观展示CBF中方位谱图与波束指向的关系帮助理解阵元位置差异带来的相位差以及权矢量对波束形状的调控作用为后续自适应波束形成等进阶方向打下基础。 很多人第一次接触阵列信号处理上手的仿真对象几乎都是均匀直线阵。这个模型结构够简单N个阵元等间距排在一条直线上却能承载波束形成里最核心的全部概念。常规波束形成Conventional Beamforming, CBF看起来朴素——不就是延时求和嘛——但它恰恰是理解MVDR、LCMV、MUSIC这些进阶算法的出发点和对比基准。这篇文章不绕弯子直接围绕均匀直线阵的常规波束形成把从信号模型、数学推导到仿真代码、工程坑点的完整链路梳理一遍。适合刚入门阵列信号处理的学生、做雷达和声呐信号处理的工程师以及任何想把波束图背后的直觉彻底搞清楚的人。1. 均匀直线阵的数学模型延迟差、导向矢量与半波长约束1.1 远场平面波假设下的核心几何关系要理解均匀直线阵先得建立一个理想化的前提远场平面波假设。这个假设说的是信号源离阵列足够远到达阵列时波前可以近似看成平面波而不是球面波。这样一来信号到达每个阵元的入射角度完全一致阵元之间的差别只体现在波程差上。假设阵列有N个阵元间距为d所有阵元排列在一条直线上。取第1个阵元作为参考点当一个窄带信号从与阵列法线方向夹角为θ的方向入射时第n个阵元相对参考阵元的波程差就是Δ_n (n-1)·d·sinθ这个式子是整个均匀直线阵分析的起点。为什么是sinθ而不是cosθ因为波程差取决于传播方向在阵列轴线方向上的投影分量这个投影恰好是入射角的正弦。θ定义为与法线的夹角当信号从正前方来时θ0波程差为零所有阵元同时接收到信号当信号从端射方向来时θ±90°波程差达到最大。波程差对应时间延迟第n个阵元相对参考阵元的延迟时间是τ_n (n-1)·d·sinθ/c其中c是介质中的传播速度。在窄带信号条件下这个时间延迟可以进一步转化为相位差。设信号载波频率为f波长λc/f那么相位差为φ_n 2πf·τ_n 2π(n-1)·d·sinθ/λ这里用到了波长和频率的关系把时间域的延迟映射到了相位域。这个转化极其关键因为后续的波束形成权向量设计基本都工作在相位域而不是直接操作时间延迟。1.2 导向矢量的定义与物理含义有了上面的相位差就可以定义导向矢量Steering Vector这是理解波束形成最重要的一把钥匙。导向矢量描述了来自某个方向θ的单位幅度信号在阵列各阵元上形成的复振幅分布a(θ) [1, e^{j2πd·sinθ/λ}, e^{j4πd·sinθ/λ}, ..., e^{j2π(N-1)d·sinθ/λ}]^T注意第一个元素是1因为它对应参考阵元。导向矢量本质上就是这个方向上信号的空间特征它把所有阵元之间的相对相位关系编码在一个N维复向量里。站在数学角度看当入射角θ变化时导向矢量在N维复空间中划出一条轨迹而波束形成要做的事情就是在这条轨迹上做投影和筛选。提示导向矢量有时也记作a(θ)或v(θ)不同教材符号不同但含义完全一致——对某个方向的响应向量。推导导向矢量时有一个容易忽略的细节相位是相对于参考阵元的而参考阵元的选择是任意的。把第1个阵元选为参考第一个元素就是1把阵列中心选为参考导向矢量会呈现共轭对称的形式在某些推导中数值稳定性更好。我仿真时习惯用第1个阵元做参考逻辑更直观工程中也方便和实际硬件对齐。1.3 为什么阵元间距通常取半波长均匀直线阵里最经典的约束条件就是阵元间距d ≤ λ/2也就是常说的一半波长。这个约束并不是随便拍脑袋定的它本质上是一个空间采样定理。把阵列想象成对空间连续波场进行采样的装置阵元间距d就是空间采样的间隔。根据奈奎斯特采样定理的推广为了避免空间混叠即栅瓣采样间隔必须满足d ≤ λ/2。如果阵元间距超过半波长某些方向的物理来波会被错误的栅瓣方向捕获导致方向估计出现严重的模糊。具体来说栅瓣出现的位置满足以下条件d/λ·(sinθ - sinθ_0) m, m ±1, ±2, ...其中θ_0是波束指向方向θ是栅瓣出现的角度。当dλ/2时sinθ - sinθ_0的最大值为2当且仅当m0时成立也就是说在可见空间范围内不存在栅瓣。一旦dλ/2比如dλ那么当θ_00°时θ±90°方向就会出现栅瓣——这两个方向来的信号会被完全无差别地接收。实际工程中阵元间距取半波长还有一个工程上的考虑间距太大会产生栅瓣间距太小又会引发阵元间互耦增强的问题。互耦效应会造成实际的导向矢量偏离理想值影响波束形成性能。所以半波长既是理论上的临界值也是工程实践中的经验值。当然在某些特殊场景下会有例外比如稀疏阵设计会故意让dλ/2但通过非均匀布阵来抑制栅瓣那属于更进阶的讨论范围。2. 常规波束形成把延时补偿变成加权求和2.1 时间延时的本质与相移近似常规波束形成的思想最简单的一句话概括就是把来自期望方向的信号在各阵元上对齐然后叠加。由于信号到达每个阵元的时间不同要对齐就需要给每个通道施加不同的延迟补偿。这就是延时求和Delay-and-Sum这个名字的来历。窄带条件下时间延迟可以近似成相移。为什么可以这样近似因为窄带信号的包络变化很慢载波是近似正弦的延迟τ相当于载波相位偏移2πfτ。如果信号是宽带的包络也发生了明显位移就不能简单地用相移代替时延了需要考虑更复杂的处理方式比如子带分解或分数时延滤波器组。对于均匀直线阵方向θ_0的常规波束形成权向量直接取这个方向的导向矢量w a(θ_0)阵列输出为y(t) w^H · x(t)其中x(t)是阵列接收信号向量w^H表示共轭转置。代入各阵元的输入展开来看y(t) Σ_{n1}^{N} x_n(t)·e^{-j2π(n-1)d·sinθ_0/λ}这就把延时的绝对值转化成了相移的相对值。每个阵元的信号乘上一个与期望方向相关的复指数即相位补偿再求和。当来波方向恰好等于θ_0时补偿后的各阵元信号相位完全相同叠加后幅度最大当来波方向偏离θ_0时补偿不充分各通道相位有差异叠加后幅度衰减。这个完全对齐-峰值输出和不对齐-衰减输出的机制就是波束形成最底层的物理逻辑。2.2 从期望方向相消到波束图的数学表达波束图Beam Pattern描述的是阵列对不同方向来波的增益响应。把权向量w固定为a(θ_0)扫描所有可能的入射角θ得到的归一化响应就是波束图B(θ) |w^H·a(θ)| |Σ_{n1}^{N} e^{j2π(n-1)d(sinθ - sinθ_0)/λ}|这个式子形如等比数列求和可以解读为|Σ_{n0}^{N-1} e^{jnx}| |sin(Nx/2) / sin(x/2)|其中 x 2πd(sinθ - sinθ_0)/λ也就是说均匀直线阵常规波束形成的波束图实际上是一个Dirichlet核周期性sinc函数的形式。主瓣出现在θθ_0处旁瓣向两侧延伸。这个过程和数字信号处理里的离散时间傅里叶变换DTFT非常相似——阵列在空间域的均匀采样对应波数域的周期性频谱波束图就是空间窗函数的傅里叶变换幅度。这里的为什么是Dirichlet核值得停下来想一想。均匀加权在所有阵元上幅度相同相当于一个矩形空间窗。矩形窗的傅里叶变换当然就是sinc类函数对应到空间域就是主瓣加一系列衰减的旁瓣。如果换个思路给各个阵元加上幅度锥化也就是空间加窗比如Hamming窗、Taylor窗旁瓣会被压低但代价是主瓣会展宽。这个权衡在波束形成里叫空间窗函数设计它的数学本质和时域滤波器设计完全同构。2.3 扫描过程一次做一次矩阵运算实际应用里我们要的不是仅仅看单个方向而是对整个角度范围进行扫描得到各个方向的输出功率。把扫描角度范围[-90°, 90°]离散成K个点每个扫描角度θ_k对应一个导向矢量a(θ_k)常规波束形成的扫描输出为P(θ_k) |a^H(θ_k)·x|^2写成矩阵形式把所有扫描角度的导向矢量排列成矩阵AN行K列那么一次扫描过程就是矩阵乘法和逐元素取模平方的操作。在MATLAB或者Python里这就是两行代码的事但理解了底层是在对每个入射方向做相关运算才能明白后来Capon、MUSIC等方法究竟改进了什么——后者不再是简单地用期望方向的导向矢量做匹配而是引入数据协方差矩阵的估计和特征分解来获得更尖锐的空间谱。常规波束形成也被称为Bartlett波束形成这个名字来自经典功率谱估计里的Bartlett方法。它与功率谱估计的类比非常贴切时间序列的功率谱是把信号对一系列复正弦不同频率做相关得到的空间谱则是把阵列快拍对一系列导向矢量不同方向做相关得到的。频率和空间角度在这里构成了完美的对偶。3. 三个指标看懂波束图主瓣宽度、旁瓣电平、栅瓣3.1 半功率波束宽度与阵列孔径的关系波束图出来以后最关心的第一个指标就是主瓣的宽窄它直接决定了阵列的角度分辨能力。半功率波束宽度Half-Power Beamwidth, HPBW定义为增益相对峰值下降3dB的两个角度之间的间隔。对于均匀直线阵在波束指向法线方向θ_00°时半功率波束宽度有一个常用的近似公式HPBW ≈ 0.886·λ/(N·d)弧度换算成角度HPBW ≈ 50.8·λ/(N·d)度从这个式子能读出几层信息。第一阵元数N越多波束越窄分辨率越高。第二阵元间距d越大在不超过半波长的前提下有效孔径LN·d越大波束越窄。第三工作频率越高波长λ越短波束也越窄。归根结底决定波束宽度的是阵列的物理孔径相对于波长的比值N·d/λ也就是电尺寸。当波束扫描偏离法线方向时波束会变宽公式修正为HPBW(θ_0) ≈ 50.8·λ/(N·d·cosθ_0)度这里的cosθ_0源于投影效应阵列在某个方向的等效孔径投影长度为Nd·cosθ_0。扫描角越大投影越短波束越宽。所以在设计相控阵系统时大角度扫描会导致分辨率下降这是物理规律决定的无法通过算法彻底消除只能通过增大阵列孔径来缓解。3.2 均匀加权下的第一旁瓣电平主瓣旁边那对耳朵就是第一旁瓣它是最讨厌的东西——强干扰信号从旁瓣方向进来即使不在主瓣指向方向也会在输出端形成显著的响应。均匀加权下第一旁瓣电平是固定的约-13.26dB。这个数值是怎么来的对Dirichlet核|sin(Nx/2)/sin(x/2)|做包络分析当N较大时第一旁瓣峰值出现在Nx/2≈3π/2附近算出来的归一化值是2/(3π)≈0.212换算成dB就是20·log10(0.212)≈-13.26dB。有意思的是这个值与阵元数N无关——不管阵列是8个阵元还是64个阵元均匀加权的第一旁瓣电平都是-13.26dB。唯一变化的是旁瓣的位置以及每根刺的宽度。压低旁瓣的经典办法是幅度锥化也就是对每个阵元的权向量额外乘上一个窗函数系数。我在做声呐阵列数据处理时经常用-30dB的Taylor窗或Hamming窗代价是主瓣大约展宽1.3~1.5倍。比如原来HPBW是8°加窗后可能变成11°左右。选窗函数本质上就是在主瓣宽度和旁瓣抑制之间做折中没有免费的午餐。如果仿真里出现旁瓣高得离谱的情况先检查权向量是不是没有做归一化再看是不是阵元间距超过了半波长——这两个是最高频的出错原因。3.3 栅瓣的触发条件与可见区的概念栅瓣是均匀直线阵最需要警惕的现象。前面已经推导过栅瓣条件d/λ·(sinθ - sinθ_0) m但从工程角度更容易理解的说法是当扫描范围足够大时在某个非期望方向各阵元的相位补偿恰好又对齐了形成第二个甚至第三个峰值。以d1λ、θ_00°为例sinθ - sinθ_0的取值在[-1,1]之间当m0和m±1时都能取到有效解因此在±90°方向会出现两个完全对称的栅瓣。这三个瓣高度完全相同来波方向根本无法区分。这就是为什么标准阵列设计都推荐dλ/2此时sinθ - sinθ_0的最大值为2m±1没有有效解把栅瓣彻底推到了可见区之外。有一个相关的概念叫可见区Visible Region指波束图在[-90°, 90°]这一段实际可见的角度范围。整个波束图其实在sinθ域上是周期性的周期为λ/d可见区只是其中一个周期的窗口。d≤λ/2保证了可见区里最多只出现一个完整的主瓣。在做波束图仿真时很多人把角度坐标画成θ而不是sinθ导致对栅瓣的位置判断容易出错。我习惯先画出sinθ域的波束图来确认周期性结构再映射回角度域这样可以一目了然地看到栅瓣是否落在可见区内。4. MATLAB复现从公式到可运行的波束图代码4.1 仿真参数设计与核心代码理论说再多不如直接跑一段代码来得直观。下面这份MATLAB代码实现了一个标准均匀直线阵的常规波束形成波束图绘制参数可以随意调整。% 均匀直线阵常规波束形成CBF波束图仿真 clear; close all; clc; %% 参数设置 N 16; % 阵元数 d 0.5; % 阵元间距以波长为单位0.5即半波长 theta0 0; % 波束指向角单位度 theta -90:0.1:90; % 扫描角度范围 theta_rad theta * pi / 180; %% 构造导向矢量矩阵 % 每个扫描角对应一列导向矢量画成矩阵一次性算完 n_idx (0:N-1); % 阵元索引列向量 % 扫描方向导向矢量矩阵尺寸 N x length(theta) A_scan exp(1j * 2 * pi * d * n_idx * sin(theta_rad)); % 期望方向的导向矢量作为权向量 w exp(1j * 2 * pi * d * n_idx * sin(theta0 * pi / 180)); %% 计算波束图 beam abs(w * A_scan); % 复数内积后取模 beam beam / max(beam); % 归一化 beam_dB 20 * log10(beam eps); % 转换为dB加eps防止log0 %% 绘图 figure; plot(theta, beam_dB, b-, LineWidth, 1.5); grid on; xlabel(入射角 (度)); ylabel(归一化幅度 (dB)); title([ULA CBF, N, num2str(N), , d0.5\lambda, \theta_0, num2str(theta0), °]); axis([-90 90 -60 0]);这段代码的核心只有三行计算构造扫描导向矢量矩阵A_scan构造权向量w然后做一次矩阵内积再取模。这里的关键技巧是用矩阵运算替代for循环N16、扫描点数1801时运行时间几乎可以忽略。如果阵元数增加到上千或者扫描点更密矩阵运算的优势就更明显了。4.2 跑完代码后怎么看图仿真结果解读运行上面的代码你会看到一条典型的波束图曲线主瓣在0°方向达到0dB两侧分布着若干旁瓣整体趋势随角度增大而衰减。把光标放到主瓣峰值两侧的-3dB位置量出的宽度大约就是3.2°左右——这与公式50.8/(16×0.5)6.35°似乎对不上这里要注意HPBW近似公式用的是弧度制下的精确表达式再换算实际上半功率宽度对应sinθ域的宽度当θ_00°时主瓣在sinθ域上是等宽的。用精确公式算出来N16、d0.5λ的HPBW约6.35°0.1°精度的网格下读数在6.2~6.4°之间都是正常的。第一次跑仿真的人很容易在这里觉得代码出了问题其实是网格精度和读取方式的差异。再看第一旁瓣把图在-13dB附近放大会看到第一旁瓣峰值非常接近-13.26dB这和理论值完全吻合。如果加窗函数比如在权向量上乘以Hamming窗主瓣会展宽到约9°但第一旁瓣会降到-40dB以下。我建议你把w exp(...)改成w exp(...) .* hamming(N)再跑一次对比两条曲线的差异这是理解空间加窗最直观的方式。4.3 不同参数下的波束图变化对比仿真做出来以后不要停在跑通了的阶段建议动手改几个参数观察变化改变阵元数N比如从8改到32主瓣明显变窄旁瓣数量增加但第一旁瓣电平基本不变维持在-13.26dB附近。改变阵元间距d0.3λ、0.5λ、0.8λ、1.0λd0.8λ时可见区边缘开始出现较高的响应d1.0λ时在±90°出现完整栅瓣直观验证栅瓣条件。改变波束指向角θ_0比如30°、60°主瓣会向对应方向移动但主瓣宽度逐渐增加且朝向扫描角一侧的旁瓣先升高另一侧被压低——波束图不再对称。入射信号加噪声后计算输出功率谱可以观察到波束指向信号方向时输出信噪比最高验证波束形成的空间滤波作用。矩阵协方差这一步尤其值得深入。改为计算P(θ)a^H(θ)·R·a(θ)其中R是阵列接收数据的协方差矩阵用一段仿真数据估出来你就能看到常规波束形成输出功率谱的另一个角度——它等效于把协方差矩阵投影到每个扫描方向的导向矢量上。之后学Capon波束形成本质上就是把这个投影改成带约束的最优化用一个矩阵求逆操作换取更强的干扰抑制能力。常规波束形成这个朴素版本是理解那一切高级操作的必经之路。5. 工程实践中的失配问题与调试经验5.1 阵元互耦与通道失配理论假设为何失效仿真里用得顺风顺水的导向矢量到了真实硬件上往往碰一鼻子灰。最大的原因在于模型失配仿真假设所有阵元都是理想的独立点传感器但实际阵元之间存在电磁耦合天线阵列或声学耦合水听器阵列一个阵元的振动或辐射会影响邻近阵元。互耦的直接后果就是实际的阵列流形偏离理想的导向矢量导致波束指向偏差、旁瓣抬升、干扰抑制能力下降。互耦的严重程度与阵元间距直接相关d0.5λ时互耦已经不可忽略d进一步缩小时互耦急剧增强。工程上缓解互耦的手段包括增大阵元间距、使用低互耦的阵元设计、或者在算法层面做互耦校正——事先测量互耦矩阵C然后把理想的导向矢量修正为C·a(θ)再做波束形成。互耦矩阵的测量需要专门的校准设施在暗室或消声水池里用标准信号源逐个角度测量响应工作量不小但这是高性能阵列系统必须跨过的一道坎。通道失配是另一个常见问题。每个阵元后面的射频链路或模拟前端增益不一致、相位不一致等效于把权向量乘上了一个随机的复数向量。幅度失配主要抬高旁瓣相位失配则同时影响主瓣指向和旁瓣。改善通道失配的方法一是硬件上严格筛选和校准二是在信号处理中做数字校正注入校准信号估计每个通道的幅相误差然后在权向量里补偿回来。我在实际测试中的经验是通道幅相误差控制在0.5dB和3°以内时常规波束形成的性能退化尚可接受超过这个范围就必须做校正。5.2 窄带假设的边界什么时候不能只用相移前面说了窄带条件下时延可以等效成相移但窄带的界限到底在哪里工程上的经验法则是如果信号带宽B相对于载频f满足B/f 1%相移近似误差很小如果带宽达到5%以上或者信号是线性调频这类大时宽带宽积信号就必须考虑真实的时延补偿。宽带信号使用相移近似会带来两个问题一是波束指向会随频率漂移——每个频率分量看到的相位差不同合成的波束方向不再精确对准预定的θ_0二是信号波形会失真——不同阵元通道的相位补偿等效于不同的频率响应破坏了宽带信号的保真度。解决宽带问题的标准做法是子带分解把宽带信号分成若干窄带子带每个子带独立做窄带波束形成再合成回宽带。或者使用分数时延滤波器直接实现精确的时延补偿在时域上完成真正的延时求和。对一些特殊应用比如声呐中的宽带目标探测常规波束形成通常直接使用时延而不是相移因为声呐信号的带宽相对中心频率往往不满足窄带条件。这也是为什么我在做声呐处理时经常提醒自己MATLAB仿真里用相移很方便但落到实时系统时必须先确认信号带宽是否真的足够窄。5.3 实际调试中的几个小技巧最后分享几个调试常规波束形成程序时我反复用到的经验扫描步进不要一味追求细。0.1°对大多数应用足够过度细化只会增加计算量而不增加信息量。需要精确读取HPBW时可以先用粗网格定位再在峰值附近局部细化效率高得多。绘制波束图时记得归一化。不归一化的话不同阵元数下的峰值幅度不同对比会失真。归一化后统一看dB值-3dB、-13.26dB这些都是标准判据。权向量归一化有两种约定一种是|w|1一种是w^H·a(θ_0)1后者通常用于保证期望方向增益为1在自适应波束形成中和MVDR的约束形式衔接更自然。代码里最好把阵列参数封装成结构体或类比如array.N、array.d、array.steer_vec(theta)。项目一复杂这个习惯能省下大量调试时间。初学阶段跑完常规波束形成建议马上做一个和MVDR的对比实验在某个方向放一个强干扰看看CBF输出功率谱和MVDR输出功率谱的区别。CBF会被干扰抬高背景MVDR则会在干扰方向形成很深的零陷。这个直观体验比读十篇论文都有用。均匀直线阵常规波束形成这个题目看起来基础但越是基础的东西越值得反复打磨。把它彻底吃透后续学自适应波束形成、超分辨测向、MIMO雷达信号处理都会顺畅很多。阵列信号处理里绝大多数复杂算法最后都能拆解成设计权向量加计算输出功率这两个动作——万变不离其宗。把均匀直线阵的每个细节搞明白你就已经掌握了整个领域的核心语感。本文还有配套的精品资源点击获取