基于MVDR算法的近场聚焦波束形成仿真系统
项目简介
本项目是一个基于MATLAB环境开发的阵列信号处理仿真系统,专注于近场条件下的信号源定位与增强。系统采用了MVDR(最小方差无畸变响应)算法,结合近场球面波传播模型,解决了传统远场平面波假设在菲涅尔区(近场)失效的问题。通过构建精确的阵列流型向量和空间网格扫描,本系统能够生成高分辨率的近场空间谱,清晰展示声源或辐射源在距离和角度上的能量分布。
功能特性
- 近场信号环境建模:抛弃了远场的平面波假设,采用球面波传播模型,精确计算信源到阵列各阵元的欧几里得距离及相位延迟。
- 多信源仿真:支持同时模拟多个处于不同距离和方位角的近场信源,并叠加高斯白噪声以模拟真实环境。
- 鲁棒的协方差处理:在计算接收数据的采样协方差矩阵求逆时,引入了对角加载(Diagonal Loading)技术,提高了算法在数值计算上的鲁棒性。
- 二维聚焦扫描:在预设的空间网格(距离维 × 角度维)上进行逐点MVDR扫描,计算空间谱功率。
- 自动化峰值定位:算法自动搜索空间谱中的全局最大值,输出目标估计的距离和角度,并与真实值进行对比。
- 多维可视化展示:提供系统几何场景图、二维空间谱热力图以及焦点处的距离维切片图,直观展示仿真结果。
系统要求
- MATLAB R2016a 或更高版本
- Signal Processing Toolbox(推荐,但非必须,核心算法为基础矩阵运算)
使用方法
- 将下载的源码文件保存到MATLAB的工作路径中。
- 在MATLAB命令窗口中输入
main 并回车,或直接在编辑器中运行该脚本。 - 程序将自动执行仿真流程,并在控制台输出初始化参数、扫描进度、耗时以及目标估计结果。
- 运行结束后,会弹出一个包含三个子图的综合图形窗口,展示仿真结果。
代码实现逻辑详解
本项目的核心逻辑实现在 main.m 文件中,具体流程如下:
1. 系统参数初始化
程序首先定义了物理环境和阵列系统的基础参数。设置声速为340m/s,信号中心频率为2000Hz。构建了一个包含16个阵元的均匀线阵(ULA),阵元间距设定为半波长(0.085m)。采样率设为5倍信号频率,快拍数设定为500,信噪比(SNR)设定为10dB。
2. 近场信号建模与数据生成
代码模拟了两个具体的近场信源:
- 信源1:距离3.0米,角度-10度
- 信源2:距离4.0米,角度20度
程序依据球面波模型,计算每个信源相对于每个阵元的实际物理距离,并据此构建阵列流型矩阵(Steering Matrix),相位因子采用 $exp(-j cdot 2pi cdot f_0 cdot d / c)$。随后生成复高斯随机信号作为源信号,并根据设定的信噪比添加高斯白噪声,最终得到阵列接收数据矩阵 $X$。
3. 协方差矩阵处理
通过接收数据矩阵 $X$ 计算采样协方差矩阵 $R_{xx}$。为了防止矩阵求逆时出现奇异或数值不稳定(特别是在快拍数有限或相关性较高时),代码实施了对角加载技术,在 $R_{xx}$ 的对角线上添加了一个微小的量($10^{-4}$ 倍的迹),然后计算其逆矩阵 $R_{xx}^{-1}$,为MVDR运算做准备。
4. MVDR近场聚焦扫描
这是系统的核心算法部分。程序定义了一个二维扫描网格:
- 距离维:1米 至 6米,步长0.1米
- 角度维:-60度 至 60度,步长1度
利用双层循环遍历网格中的每一个点 $(r, theta)$。对于每一个扫描点,代码根据其坐标构建对应的近场导向矢量 $a_{scan}$,并利用MVDR空间谱公式计算该点的功率输出:
$$ P_{MVDR} = frac{1}{|a_{scan}^H cdot R_{xx}^{-1} cdot a_{scan}|} $$
扫描结果存储在
P_mvdr 矩阵中,并转化为dB刻度进行归一化处理。
5. 峰值搜索与定位
扫描完成后,程序在空间谱矩阵中寻找全局最大值,提取对应的距离和角度索引,从而得到对目标的估计位置。控制台会打印出估计位置与预设真实信源位置的对比,以验证算法的准确性。同时,代码会根据估计出的焦点位置,重新计算最优权矢量,并验证在该焦点处的阵列增益是否为理论值1。
6. 结果可视化
程序最后使用
function 绘图功能生成可视化图表:
- 几何场景图:展示阵列(黑色方块)与真实信源(红色圆点)的相对位置,以及扫描区域的边界。
- MVDR空间谱热力图:将极坐标下的扫描结果转换为笛卡尔坐标系,使用
surf 函数绘制二维伪彩图,颜色越红代表能量越强,能够直观看到两个聚焦峰。 - 距离维切片图:提取估计角度方向上的距离维数据,绘制波束形成在该方向上的能量随距离变化的曲线,展示距离分辨能力。