
简介针对八单元均匀圆阵的波束形成与DOA估计这份压缩包提供了一段基于MUSIC算法的MATLAB实现面向无线通信、雷达及音频处理等方向的学习者和工程师。代码围绕四个输入信号展开演示了圆阵信号建模、噪声子空间构造、角度谱搜索以及多波束加权合成的核心流程可用于理解均匀圆阵在全方位覆盖下的测向与增强机制。压缩包共2个文件以m脚本为主配合一个txt来源说明文件整体仅2KB结构精简便于快速阅读和运行仿真。目前已有130人浏览学习适合作为阵列信号处理课程设计或算法验证的参考素材。通过运行该脚本可直观对比不同角度估计效果并进一步修改参数观察波束指向变化帮助掌握MUSIC算法在圆阵场景下的实际应用。1. 圆阵MUSIC处理四信源先想清阵列流型再谈波束把八个阵元等间隔摆在圆周上同时要找出四个信号的方位角最稳妥的路线不是上来就谱峰搜索而是先把圆阵的导向矢量和协方差矩阵的特征结构写对。MUSIC 能分辨出相邻很近的信源靠的是信号子空间与噪声子空间的严格正交性而圆阵的导向矢量比均匀线阵多一段 r·cos(θ-φ_m) 的投影因子差一个符号谱图上就会冒出一堆假峰。yuanma2.rar 里这个 chapter93.m 正是围绕「八单元均匀圆阵 四输入信号」这一场景把 DOA 估计和波束形成放在同一个脚本里处理。适合正在做雷达测向、5G 阵列天线或声学阵列的工程师也适合卡在 MUSIC 谱峰分裂问题上的初学者。下面从导向矢量构造开始把整套流程在 MATLAB 里完整过一遍。2. 圆阵导向矢量与 MUSIC 噪声子空间计算2.1 圆阵导向矢量的相位因子推导均匀圆阵的 M 个阵元放在半径为 r 的圆周上第 m 个阵元的方位角是φ_m 2πm/Mm 0,1,…,M-1当平面波从 θ 方向入射假设阵列水平、只考虑方位角以圆心为参考点第 m 个阵元相对参考点的波程差为 r·cos(θ-φ_m)。因此导向矢量的第 m 个分量为a_m(θ) exp(j·(2πr/λ)·cos(θ-φ_m))这里的 r/λ 是决定圆阵方向特性的关键比值。均匀圆阵没有线阵那样的端射盲区但若相邻阵元弧长超过半波长会出现空间混叠。先把导向矢量写对后续 MUSIC 谱扫描才能复现可靠结果。表 1 给出了均匀线阵与均匀圆阵在 MUSIC 实现里的几个关键差异方便对照排查代码问题。对比项目均匀线阵均匀圆阵导向矢量相位exp(j2πd·sinθ/λ)exp(j2πr·cos(θ-φ_m)/λ)角度覆盖-90°~90°端射增益下降0°~360°无端射区别相位参考点通常取阵首阵元取圆心空间混叠条件阵元间距 d λ/2阵元弧长 2πr/M λ/22.2 协方差矩阵与特征分解D 个独立信源、M 个阵元一次快拍的观测向量 x(t) 为x(t) A(Θ)s(t) n(t)其中 A(Θ) [a(θ_1), …, a(θ_D)] 是 M×D 阵列流型矩阵s(t) 是 D×1 信源矢量n(t) 是噪声矢量。采集 K 个快拍后样本协方差矩阵为Rxx (1/K)·Σ x(t)x^H(t)对 Rxx 做特征分解大特征值对应信号子空间 Us小特征值对应噪声子空间 Un。MUSIC 空间谱定义为P_MUSIC(θ) 1 / (a^H(θ)·Un·Un^H·a(θ))当 θ 等于真实信源方向时导向矢量与 Un 正交分母趋近于零形成谱峰。下面这段 MATLAB 代码演示如何构造圆阵导向矢量矩阵。M 8; % 阵元数 r_lambda 0.4; % 圆阵半径 / 波长 phi_m (0:M-1)*2*pi/M; % 阵元方位角均匀分布 % 构造单个方向的导向矢量列向量 theta0 30*pi/180; % 30度方向示意 a_theta0 exp(1j*2*pi*r_lambda*cos(theta0 - phi_m)).; % 构造扫描方向的导向矢量矩阵行为扫描角列为阵元 theta_scan (-90:0.1:90)*pi/180; A_scan exp(1j*2*pi*r_lambda*cos(theta_scan(:) - phi_m)); % A_scan 的每一行就是 a^H(θ) 对应的行向量代码里r_lambda用波长归一化后所有角度直接用弧度计算。phi_m是阵元方位角行向量theta_scan(:)把扫描角转成列向量theta_scan(:) - phi_m自动广播成 L×M 矩阵一次性得到所有扫描角度的导向矢量。这样后续 MUSIC 谱计算可以直接做矩阵乘法不必写 for 循环。2.3 特征分解与噪声子空间提取eig返回的特征值不在对角线上时顺序不固定必须手动排序。下面代码提取噪声子空间[V, D] eig(Rxx); eigvals real(diag(D)); [~, idx] sort(eigvals, ascend); % 升序排列 D_src 4; % 已知或估计的信源数 Un V(:, idx(1:end-D_src)); % 前 M-D_src 列是噪声子空间升序排序后最小的特征值在最前面去掉末尾D_src个大特征值对应的特征向量剩下的就是噪声子空间。如果信源数估计偏大会把部分信号特征向量并进噪声子空间导致谱峰幅度下降偏小则残留信号成分谱图上会出现伪峰。工程上先用特征值分布或 MDL/AIC 估计信源数不要直接写死。这一段的核心是MUSIC 只看导向矢量与噪声子空间的正交性阵列流型写错后面所有谱峰全是错的。写完A_scan后建议先用单信源、高信噪比做一次自检确认谱峰位置正确后再进多信源场景。3. 四信源 MUSIC DOA 仿真参数、代码与分析3.1 信号模型与样本协方差矩阵构造四信源场景下八个阵元接收四条独立信号。yuanma2.rar 里的 www.pudn.com.txt 一般会记录运行说明其中值得注意的配置是阵元数 M8、信源数 D_src4、快拍数 K 在数百量级这与下面构造的仿真参数一致。把观测数据排列成「阵元数 M × 快拍数 K」的矩阵协方差矩阵写成Rxx X·X / K% ---- 参数设置 ---- M 8; % 阵元数 r_lambda 0.4; % 半径与波长之比 phi_m (0:M-1)*2*pi/M; K 500; % 快拍数 D_src 4; % 信源数 theta_true [-30, 5, 45, 70] * pi/180; % 真实来波方向 SNR 10; % 信噪比单位 dB % ---- 产生阵列流型矩阵 A (M x D_src) ---- A exp(1j*2*pi*r_lambda*cos(theta_true(:) - phi_m(:))); % theta_true(:) 是 1x4phi_m(:) 是 8x1差得到 8x4正好是 M x D_src % ---- 信号源与噪声 ---- S (randn(D_src, K) 1j*randn(D_src, K)) / sqrt(2); X A * S; noise (randn(M, K) 1j*randn(M, K)) / sqrt(2); noise_pow norm(A*S, fro)^2 / (M*K) / (10^(SNR/10)); X X sqrt(noise_pow) * noise; % ---- 协方差矩阵与特征分解 ---- Rxx X * X / K; [V, D] eig(Rxx); eig_vals real(diag(D)); [~, idx] sort(eig_vals, ascend); Un V(:, idx(1:end-D_src)); % ---- 谱扫描 ---- theta_deg -90:0.1:90; A_scan exp(1j*2*pi*r_lambda*cos(theta_deg(:)*pi/180 - phi_m(:).)); P_music 1 ./ sum(abs(A_scan * Un).^2, 2); [~, loc] findpeaks(10*log10(P_music/sum(P_music)*M*K), ... MinPeakProminence, 5);代码中的theta_true(:) - phi_m(:)是 1×4 与 8×1 相减靠 MATLAB 广播生成 8×4 矩阵正好对应每个信源的导向矢量列。噪声功率用norm(A*S,fro)^2/(M*K)算出信号平均功率再除以线性信噪比换算出的噪声功率最后用sqrt(noise_pow) * noise叠加保证 SNR 近似等于设定值。findpeaks需要信号处理工具箱。MinPeakProminence5表示谱峰比周围谷值至少高 5 dB 才算有效峰这个阈值可以过滤因有限快拍造成的基底毛刺。如果不想依赖工具箱可以自己写局部极大值搜索但要注意谱峰可能存在平台最好再加一个相对峰高判断。3.2 谱峰搜索与参数边界表 2 给出本场景下推荐参数及其调整边界便于在不同环境复用。参数推荐值调整方向与影响阵元数 M8增加 M 提高角分辨率代价是运算量几何增长半径波长比 r/λ0.4大于 0.7 容易出现混叠小于 0.2 则孔径过小分辨率变差快拍数 K500低于 100 时特征值扩展严重MUSIC 谱底噪升高信噪比 SNR10 dB低于 0 dB 时四信源分离难度增大需增大快拍数或采用空间平滑扫描步长0.1°步长过小增加运算量一般 0.1°~0.5° 足够仿真运行后四个真实方向附近会出现四个明显的谱峰。有两种情况需要现场判断一是两个信源间隔小于约 10° 时MUSIC 谱可能只能看到一个宽峰这是分辨极限问题不是代码 Bug二是谱图上在真实角度之外出现等高的伪峰多半是阵元弧长超过半波长需要减小 r/λ 或增加阵元数。用findpeaks前面做一次10*log10压缩能让峰谷对比更直观。4. 圆阵多波束形成常规加权与 MVDR 实现4.1 波束形成的出发点MUSIC 解决“哪里有信号”波束形成解决“怎么把某一方向的信号完整取出来”。圆阵波束形成的加权合并写成y(t) w^H x(t)CBF 取 w a(θ0)/M相当于对各阵元相位对齐后相加。圆阵方向图在全角度范围内变化相对平缓不会像线阵那样在端射方向出现增益塌陷这正好匹配四信源分布在 -30°~70° 的场景。4.2 四波束并行加权合成四个信源需要同时接收构造一个权矩阵 W每一列对应一个期望方向。下面代码沿用第 3 章信号模型一次性输出四路波束信号。theta_beam theta_true; % 期望波束指向单位弧度 W zeros(M, D_src); for k 1:D_src a_k exp(1j*2*pi*r_lambda*cos(theta_beam(k) - phi_m)).; W(:, k) a_k / M; % 常规波束加权保证波束指向增益为 1 end % 波束输出D_src x K 的矩阵 Y_beam W * X; % 以第一个波束为例估计输出信噪比 signal_pow mean(abs(Y_beam(1,:)).^2); noise_floor mean(abs(Y_beam(2:end,:)).^2, all) / (D_src-1); SINR_gain 10*log10(signal_pow / noise_floor);W(:,k)a_k/M的物理意义是让期望方向入射的信号在合并后幅度不变而其他方向的信号由于相位未对齐叠加后被抑制。Y_beam的行数等于波束数第 1 行是第一个波束的时域输出。这里的noise_floor用其余波束输出平均值近似干扰泄漏水平严谨度量需要按干扰方向单独计算。常规波束形成的缺点是主瓣较宽。当两个信源相距较近时一个波束可能把相邻信源也收进来导致通道间串扰。MVDR 可以在干扰方向形成零陷但需要处理协方差矩阵的稳健性。4.3 MVDR 与对角加载MVDR 权矢量公式为w_MVDR Rxx^{-1}·a(θ0) / (a^H(θ0)·Rxx^{-1}·a(θ0))在导向矢量存在误差或快拍不足时MVDR 会把期望信号误当成干扰白化掉。工程上普遍加对角加载R_LS Rxx γ·tr(Rxx)/M·IRxx_loaded Rxx 0.05 * trace(Rxx)/M * eye(M); a0 exp(1j*2*pi*r_lambda*cos(theta_beam(1) - phi_m)).; Rinv_a Rxx_loaded \ a0; w_mvdr Rinv_a / (a0 * Rinv_a); % 对比方向图 theta_plot (-90:1:90)*pi/180; A_p exp(1j*2*pi*r_lambda*cos(theta_plot(:) - phi_m)); B_cbf abs(A_p * W(:,1)).^2 / M^2; B_mvdr abs(A_p * w_mvdr).^2 / M^2;用\代替inv求解线性方程组数值稳定性更好。trace(Rxx)/M是噪声功率的粗估计加载因子取 0.05把矩阵奇异值抬高避免小特征值引起的权矢量抖动。B_cbf与B_mvdr分别画出来可以直观看到 MVDR 是否在干扰方向形成凹陷。表 3 给出两种波束形成方式在本场景下的取舍。方法适用条件优势主要代价常规波束形成 CBF高信噪比、无强干扰稳健无需矩阵求逆主瓣宽相邻波束互漏MVDR有明确干扰方向、快拍充足干扰方向深零陷输出 SINR 高导向误差敏感需对角加载多波束系统里通常先跑 CBF 确认四路信号都能正常收到再切换到 MVDR 观察抗干扰增益。如果 MVDR 输出幅度明显小于 CBF先加大对角加载因子到 0.1再检查期望角度与真实角度是否一致。5. 圆阵 MUSIC 与波束形成的隐藏坑5.1 阵元弧长与方向混叠圆阵的空间混叠条件不是线阵的 d λ/2而是相邻阵元弧长 2πr/M λ/2。弧长超限时MUSIC 谱上会出现与真实峰等高的镜像峰且镜像峰位置随 r/λ 改变。第 3 章推荐的 r/λ0.4、M8 时弧长约 0.314λ安全裕度足够。自己设计阵列时先算弧长再定半径不要照抄参数。5.2 相干信号与空间平滑MUSIC 对相干信号会失效因为协方差矩阵的秩低于信源数信号子空间不完整。如果四个信源换成了同一信号的多条时延副本谱峰数目会变少或出现平坦响应。解决思路是空间平滑把圆阵按旋转方式划分成多个子阵对所有子阵协方差矩阵求平均。圆阵做子阵划分比线阵更方便直接按阵元编号循环轮转即可。M_sub 6; % 子阵大小需大于信源数 R_smooth zeros(M_sub, M_sub); for shift 0:M-1 idx mod(shift (0:M_sub-1), M) 1; R_smooth R_smooth Rxx(idx, idx); end R_smooth R_smooth / M;这里M_sub68 元阵最多轮转 8 次每次取 6 个连续阵元组成子阵。平滑后的协方差矩阵直接做特征分解信源数上限可以放宽到 M_sub-1。5.3 互耦与幅相误差的快速诊断仿真里阵元都是理想点源实采时互耦会让导向矢量偏离理论值造成谱峰偏移和 MVDR 零陷退化。最实用的验证方法是用一个已知方向的远场源采集数据后估计实际导向矢量再与理论值对比。偏差超过 5° 就要考虑互耦校正矩阵或者改用稳健 MUSIC例如协方差矩阵对角加载、信号子空间拟合来保住大致方向估计能力。调试时有一个技巧观察谱峰之前先对P_music取 log 并用最大值归一化设定相对阈值比如 0.3来筛选峰位置。噪声子空间的绝对幅度受快拍数和 SNR 影响很大但相对峰值分布是稳定的不要用固定绝对门限。本文还有配套的精品资源点击获取