RSSI定位算法
文章目录
- 一、定位算法简介
- 1.1. 定位技术原理
- 1.2. 定位算法
- 二、RSSI测距原理
- 2.1. 建模与测量终端到基站的距离
- 三、定位
- 3.1. 三边定位算法
- 3.2. 加权三边定位算法
- 3.3. 加权三角形质心定位算法
- 3.4. 程序定位算法的执行流程
一、定位算法简介
1.1. 定位技术原理
定位终端接收到iBeacon基站发来的信号强度,然后根据无线信号强度的渐变模型得出基站与被定位终端的直线距离,然后再根据高度补偿法,得出基站与终端的平面距离,当终端接收到三个以上不同基站的信号,即能得出与三个以上不同基站的水平距离,且这些基站的坐标坐标已知,就可以对这个终端进行定位。
1.2. 定位算法
定位算法有很多,像三角/三边质心算法、加权质心算法、最小二乘法、双曲线法、位置指纹算法、融合算法以及各种改进衍生算法等等。而依据定位策略的不同,BLE信标定位算法可分为基于距离和信号指纹定位两类。基于距离的定位算法是通过测量接收信号强度(RSSI)进行测距,但是由于室内环境对信号多径衰落的影响,基于距离的定位算法定位精度较低。相比之下,基于信号的指纹定位更适应于室内环境,国内外应用也较为普遍。指纹定位算法首先在室内固定位置点测量不同信标的RSSI值,再利用这些RSSI值以其对应的位置信息建立指纹地图(Fingerprints),再将在线测量的RSSI值与指纹地图匹配,进而估计用户的位置。
二、RSSI测距原理
2.1. 建模与测量终端到基站的距离
实际中通常用来测得基站与终端距离的简化无线信号渐变模型如下:
P L ( d ) = P L ( d 0 ) − 10 n l g d d 0 − N 0 PL(d) = PL(d_0) − 10nlg \frac {d}{d~0~} − N_0 PL(d)=PL(d0)−10nlgd 0 d−N0
| 符号 | 含义 |
|---|---|
| d | 节点之间的距离(即我们需要计算的距离) |
| n | 信号衰减指数,常取值为2~4,通常是由实际测量得到,障碍物越多,n值越大,从而接收到的平均能量下降的速度会随着距离的增加而变得越来越快 。 |
| d0 | 参考距离,为计算方便,通常选择一米处为参考距离 |
| PL(d) | 距离发送节点d处的信号强度,单位dBm |
| N0 | 均值为0,标准差为 σ 的高斯随机噪声变量 |
| PL(d0) | 距离发送节点 d0处的信号强度,一般从经验或硬件说明定义中得到, |
在实际应用中,通常需要实地测量得到基站在一米处接收到的功率值、环境衰减因子、高度补偿三个值,分别记为p0、n、h。其中,h根据终端一般使用时,与基站的垂直距离得到;
p0、n测量时,由于具体模型的建立与优化,对定位效果影响最大,为使模型能够最大程度符合当前室内环境中的无线信号传播特性,使RSSI测距能获得更高的精度,需要对参数A和n进行优化进而得到当前室内环境下的最优值。一般通过线性回归分析来估计参数和的值,因为RSSI值在超过14m以后基本趋于平缓,不再符合接收信号强度随着距离增大而衰减的规律。所以为保证测距精度,基站固定后,以20 cm为间隔,在距离基站14m的范围内设置70个测量点,即距离基站0.2 m,0.4 m,…,14m等位置。在每个测试点接收100个数据包后,对100个RSSI值求平均值,再以平均后的RSSI值作为终端在该位置收到的信号强度。最后记录RSSI和d的对应关系,这样就得到了70组测量数据(),= 1,2,3,…,100,其中表示距离为时终端接收到的功率值。对所采集的70组测量数据使用线性回归分析,带入以下公式,即可求出p0、n(式中A表示p0):

