当前位置: 首页 > news >正文

【MATLAB】基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据(附代码)

基于Wi-Fi指纹匹配的室内定位-仿真获取WiFi RSSI数据

WiFi指纹匹配是室内定位最为基础和常见的研究,但是WiFi指纹的采集可以称得上是labor-intensive和time-consuming。现在,给大家分享一下我们课题组之前在做WiFi指纹定位时的基于射线跟踪技术仿真WiFi RSSI实验代码。

对数路径损耗模型

WiFi信号强度在空间中传播符合路径损耗模型。本文介绍的是较为常用的对数路径损耗模型,如下公式:
在这里插入图片描述
RSS衰减与距离的对数呈正比,假设已知一个参考距离d0以及这个距离上的RSS为
RSS(d0),那么距离为d的RSS(d)就可以通过上式计算得到。n是环境因子,在自由空间中一般取2就可以。
下图是实际RSS和模型仿真RSS的比较。在实际环境中,因为受到多径效应、非视距传播等噪声的影响,信号强度会发生变化,所以实际测量到的Wi-Fi信号一般如红线所示。

在这里插入图片描述

利用射线跟踪技术仿真得到Wi-Fi的RSSI数据

Wi-Fi信号沿直线传播,可以将其近似为射线进行分析。对于一个固定的发射源(即WiFi AP),在自由空间中,利用对数距离衰减模型即可计算各个位置的RSS,但是室内环境很复杂,信号可以遇到墙壁发生反射,各个反射后的信号又可以与未经反射的信号叠加,实际中测量到的信号其实包括了各个反射、绕射、散射信号。在射线跟踪中,计算出发射点与接收点之间的多条传播路径,分别对各个路径的信号进行分析,一般包括信号强度、相位在多次反射或绕射下的计算,然后叠加得到接收点上的信号。
在仿真实验中,我们把每个Wi-Fi AP看成一个固定的发射源,而接收器则要接受来自不同Wi-Fi AP的信号。接收器收到的信号中包含了来自每个WiFi AP的1条直射路径与6条(墙壁)反射路径的信号,因为反射后信号很小,所以我们不考虑反射信号路径。根据对数路径损耗模型,我们理论上可以计算出室内每点的WiFi RSSI强度,用于室内定位指纹库建立。
如下图,是仿真得到的某WiFi AP所覆盖的WiFi信号强度。
在这里插入图片描述

仿真实验MATLAB代码

实际上在射线仿真实验中涉及到了通信原理的知识,但是因为我本人不是通信出身,所以不做具体说明,想要了解射线传播原理的同学自己搜索相关知识~
以下是主程序代码:

if ~exist('radio_map_20_15.mat', 'file') %生成仿真环境disp('正在模拟射线跟踪...');generate_radio_map(0.01);  % 仿真射线网格大小
endclc
clear;
load radio_map_30_30.mat; 
%变量为fingerprint %默认尺寸为20m*15m * 10ap,网格大小为0.01m
%注意:这里的仿真环境(fingerprint)是一个精度很高的指纹库,后面从这个仿真环境中进行取样(采集数据)并生成用于定位的指纹库。%% 获取离线指纹库
%如果要研究指纹库构建上的优化,在这部分改进
[offline_rss, offline_location] = get_offline_data_uniform(fingerprint,100); %均匀采样
offline_location=offline_location/100; 
idx=[1:1:length(offline_location)]';
offline_location=[offline_location,idx];
save('offline_data_uniform', 'offline_rss', 'offline_location');
[offline_rss, offline_location] = get_offline_data_random(fingerprint); %随机采样
offline_location=offline_location/100;
save('offline_data_random', 'offline_rss', 'offline_location');%% 获取在线定位阶段的数据
%前面默认的数据集的密度是0.01m,这样的话整个仿真系统的位置最小分辨率为0.01m,trace总是0.01的整数倍
roomLength = 30;
roomWidth = 30;
t = 1000;
[ loc, rss ] = get_online_data( fingerprint, 1, roomLength, roomWidth, t ); %得到轨迹与对应的RSS
save('online_data', 'loc', 'rss');
%%
clear fingerprint;

本仿真实验的完整代码:仿真获取WiFi RSSI数据
WiFi指纹定位的项目代码:WiFi指纹定位

http://www.lryc.cn/news/338730.html

相关文章:

  • 深圳晶彩智能ESP32-3248S035R使用LovyanGFX实现手写板
  • 【Spring Boot】深入解密Spring Boot日志:最佳实践与策略解析
  • ISTQB选择国内版,还是国际版呢
  • 头歌-机器学习 第11次实验 softmax回归
  • Qt for MCUs 2.7正式发布
  • 共享IP和独享IP如何选择,两者有何区别?
  • 文心一言VSchatGPT4
  • Linux 目录结构与基础查看命令
  • 【matlab】如何解决打开缓慢问题(如何让matlab在十几秒内打开)
  • 【stata】求滚动波动情况
  • The C programming language (second edition,KR) exercise(CHAPTER 2)
  • rust实现循环链表
  • 2. Spring的创建和Bean的存取
  • 策略模式【行为模式C++】
  • php中session相关知识(目前了解部分)
  • 从零实现诗词GPT大模型:GPT是怎么生成内容的?
  • 8路HDMI+8路AV高清视频流媒体编码器JR-3218HD
  • LangChain入门:14.LLMChain:最简单的链的使用
  • 深入理解k8s kube-proxy
  • Spark-机器学习(1)什么是机器学习与MLlib算法库的认识
  • java的正则表达式校验,包含了中国几乎所有运营商手机号码的校验格式
  • C#简单工厂模式的实现
  • .NET 设计模式—观察者模式(Observer Pattern)
  • EasyUI Jquery 学习笔记 ——DataGrid(数据网格)与 Tree(树)详细版
  • JAVA发票验真接口、票据ocr、数电票在线查验真伪
  • el-date-picker调用回车事件
  • js学习总结
  • MES实施优势有哪些?MES制造执行系统的主要内容
  • ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT
  • 废品回收 小程序+APP