
简介均匀圆阵UCA波束形成是阵列信号处理中的重要方向这份资源以单文件形式提供核心实现面向雷达、无线通信、声纳等领域的研究者与工程师尤其适合需要快速理解圆阵相位校正与加权合成原理的初学者。压缩包内包含1个MATLAB脚本.m文件包体仅630B代码精简便于逐行阅读和二次开发。脚本围绕阵列几何定义、权值计算、信号合成等关键环节展开覆盖360°全方位波束扫描与方向图分析可帮助读者直观观察不同入射方向下的增益变化。已有248人学习下载说明其在相关课题中具有参考价值。通过运行该脚本可以掌握均匀圆阵的相位差建模方法理解波束指向性与权矢量之间的对应关系为后续开展UCA下的干扰抑制、DOA估计或通信链路优化打下基础。1. 均匀圆阵波束形成为什么DBF要从线阵换到圆阵在相控阵雷达、电子对抗和5G毫米波通信里线阵的波束形成只能覆盖有限扇区一旦需要360°全向搜索就必须转动天线或换用圆阵。均匀圆阵UCA把阵元均匀分布在圆周上配合数字波束形成DBF可以在不机械旋转的前提下同时形成多个波束实现全向扫描。但圆阵的导向矢量、方向图和旁瓣特性与线阵截然不同直接套用线阵的切比雪夫加权会得到错误结果。下面从圆阵的数学模型讲起用一个可运行的Python仿真把均匀圆阵波束形成的设计流程串起来最后给出参数设置和典型排错方法。这套内容适合正在做阵列信号处理仿真、雷达波形设计或无线定位算法验证的工程师。2. 均匀圆阵数学模型与波束形成的方向图推导2.1 圆阵的阵列流形从几何坐标到导向矢量均匀圆阵的N个阵元均匀分布在半径为R的圆周上第n个阵元的位置是$(R\cos\phi_n, R\sin\phi_n)$其中$\phi_n 2\pi n/N$。假设一个远场窄带平面波从方向$(\theta, \phi)$入射$\theta$是俯仰角与z轴的夹角$\phi$是方位角。波达方向的单位矢量在xy平面的投影为$(\sin\theta\cos\phi, \sin\theta\sin\phi, \cos\theta)$。对于第n个阵元波前到达该阵元与到达圆心之间的路径差为$$ \Delta_n R \sin\theta \cos(\phi - \phi_n) $$对应的相位差是$k\Delta_n$其中$k2\pi/\lambda$是波数。于是导向矢量steering vector的第n个分量为$$ a_n(\theta,\phi) \exp\left( -i \frac{2\pi R}{\lambda} \sin\theta \cos(\phi-\phi_n) \right) $$这就是圆阵的阵列流形。与线阵不同这里的指数项是关于$\phi$的余弦函数而不是线性相位。余弦函数使得圆阵的导向矢量在方位维是周期函数$\phi$每个周期内有多个零点方向图也会呈现轴对称。实际工程里我们通常只关心水平面波束即$\theta90^\circ$。这时导向矢量退化为$$ a_n(\phi) \exp\left( -i \frac{2\pi R}{\lambda} \cos(\phi-\phi_n) \right) $$可以看到即使入射方向在水平面内不同阵元之间的相位差也不是线性递增的而是按余弦规律变化。这就是为什么线阵的FFT方法不能直接用在圆阵上。2.2 方向图与线阵的差异对称性、主瓣宽度和栅瓣对于一组复权值$w_n$圆阵在方向$(\theta,\phi)$上的响应是$$ F(\theta,\phi) \sum_{n0}^{N-1} w_n \cdot a_n(\theta,\phi) $$如果对所有阵元使用等加权$w_n1/N$那么方向图会呈现圆对称的均匀增益吗并不会。等加权圆阵在圆心方向有一个凹坑因为圆周上各阵元到圆心方向的相位差无法同相叠加。实际仿真会看到圆阵的等加权方向图主瓣是围绕指向角的一个锥形而不是线阵那样的笔形波束。当波束指向某个方位$\phi_0$时常见做法是把权值取为导向矢量的共轭即$w_n (1/N)a_n^*(\phi_0)$形成常规波束形成CBF。此时方向图的主瓣宽度不仅取决于$R/\lambda$还与阵元数$N$有关。阵元数越多圆周采样越密集旁瓣越低。但圆阵的方向图存在一个固有特点方位维的主瓣宽度会随指向角发生变化。更重要的一点是栅瓣。线阵的阵元间距通常要求小于$\lambda/2$来避免栅瓣圆阵的约束更严格。圆阵相邻阵元之间的弧长$2\pi R/N$是决定空间采样的关键这个值一旦大于$\lambda/2$方向图就会出现明显的栅瓣。所以圆阵的半径$R$和阵元数$N$必须满足$$ \frac{2\pi R}{N} \le \frac{\lambda}{2} $$等价于$N \ge 4\pi R/\lambda$。例如半径为一个波长$R\lambda$时阵元数至少需要13个。如果阵元数不够方向图会出现多个等同高度的波束这就是空间混叠。下面这个表列出线阵与圆阵在方向图上的典型差异方便做选型时对照。对比项线阵均匀圆阵相位变化随阵元位置线性变化随余弦函数变化覆盖范围通常±60°360°全向波束指向变化主瓣宽度基本不变主瓣宽度随指向角变化栅瓣条件$d/\lambda \le 0.5$$2\pi R/(N\lambda) \le 0.5$等加权旁瓣-13.2dB约-8dB且不对称2.3 圆阵DBF的权值设计常规波束形成与窗函数常规波束形成的权值就是导向矢量的共轭这实际上是对各阵元接收信号做相位补偿使目标方向的信号同相叠加。在圆阵上由于相位补偿量$kR\cos(\phi_0-\phi_n)$本身是逐阵元变化的权值幅度通常取1相位是反向的余弦。# 常规波束形成权值导向矢量共轭幅度归一化 w_cbf np.conj(a) / N要压低旁瓣线阵常用Hamming或Taylor窗直接乘在阵元上。圆阵也可以乘窗但直接乘在空间阵元上效果并不好因为圆阵的方向图不是线阵阵因子与窗谱的简单乘积。一种可靠的做法是使用Tschebyscheff窗的圆阵版即先计算各阵元的幅度加权系数但需要根据圆阵的方向图综合方法来确定。更简单的工程方案是使用一个提升主瓣与第一旁瓣比的锥削函数比如余弦平方窗然后通过仿真微调。3. 用Python复现均匀圆阵DBF的最小实现3.1 生成均匀圆阵的导向矢量下面是一段可运行的Python代码用来生成均匀圆阵的导向矢量并计算方向图。我习惯用numpy的矢量化解法避免循环。import numpy as np import matplotlib.pyplot as plt def uca_steering_vector(N, R_lam, phi): 生成水平面均匀圆阵导向矢量。 N: 阵元数 R_lam: 圆阵半径以波长为单位 phi: 入射方位角弧度 n np.arange(N) phi_n 2 * np.pi * n / N # 阵元方位角 return np.exp(-1j * 2 * np.pi * R_lam * np.cos(phi - phi_n))这段代码直接实现了水平面导向矢量。R_lam是半径相对波长的比值比如0.8表示$R0.8\lambda$。phi是标量或数组如果是数组函数会返回一个二维数组每列对应一个方向的导向矢量。调用时只需指定阵元数和半径N 16 R_lam 0.8 phi0 np.deg2rad(30) # 期望波束指向 a uca_steering_vector(N, R_lam, phi0)这里a的维度是$(N,)$每个元素代表对应阵元的复相位补偿。注意phi0必须以弧度为单位工程上从角度换算时需要统一。3.2 计算波束方向图并绘制有了导向矢量常规波束形成的权值就是它的共轭除以N。方向图是权矢量与整个扫描范围导向矢量的内积def pattern_db(w, phi_scan): a_scan uca_steering_vector(N, R_lam, phi_scan) # 权矢量 w 维度为 (N,)a_scan 维度为 (N, M) f np.conj(w) a_scan return 20 * np.log10(np.abs(f) / np.max(np.abs(f)) 1e-12) w np.conj(a) / N phi_scan np.linspace(0, 2*np.pi, 360) p pattern_db(w, phi_scan) plt.figure(figsize(8, 4)) plt.plot(np.rad2deg(phi_scan), p) plt.xlabel(方位角 (deg)) plt.ylabel(归一化增益 (dB)) plt.ylim(-50, 0) plt.grid(True) plt.show()这段代码先计算扫描角范围内的所有导向矢量再通过矩阵乘法得到任意方向的响应。使用np.conj(w) a_scan时w会被当作行向量与a_scan的每一列做内积得到每个扫描角度的复响应。取模后归一化为dB加1e-12是为了避免除零。运行这段代码你会看到在30°方向有一个主瓣但第一旁瓣大约在-8dB左右这比线阵等加权的-13.2dB高不少。这是圆阵等加权的固有特性不是代码错误。3.3 参数调整从方向图看阵元数、半径和频率的关系现在你可以快速扫描参数。比如保持半径0.8波长不变把阵元数从16改为10方向图会出现什么变化第一旁瓣会升高主瓣变宽严重时出现栅瓣。反过来如果保持阵元数16半径加到1.5个波长方向图会出现多个与主瓣等高的复制波束因为弧长$2\pi \times 1.5 / 16 0.589\lambda$已经超过$\lambda/2$。我一般会把参数扫描封装成一个小函数同时输出峰值旁瓣电平PSLL和主瓣宽度用来判断一组参数是否可用。一个简单的PSLL计算方法是只在主瓣范围之外找最大值。下面是一个快速扫描半径的示例def check_psll(N, R_lam): phi_scan np.linspace(0, 2*np.pi, 720) p pattern_db(np.conj(uca_steering_vector(N, R_lam, 0.0)) / N, phi_scan) # 排除主瓣范围指向0°主瓣约±5°取旁瓣最大值 mask (phi_scan np.deg2rad(10)) (phi_scan np.deg2rad(350)) return np.max(p[mask])这个函数可以快速评估不同R_lam下的旁瓣水平。要注意主瓣宽度的估计需要根据实际方向图来确定这里的10°门限只是一个粗略假设。4. 均匀圆阵波束形成的参数设置与自适应DBF4.1 阵元数、半径与频率的约束条件设计圆阵时第一约束是阵元间距。前面说过相邻阵元的弧长必须小于$\lambda/2$。但波长是随频率变化的所以这个约束在宽带系统里要取最高频率对应的最小波长。如果工作频率范围最高为$f_{\max}$对应的波长$\lambda_{\min} c/f_{\max}$那么阵元数需要满足$$ N \ge \frac{4\pi R f_{\max}}{c} $$举个例子半径40cm最高频率3GHz$\lambda_{\min}10$cm则$N \ge 4\pi \times 40 / 10 50.3$向上取整到56或64。下面是一个常用参数设计参考表参数典型值约束或说明阵元数N864由弧长≤λ/2决定N≥ceil(4πR/λ)半径R0.5λ2λ太大导致栅瓣太小导致方向图变胖阵元间距弧长≤0.5λ避免空间混叠指向角范围全向0°360°圆阵天然支持旁瓣电平-20dB以下需要锥削窗单纯等加权不够表格中的半径范围不是绝对的。如果只要求半球覆盖或仅方位扫描半径可以放宽到2λ甚至更大但要配合更多的阵元数。4.2 圆阵DBF的锥削窗口选择幅度加权抑制旁瓣圆阵的旁瓣抑制不能照抄线阵的汉明窗。因为圆阵的方向图是圆对称的等加权时旁瓣就高直接乘以线阵窗会破坏圆周上的幅度对称性导致波束指向偏移。常见的做法是使用圆周对称的窗函数例如把每个阵元的幅度设为$1 \cos(\phi_n - \phi_0)$的幂次形式或者用数值优化得到一组幅度补偿系数。一个实用方法是使用Zolotarev多项式或对方向图进行迭代综合。但大多数场景下简单的余弦平方锥削就能把旁瓣压到-15dB左右。实现如下def cos_square_taper(N, phi0): n np.arange(N) phi_n 2 * np.pi * n / N # 以指向角为中心的余弦平方窗注意cos值的平移 return np.cos(0.5 * (phi_n - phi0)) ** 2这个窗在阵元方位与指向角一致时幅度最大在相反方向时幅度最弱形成一个平滑的锥削。注意权值要归一化否则会降低波束增益。将锥削系数与导向矢量共轭相乘后方向图的旁瓣会下降但主瓣会略微展宽。使用时要让窗函数以指向角为中心对称否则波束会偏移。验证方法是在指向角处观察方向图峰值是否还在0°位置。4.3 MVDR自适应波束形成在圆阵上的实现自适应波束形成在圆阵上同样适用最常见的是MVDR最小方差无失真响应。MVDR权值公式为$$ \mathbf{w}_{\mathrm{MVDR}} \frac{\mathbf{R}^{-1}\mathbf{a}(\theta_0,\phi_0)}{\mathbf{a}^H(\theta_0,\phi_0)\mathbf{R}^{-1}\mathbf{a}(\theta_0,\phi_0)} $$其中$\mathbf{R}$是接收信号的协方差矩阵。圆阵的MVDR实现与线阵唯一的差别在于导向矢量的构造方式。下面是一个使用对角加载的MVDR示例def mvdr_weights(Rxx, a_des): # Rxx: 协方差矩阵a_des: 期望方向导向矢量 diag_load 1e-6 * np.trace(Rxx) / Rxx.shape[0] A Rxx diag_load * np.eye(Rxx.shape[0]) invA np.linalg.inv(A) w invA a_des / (a_des.conj() invA a_des) return w对角加载防止协方差矩阵奇异加载量取迹的百万分之一是一个常用起点。在阵元数较大、快拍数较少时这个值可以加大。实际仿真中可以用一个期望信号加两个干扰信号来验证让干扰方向的响应归零。MVDR在圆阵上的零陷分辨率取决于阵元数如果阵元数不足干扰来向会产生伪零陷。5. 验证方向性指标与排错技巧5.1 用方向性系数验证圆阵DBF的正确性方向性系数directivity是衡量波束形成是否正常的标尺。圆阵的方向性系数可以从权矢量和阵列流形计算$$ D(\theta_0,\phi_0) \frac{|\mathbf{w}^H \mathbf{a}(\theta_0,\phi_0)|^2}{\frac{1}{4\pi}\int_0^{2\pi}\int_0^\pi |\mathbf{w}^H \mathbf{a}(\theta,\phi)|^2 \sin\theta \mathrm{d}\theta \mathrm{d}\phi} $$数值计算时把整个球面离散成网格。如果计算出的方向性系数小于阵元数N说明加权系数有较大的功率泄漏如果接近理论值$N$说明加权是合理的。等加权圆阵的方向性系数往往低于N而经过精心锥削后会更低——这是圆阵为了压低旁瓣付出的增益代价。5.2 常见坑相位混叠、零陷偏移与视轴模糊第一个坑是相位混叠。前面说过弧长超过半波长就会出现栅瓣。但有一种情况容易忽视当波束指向偏离阵列平面很大俯仰角时即使水平面弧长满足条件在俯仰维仍可能产生混叠。因此三维扫描的圆阵还需考虑阵元在圆周上的离散是否对空间波数充分采样。第二个坑是MVDR零陷偏移。圆阵的导向矢量对测量误差敏感阵元位置误差或互耦会导致零陷偏移数度。解决办法是使用稳健MVDR例如对角加载或导向矢量误差约束。第三个坑是视轴模糊。圆阵方向图在方位维有对称性一个波束会在两个对称方位产生相同响应。例如指向0°的波束在180°附近也有旁瓣有时甚至形成伪主瓣。解决方法是结合单脉冲或比幅测向或者使用非均匀圆周分布阵元打破对称性。5.3 一个实用技巧用模式激励做相位模式DBF如果你需要快速实现低复杂度圆阵DBF可以尝试相位模式激励。把圆阵的导向矢量用贝塞尔函数展开$$ a_n(\phi) \sum_{m-\infty}^{\infty} i^m J_m(kR) e^{-im\phi_n} e^{im\phi} $$其中$J_m$是m阶第一类贝塞尔函数。通过一个离散傅里叶变换矩阵把圆阵的阵元域转换到相位模式域就可以用类似线阵的FFT波束形成方法来处理。具体做法是先对阵列响应做N点FFT把圆周空间谱取出来然后在模式域做幅度加权最后再通过逆FFT变回阵元域。这个方法的优点是计算量低且可以复用线阵的设计经验。一个简单验证技巧对模式域的幅度加权系数使用汉明窗再变回阵元域观察方向图的旁瓣是否比直接加汉明窗更低。通常在$N$大于$2kR1$时效果稳定。这里的$2kR1$就是模式数的上限选择过高的模式会使贝塞尔函数较小项放大噪声。我用这个技巧调试过不少圆阵原型它能快速确认圆阵DBF设计里的基础问题。如果你的仿真结果里方向图左右不对称先检查相位模式数是否超过了$2kR1$超过时数值不稳定方向图就会出问题。本文还有配套的精品资源点击获取