三、定位
当接收到三个以上不同基站的信号时,由2.1得到终端与基站的距离之后,便可利用定位算法对基站进行定位。最广泛使用的是三边定位算法,在此基础之上,改进的算法有加权三边定位算法和加权质心定位算法。
3.1. 三边定位算法
在基于测距的定位算法中,三边测量法是比较简单的算法,算法原理为:平面上有三个不共线的基站 A,B,C,和一个未知终端 D,并已测出三个基站到终端D的距离分别为R1,R2,R3,则以三个基站坐标为圆心,三基站到未知终端距离为半径可以画出三个相交的圆,如图下图所示,未知节点坐标即为三圆相交点。

然而,在实际测量中,往往由于测量的误差,使三个圆并不交于一点,而相交于一块区域,如下图所示。在此种情况下,便需用其他算法进行求解,如极大似然估计法,最小二乘法进行估计,或者使用三角形质心算法。

这里,我们的算法采用最小二乘法求近似解,并针对n个基站(n≥3),已知n个基站的坐标分别为 (),(),…,() ,未知终端坐标为() ,由以下步骤求解:
①:建立信标节点与未知节点距离方程组
{ ( x − x 1 ) 2 + ( y − y 1 ) 2 = d 1 2 ⋮ ( x − x n ) 2 + ( y − y n ) 2 = d n 2 \begin{cases} (x-x_1)^2 + (y-y_1)^2 = d_1^2 \\ \quad \quad \vdots \\ (x-x_n)^2 + (y-y_n)^2 = d_n^2 \end{cases} ⎩ ⎨ ⎧(x−x
相关文章:
RSSI定位算法
文章目录 一、定位算法简介1.1. 定位技术原理1.2. 定位算法二、RSSI测距原理2.1. 建模与测量终端到基站的距离三、定位3.1. 三边定位算法3.2. 加权三边定位算法3.3. 加权三角形质心定位算法3.4. 程序定位算法的执行流程一、定位算法简介 1.1. 定位技术原理 定位终端接收到iBe…...
布局管理(Layouts)-Qt-思维导图-学习笔记
布局管理(Layouts) Qt 提供了非常丰富的布局类,主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理,可以将子部件按行或列排列。根据排列方向的不同,QBoxLayout 分为 QHBoxLayout(水平布局)和 QVBox…...
《区块链赋能游戏业:破解虚拟资产交易与确权难题》
在当今数字化的时代,游戏行业正以前所未有的速度发展,虚拟资产在游戏中的重要性日益凸显。然而,虚拟资产的交易和确权问题一直困扰着游戏开发者和玩家。随着区块链技术的引入,为解决这些问题带来了新的曙光。 首先,我…...
机器学习第十一章-特征选择与稀疏学习
11.1子集收集与评价 属性称为"特征" ,对当前学习任务有用的属性称为"相关特征" 、没什么用的属性称为"无关特 征" . 从给定的特征集合中选择出相关特征于集的过程,称为"特征选择"。 特征选择是一个重要的"…...
C#中客户端直接引用服务端Proto文件
gRPC 客户端是从 .proto 文件生成的具体客户端类型。 具体 gRPC 客户端具有转换为 .proto 文件中 gRPC 服务的方法。 下一步打开【服务引用】 控制面板 选择grpc选项,然后继续 到此配置完成,然后就和服务共用一份protocol文件...
SiLM5932SHO系列SiLM5932SHOCG-DG 12A/12A强劲驱动电流能力 支持主动短路保护功能(ASC)单通道隔离门极驱动器
SiLM5932SHO系列是一款单通道隔离驱动器,提供12A源电流和12A灌电流。主动保护功能包括退饱和过流检测、UVLO、隔离故障报警和 4A 米勒钳位。输入侧电源的工作电压为3V至5.5V,输出侧电源的工作电压范围为13V至30V。所有电源电压引脚都有欠压锁定 (UVLO) 保…...
本地项目上传github
一、先在github(GitHub: Let’s build from here GitHub)上创建仓库 1,登录github后,点击右上角头像,点击 Your repositories 2,点击new 3,填写仓库名,假设命名 testhub࿰…...
使用zip包来安装mysql
下载 下载地址mysql,使用5.7.23 配置环境变量 添加到系统变量中 C:\Users\Admin\Downloads\mysql-5.7.23-win32\bin 添加my.ini配置文件 在C:\Users\Admin\Downloads\mysql-5.7.23-win32目录下添加my.ini [mysqld] # 设置3306端口 port3306# 自定义设置mysql的安装目录 b…...
嵌入式面经篇十——驱动开发
文章目录 前言一、驱动开发1、Linux 驱动程序的功能是什么?2、内核程序中申请内存使用什么函数?3、内核程序中申请内存和应用程序时申请内存有什么区别?4、自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用…...
MySQL(四)——常用函数
文章目录 函数字符串函数数值函数日期函数流程函数 函数 函数,是指一段可以直接被另一段程序调用的程序或代码。 MySQL中内置了许多函数,我们只需在合适的场景下调用它们即可,调用函数查询结果直接使用SELECT即可,并且可以嵌套使…...
C++ //练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。
C Primer(第5版) 练习 17.38 练习 17.38 扩展上一题中你的程序,将读入的每个单词打印到它所在的行。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 #include<iostream> #include<…...
NC 丑数
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 把只包含质因…...
Spring Boot 整合 Spring AI 实现项目接入ChatGPT(OpenAl的调用)
当前各种AI项目层出不穷,但绝大多数都是用python写的,现在Spring开源了Spring AI项目,让Java开发者也可以轻松给自己的springboot项目集成AI能力。目前spring AI正式版本为0.8.1,支持接入openAI、Ollama、Azure openAI、Huggingfa…...
react中 useContext 和useReducer的使用
在React中,useContext 和 useReducer 是两个非常有用的Hooks,它们分别用于管理跨组件的状态和复杂的状态逻辑。下面将分别介绍这两个Hooks的使用方式及其结合使用的场景。 1. useContext useContext 允许你订阅React的Context变化。Context提供了一种在…...
Android:动态更新app启动图标和应用名
一、需求背景 每逢重要佳节,很多应用启动图标会自动更新为对应佳节的图标,应用无需更新。 二、效果图 更新后的启动图标和应用名称 三、实现流程 Android app只能替换内置的icon,因此需要提前将logo图标放入App资源文件件里 实际项目App更新…...
深入探讨 ElementUI 动态渲染 el-table
在前端开发中,表格是不可或缺的一部分。无论是数据展示、数据录入,还是数据分析,表格都扮演着重要的角色。而在 Vue.js 生态系统中,ElementUI 提供了一个强大且灵活的表格组件——el-table。本文将带你深入了解如何使用 ElementUI…...
数据炼金术:用Python爬虫精炼信息
标题:数据炼金术:用Python爬虫精炼信息 在数据泛滥的互联网时代,Python爬虫不仅是搜集信息的利器,更是清洗和格式化数据的炼金术。本文将带你走进数据清洗和格式化的世界,展示如何使用Python爬虫从海量网络信息中提取…...
C++第三十八弹---一万六千字使用红黑树封装set和map
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、set/map基本结构 2、红黑树基本结构改造 3、红黑树的迭代器 4、set的模拟实现 5、map的模拟实现 6、完整代码 1、set/map基本结构 在封装…...
★ C++基础篇 ★ vector 类
Ciallo~(∠・ω< )⌒☆ ~ 今天,我将继续和大家一起学习C基础篇第六章----vector类 ~ 目录 一 vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…...
原生js用Export2Excel导出excel单级表头和多级表头数据方式实现
原生js用Export2Excel导出excel单级表头和多级表头数据方式实现 原生js用Export2Excel导出excel单级表头和多级表头数据方式实现HTML文件导入需要的文件HTML文件中实现导出函数HTML总代码实现汇总(直接复制代码,注意js引入路径) 原生js用Expo…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
mac:大模型系列测试
0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...
