IB-Indoor Positioning Algorithm MATLAB Sim
项目简介
本项目是一个基于MATLAB开发的室内定位算法仿真系统。它旨在模拟室内无线网络环境下的信号传播特性,并实现了一套完整的定位系统流程,包括轨迹生成、信号采集、离线指纹库构建、在线定位解算以及误差分析。
该仿真平台集成了多种主流的室内定位算法,重点解决了GPS信号缺失环境下的高精度定位问题,通过对比几何测量法、位置指纹法以及结合卡尔曼滤波的融合算法,直观展示了不同技术方案的性能差异。
核心功能特性
- 环境与信号建模:模拟30m x 30m的室内环境,配置5个基站(AP),实现了对数正态阴影衰落(Log-Normal Shadowing)模型来生成带有随机噪声的RSSI信号。
- 动态轨迹仿真:生成并可视化“8字形”移动轨迹,模拟行人的动态移动过程。
- 多算法集成对比:
*
几何三边测量法 (Trilateration):基于RSSI转距离模型,利用线性化最小二乘法求解坐标。
*
非线性最小二乘优化 (NLS):使用三边测量结果作为初值,通过
fminsearch进行迭代优化,以最小化距离残差。
*
加权K-最近邻算法 (WKNN):基于位置指纹(Fingerprinting)技术,实现离线Radio Map构建与在线特征匹配。
*
卡尔曼滤波 (Kalman Filter):建立常速运动模型(CV),对WKNN的定位结果进行轨迹平滑与预测,降低随机波动影响。
- 全面评估体系:自动计算各类算法的均方根误差(RMSE),绘制累积分布函数(CDF)曲线,并通过可视化界面展示真实轨迹与估计轨迹的动态对比。
系统要求
- MATLAB R2016b 或更高版本
- Optimization Toolbox(用于NLS算法中的
fminsearch函数)
使用方法
直接在MATLAB环境中运行主脚本即可启动仿真。程序将自动执行环境初始化、数据生成、算法解算及绘图,并在控制台输出各算法的RMSE统计指标。
算法实现细节与逻辑分析
本项目的主程序严格按照以下逻辑流程执行,涵盖了从数据模拟到结果分析的全过程:
1. 系统参数配置
系统初始化定义了房间尺寸(30x30m)、无线传播参数(路径损耗指数 $n=2.5$,参考强度 $A_0=-40$dBm,阴影标准差 $sigma=2.0$dB)以及基站的坐标分布。随机数种子被固定,确保证仿真结果的可复现性。
2. 轨迹生成 (Simulation)
通过正弦函数合成参数方程,生成一个连续的“8字形”闭合轨迹,包含100个采样点,用于模拟行人在室内的真实移动路径。
3. 指纹库构建 (Offline Phase)
在指纹定位的离线阶段,系统以1.0米为分辨率将房间划分为网格。针对每一个网格节点(参考点 RP),计算该点到所有基站的理想RSSI值(基于对数距离路径损耗模型),构建 Radio Map(信号特征库)。
4. 卡尔曼滤波初始化
构建线性卡尔曼滤波器,状态向量包含位置和速度 $[x, y, v_x, v_y]^T$。定义了状态转移矩阵 $F$(基于匀速运动模型)、观测矩阵 $H$(观测位置坐标)、过程噪声协方差 $Q$ 和测量噪声协方差 $R$。
5. 在线仿真循环 (Online Phase)
系统对轨迹上的每一个点进行逐点仿真:
- 信号生成:根据当前真实坐标,计算到各AP的欧氏距离,并通过添加高斯随机噪声模拟环境阴影衰落,生成实时观测的RSSI向量。
- 距离反演:将观测到的RSSI通过路径损耗模型反算为物理距离。
- 算法一:三边测量法:构建线性方程组 $Ax=b$(通过减去最后一个基站的方程消除二次项),利用最小二乘法求解目标坐标。
- 算法二:NLS优化:以三边测量的结果为初始猜测值,通过非线性优化算法最小化测距误差的平方和,精细化定位结果。
- 算法三:WKNN指纹法:计算实时RSSI向量与Radio Map中所有参考点RSSI向量的欧氏距离(信号空间距离)。选取距离最近的 $k=4$ 个参考点,利用距离倒数作为权重进行加权求和,得到估计位置。
- 算法四:平滑处理:将 WKNN 的输出作为卡尔曼滤波器的观测输入(Measurement $Z$),经过“预测-更新”步骤,输出平滑后的坐标。
6. 误差分析与可视化
仿真结束后,系统计算各算法轨迹与真实轨迹之间的欧氏距离,统计均方根误差(RMSE)。最后生成综合图表:
- 2D轨迹对比图:在同一坐标系下展示真实轨迹、基站位置、Radio Map分布以及四种算法的估计路径。
- CDF曲线:展示各算法误差的累积概率分布,用于评估定位的稳定性。
- 时序误差图:专门对比WKNN原始误差与经过卡尔曼滤波平滑后的误差,展示滤波对抖动的抑制效果。
关键代码函数说明
calc_rssi: 实现对数正态阴影模型,输入距离返回带有噪声的RSSI值。rssi_to_dist: 信号传播模型的逆函数,用于将RSSI转换为几何距离。alg_trilateration: 执行矩阵运算,求解线性化的三边测量方程组。alg_nls_optimization: 封装非线性最小二乘逻辑,定义损失函数并调用优化器。alg_wknn: 执行指纹匹配逻辑,包含信号空间距离排序、K值截取及加权质心计算。draw_cdf: 辅助绘图函数,用于生成累积分布函数曲线。