


该代码库围绕波达方向(DOA)估计问题,实现了多种经典与稀疏重构类算法,并构建了一套完整的对比评估与深度学习数据生成框架。
研究背景
阵列信号处理中,利用天线阵列接收信号来估计入射波方向(DOA)是雷达、声呐、无线通信等领域的关键技术。传统方法如常规波束形成(CBF)角度分辨率受瑞利限制约,超分辨类算法(Capon、MUSIC、ESPRIT)在低信噪比、少快拍时性能下降明显。近年来,稀疏重构(OMP、稀疏贝叶斯学习SBL)和深度学习方法被引入以改善鲁棒性和精度。本代码库即为此类研究提供算法实现、性能验证和训练数据生成。
主要功能
- 多算法DOA估计:提供CBF、Capon、MUSIC、ESPRIT、OMP、SBL六种DOA估计算法的实现。
- 测试集生成与评估:按不同信噪比(或阵元数)生成大量随机的双目标测试样本,计算各算法的估计准确率和均方根误差(RMSE)。
- 深度学习训练集生成:生成以MUSIC空间谱为输入特征、以入射角独热向量为标签的大规模训练样本,可用于训练基于神经网络的DOA估计模型。
- 可视化分析:绘制算法的空间谱和散射点图,以及准确率/RMSE随信噪比变化的曲线。
算法步骤(以总体流程为例)
- 参数初始化:设置阵元数、阵元间距、快拍数、信噪比范围、角度搜索网格等。
- 生成随机入射角:在[-60°, 60°]内随机产生两个不同方向作为信源。
- 构造接收信号:根据导向矩阵生成无噪阵列信号,叠加加性高斯白噪声。
- 各算法估计 :
- 对CBF、Capon、MUSIC得到空间谱,利用
getPeak寻找最高两个峰值,输出对应角度。 - ESPRIT通过子阵旋转不变性直接解出两个角度估计。
- OMP利用贪婪迭代重构稀疏信号,依次找出角度。
- SBL基于稀疏贝叶斯框架迭代更新超参数,获得空间功率谱后取峰值。
- 对CBF、Capon、MUSIC得到空间谱,利用
- 性能评价 :
ShotOrNot函数统计估计角度与真实值之差的绝对值在门限(1°)内的比例作为准确率,并计算所有样本的RMSE。 - 结果保存与绘图。
技术路线
- 信号模型:远场窄带信号入射到均匀线性阵列(CBF/Capon/MUSIC/OMP/ESPRIT)或嵌套阵列(SBL),阵元间距为半波长。
- 经典超分辨:利用接收信号协方差矩阵的特征分解,划分信号子空间与噪声子空间(MUSIC);或利用子阵间旋转不变关系(ESPRIT)。
- 稀疏重构:OMP将DOA估计转化为稀疏字典上的原子匹配追踪;SBL采用分层先验模型,通过期望最大化(EM)迭代细化角度网格并估计稀疏功率谱。
- 深度学习准备:将MUSIC谱归一化后作为输入向量(181维),标签为角度区间上对应的1值点,用于训练回归或分类网络。
公式原理
设阵列流形a(θ)=e−j2πdλ(0:M−1)Tsinθa(\theta)=e^{-j2\pi \frac{d}{\lambda} (0:M-1)^T \sin\theta}a(θ)=e−j2πλd(0:M−1)Tsinθ,接收信号协方差R=1LXXHR = \frac{1}{L}XX^HR=L1XXH,特征分解R=UsΛsUsH+UnΛnUnHR = U_s\Lambda_s U_s^H + U_n\Lambda_n U_n^HR=UsΛsUsH+UnΛnUnH。
- CBF :PCBF(θ)=aH(θ)Ra(θ)P_{\text{CBF}}(\theta) = a^H(\theta) R a(\theta)PCBF(θ)=aH(θ)Ra(θ)
- Capon :PCapon(θ)=1aH(θ)R−1a(θ)P_{\text{Capon}}(\theta) = \frac{1}{a^H(\theta) R^{-1} a(\theta)}PCapon(θ)=aH(θ)R−1a(θ)1
- MUSIC :PMUSIC(θ)=1aH(θ)UnUnHa(θ)P_{\text{MUSIC}}(\theta) = \frac{1}{a^H(\theta) U_n U_n^H a(\theta)}PMUSIC(θ)=aH(θ)UnUnHa(θ)1
- ESPRIT :利用子阵输出Us1U_{s1}Us1和Us2U_{s2}Us2,求解Ψ=(Us1†Us2)\Psi = (U_{s1}^\dagger U_{s2})Ψ=(Us1†Us2)的特征值ϕ\phiϕ,角度θ^=arcsin(∠ϕπ)\hat{\theta} = \arcsin(\frac{\angle{\phi}}{\pi})θ^=arcsin(π∠ϕ)
- OMP:迭代选择与残差最相关的原子(导向矢量),更新最小二乘估计并剔除已选分量。
- SBL :层次稀疏先验下,通过更新系数方差δ\deltaδ和均值μ\muμ,最大化证据下界,并对网格点进行细化,最终从δ\deltaδ峰值获得角度。
参数设定
- 阵列 :均匀线阵,阵元数M=8M=8M=8,阵元间距波长比d/λ=0.5d/\lambda=0.5d/λ=0.5
- 角度范围:-90°~90°,搜索步长1°(共181点)
- 信号源:随机两个不相关源,位于[-60°,60°]
- 快拍/信噪比:Onetest中快拍24,SNR=20 dB;测试集生成时SNR从2 dB变化到32 dB(步长4),快拍64;训练集生成时SNR随机取[-10,30] dB,快拍128,样本数90000
- 性能评价阈值:角度误差≤1°认为正确
运行环境
- 语言/平台 :MATLAB(R2023b及以上均可运行),依赖基础信号处理及通信工具箱(
awgn),无特殊第三方工具箱。 - 核心文件 :算法函数(
*_doa.m)、谱峰搜索(getPeak.m)、评估函数(ShotOrNot.m)、生成脚本(train_generate.m、test_generate.m、Onetest.m)、对比绘图(AccuracyRMSE.m、OneTestPerformance.m)。
应用场景
- 雷达目标探测:估计多个空中/地面目标的方位角。
- 声呐与水下定位:利用水听器阵列定位潜艇或声源。
- 无线通信:5G/6G中基站利用大规模MIMO阵列进行精确用户定位与波束赋形。
- 电子侦察与对抗:被动探测辐射源方向。
- 智能天线系统:为自适应波束形成提供高分辨率角度信息。