【MATLAB例程】USBL与DVL误差BP神经网络补偿例程,带MATLAB代码下载链接,输出补偿前后的定位结果对比
本文介绍了一种基于BP神经网络的USBL(超短基线)定位误差补偿方法,结合DVL(多普勒计程仪)数据提高水下导航精度。针对USBL和DVL测量中存在的非线性时变误差,程序通过生成二维正弦轨迹模拟真实运动,并构建姿态与环境特征作为网络输入。BP神经网络以Levenberg-Marquardt算法训练,学习输入特征与USBL误差的映射关系,实现误差预测与补偿。实验结果显示补偿后定位精度显著提升,均方根

本程序演示了利用 BP(Back Propagation)神经网络 对 USBL(超短基线定位系统) 的观测误差进行非线性补偿。附带与DVL(多普勒计程仪)的建模
程序介绍
在水下导航中,USBL提供绝对位置测量,而DVL提供速度信息,两者的观测值都受到姿态变化、声速分布和传感器安装误差等影响,导致输出存在非线性、时变误差。传统滤波算法难以显式建模这些复杂偏差,因此引入BP神经网络学习输入特征(如姿态、深度)与误差之间的隐含关系,实现误差估计与补偿,从而提高整体定位精度。
数据生成与初始化:
N = 20000;
t = linspace(0, 2000, N)';
pos_true = [50*sin(0.03*t), 30*cos(0.03*t)];
程序首先生成一段二维正弦轨迹作为真实运动路径,并计算对应速度。
同时构造姿态与环境特征(深度、横滚角、俯仰角、航向角),作为网络输入特征。
这些变量模拟了水下航行器的状态信息:
- depth:深度变化代表水层影响;
- roll / pitch / yaw:姿态角变化引起声学测量方向偏差;
- 这些特征共同构成误差的主要影响因子。
USBL与DVL测量误差建模:
usbl_err = [2*sin(0.05*t) + 0.5*randn(N,1), ...
1.5*cos(0.04*t) + 0.5*randn(N,1)];
dvl_err = [0.2*sin(roll*pi/180) + 0.05*randn(N,1), ...
0.3*cos(pitch*pi/180) + 0.05*randn(N,1)];
- USBL误差:包含非线性正弦分量与随机噪声,模拟声线折射及设备偏差;
- DVL误差:与姿态角耦合,反映传感器安装角误差和底质反射偏差。
生成的带噪观测:
pos_usbl = pos_true + usbl_err;
vel_dvl = vel_true + dvl_err;
构造训练数据集:
X = features'; % 输入特征
Yx = usbl_err(:,1)'; % USBL x方向误差
Yy = usbl_err(:,2)'; % USBL y方向误差
BP网络以 姿态和环境参数为输入,以 USBL观测误差为输出。
数据集按照 80% 训练、20% 测试比例划分。
BP神经网络训练:
hiddenLayerSize = 10;
net_x = fitnet(hiddenLayerSize, 'trainlm');
net_y = fitnet(hiddenLayerSize, 'trainlm');
采用MATLAB自带的 fitnet 函数构建BP网络,激活函数默认tansig,训练算法为 Levenberg–Marquardt(trainlm),迭代500次。
误差预测与补偿:
Yx_pred = net_x(X_test);
Yy_pred = net_y(X_test);
usbl_err_pred = [Yx_pred', Yy_pred'];
pos_usbl_corr = pos_usbl(idx_test,:) - usbl_err_pred;
网络预测出每个测试样本对应的USBL误差,并将其从原始测量中扣除,实现误差补偿。
得到的 pos_usbl_corr 即为补偿后的改进位置估计。
运行结果
误差补偿前后的轨迹对比:
定位误差对比:

误差输出:
MATLAB源代码
部分代码如下:
%% 基于BP神经网络的USBL误差补偿+DVL示例
% 非线性误差补偿
% 作者:matlabfilter
% 2025-10-12/Ver1
clear; clc; close all;% 清除变量、命令行和图形窗口
rng(0); % 设置随机数种子
%% 生成仿真数据 初始化
N = 20000; % 样本数量
t = linspace(0, 2000, N)'; % 时间序列
% ---- 真实轨迹(二维)
pos_true = [50*sin(0.03*t), 30*cos(0.03*t)]; % [x, y]
vel_true = gradient(pos_true) ./ gradient(t); % 真实速度
订阅专栏后也可查看完整代码:
https://blog.csdn.net/callmeup/article/details/153119334?spm=1011.2415.3001.5331
单独代码的下载链接:
https://download.csdn.net/download/callmeup/92114151
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)