
低功耗蓝牙指纹定位与行人航位推算(PDR)融合的室内定位仿真系统,并分别采用 无迹卡尔曼滤波(UKF) 与 粒子滤波(PF) 对融合定位结果进行估计,同时与单独的 PDR 以及 BLE 指纹定位结果进行对比分析。整体流程包括 BLE信号建模、指纹库构建、PDR轨迹生成、BLE定位、UKF融合、PF融合以及误差统计分析 等步骤,可用于验证不同融合算法在室内定位场景中的性能差异。
原创程序,禁止翻卖。可联系我获取代码讲解、定制等
程序详解
低功耗蓝牙(BLE)信号模型与指纹库构建
程序首先在二维区域内部署若干 BLE 接入点(AP),并基于 对数距离路径损耗模型(Log-distance Path Loss Model) 构建 RSSI 信号传播模型。
在定位区域内按照固定分辨率建立网格点,对每个网格点计算来自所有 AP 的理论 RSSI 值,从而形成 BLE 指纹数据库。
在实际定位时,将当前测得的 RSSI 向量与指纹库进行匹配,通过 KNN 最近邻搜索 得到对应位置估计。
行人航位推算(PDR)模型
PDR 通过步长和航向角递推计算行人位置。由于 IMU 测量误差的存在,步长与航向角均叠加随机噪声,从而导致 PDR误差随时间累积漂移。
UKF融合定位方法
为了抑制 PDR 的累计误差,引入 BLE 定位结果作为观测量,并利用 无迹卡尔曼滤波(UKF) 进行状态估计。
完成状态更新,从而实现 PDR轨迹与BLE定位信息的融合估计。
粒子滤波融合方法
除了 UKF 外,程序还采用 粒子滤波(Particle Filter, PF) 实现非线性贝叶斯估计。粒子滤波利用大量粒子来表示系统状态概率分布,通过 系统重采样(Systematic Resampling) 消除粒子退化问题,并将粒子均值作为最终状态估计。
性能评估
程序采用 欧氏距离误差 评估定位精度。
并统计多种性能指标,包括
- 平均误差
- 中位数误差
- 标准差
- 最大误差
- 均方根误差(RMSE)
运行结果
蓝牙AP设置位置、各方法得到的轨迹对比图:

XY轴位移图像:

估计误差对比:

位置误差对比:

命令行输出的统计特性:

MATLAB源代码
部分代码如下:
% BLE与PDR定位,UKF与PF的融合、对比
% 作者:matlabfilter
% 2026-03-05/Ver1
clc; clear; close all
rng(0) % 固定随机种子,保证结果可复现
%% 初始化
% 环境参数设置
area_x = 200; % 区域X方向范围(米)
area_y = 50; % 区域Y方向范围(米)
% AP(接入点)布置
% 每行为一个AP的 [x, y] 坐标
AP = [
0 -10; % AP1:左下角
60 0; % AP2:右下角
50 20; % AP3:右上角
0 20; % AP4:左上角
10 10; % AP5:中心
];
nAP = size(AP, 1); % AP数量
% 信号传播模型参数
RSSI0 = -45; % 参考距离1m处的RSSI(dBm)
pathloss = 2.2; % 路径损耗指数
noise_rssi = 1; % RSSI测量噪声标准差(dBm)
完整代码:
https://download.youkuaiyun.com/download/callmeup/92711261
或:
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
182



被折叠的 条评论
为什么被折叠?



