无线传感器网络(WSN)质心定位算法仿真项目
项目介绍
本项目是一个基于MATLAB开发的无线传感器网络(WSN)质心定位算法仿真平台。质心定位算法是一种典型的非测距(Range-free)定位技术,其核心思想是利用网络中位置已知的锚节点信息来估算未知节点的坐标。该程序完整模拟了从网络节点随机分布、通信链接建立到位置计算及误差评估的全过程,为研究WSN定位技术提供了直观的仿真环境和量化分析依据。
功能特性
- 拓扑自动化构建:支持在指定区域内随机生成传感器节点,并自动划分锚节点与未知节点。
- 通信连通性模拟:基于通信半径模型,自动判定未知节点与锚节点之间的连接关系。
- 几何质心算法实现:依据邻居锚节点的坐标平均值实现快速定位。
- 多维度误差分析:程序自动计算每个节点的绝对误差、全网平均定位误差以及归一化平均定位误差(Error/R)。
- 可视化结果展示:提供二维网络拓扑图、定位误差对比连接线以及误差分布直方图。
- 数据报告输出:通过命令行窗口输出仿真统计结果和详细的节点坐标对比表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 核心工具箱:基础 MATLAB 功能即可运行,无需额外工具箱。
使用方法
- 启动 MATLAB 软件。
- 将程序代码复制到 MATLAB 编辑器中。
- 点击“运行”按钮,程序将自动执行仿真。
- 仿真完成后,程序将弹出两个图形窗口:一个展示网络分布及定位效果,另一个展示误差分布情况。
- 在 MATLAB 命令行窗口中查看详细的统计数据和坐标对比表。
核心实现逻辑与流程
#### 1. 参数初始化
程序首先定义了仿真的基础物理参数,包括 100m x 100m 的监测区域边长、100 个总节点数、20 个锚节点数量以及 30m 的通信半径。通过这些参数确立了网络的部署密度和连通能力。
#### 2. 节点部署逻辑
利用随机数生成函数在 0 到 100 的范围内产生所有节点的 (x, y) 坐标。程序将节点分为两个集合:
- 锚节点:前 M 个节点,其位置在算法中被视为已知量。
- 未知节点:剩余的 N-M 个节点,其位置需要通过算法进行估算。
#### 3. 质心定位计算
这是程序的核心逻辑部分,针对每一个未知节点执行以下步骤:
- 距离判定:计算该未知节点与所有锚节点之间的欧氏距离。
- 邻居筛选:找出所有距离小于或等于通信半径 R 的锚节点索引。
- 坐标结算:如果存在邻居锚节点,则将这些邻居锚节点的 X 坐标和 Y 坐标分别求算术平均值,作为该未知节点的估算坐标。
- 失败处理:若未知节点通信范围内没有任何锚节点(孤立节点),则标记为无法定位,误差设为 NaN。
#### 4. 误差评估与统计
定位完成后,程序对结果进行多指标分析:
- 定位覆盖率:成功定位的节点数占总未知节点数的百分比。
- 平均定位误差:所有成功定位节点的欧氏距离偏差的均值。
- 归一化误差:平均误差与通信半径的比值,用于衡量算法在不同通信范围下的有效性。
关键实现细节分析
- 欧氏距离计算:程序使用了基于向量化的减法和平方根运算来快速获取节点间的空间距离,代码表现为
sqrt((x1-x2)^2 + (y1-y2)^2)。 - 质心算术平均:算法使用了
mean 函数对邻居节点的集合进行坐标聚合。这一实现符合经典质心算法定义,即假设未知节点位于其所有通信范围内锚节点所构成多边形的几何中心。 - 动态图形绘制:
* 使用
plot 函数配合不同的形状(如红色三角代表锚节点,黑色圆圈代表真实位置,蓝色星号代表估算位置)清晰区分节点属性。
* 通过
line 函数在真实位置与估算位置之间绘制虚线,直观呈现出每个节点的偏移程度。
* 利用
histogram 函数展示误差分布,帮助分析定位精度的离散程度。
- 结果打印:程序内置了格式化输出逻辑,通过
fprintf 在命令行打印出一张包含编号、真实坐标、估算坐标和具体误差值的对比表,展示前15个节点的详细信息,便于数值校验。