BLE自适应跳频算法详解

前言

(1)自适应跳频算法是相当的简单,小学生都能够看懂,而且网上已经有相当多的关于自适应跳频算法的介绍。既然如此,为什么我还要写这样一篇博客呢?
(2)原因很简单,我发现各位大佬可能是觉得自适应跳频算法太简单,以至于又加上了一堆其他深奥的内容,用以拔高整篇博客质量。当然,深度提高了,但是对于我这种小菜鸡来说,就容易搞的脑壳痛。
(3)因此,这里小菜鸡斗胆再写一篇博客介绍一下自适应跳频算法,并举例进行分析。

为什么需要自适应跳频算法

(1)首先我们需要知道BLE40个信道分布如下。

在这里插入图片描述

(2)在40个信道中,数据信道0 ~ 811 ~ 2024 ~ 31这些信道都将会与WI-FI信道进行冲突。除了常见的WI-FI以外,因为2.4GHZ频段属于免费频段因此还会有例如Zigbee等协议采用该频段,造成拥挤。

在这里插入图片描述

(3)为了保证BLE通讯过程中,降低与其他无线电协议产生碰撞几率,就需要使用一个跳频算法来进行保证。
(4)因此,我们即可知道,自适应跳频算法就是一种频率跳变的无线电技术,它能够屏蔽差的信道并将其重新映射到好的信道

自适应跳频算法介绍

自适应跳频算法公式

(1)跳频算法公式如下:
<1> f n f_{n} fn : 当前BLE连接事件使用的信道。
<2> f n + 1 f_{n+1} fn+1 : 下一次BLE连接事件使用的理论信道。
<3> h o p hop hop : 每次跳频的间隔,值为5~16
<3> % \% % : 取余,因为数据信道只有37个。

f n + 1 = ( f n + h o p ) % 37 f_{n+1}=(f_{n} + hop) \% 37 fn+1=(fn+hop)%37

(2)在跳频算法中,我们计算出来的 f n + 1 f_{n+1} fn+1 可能并不是可用信道,因此就需要ChannelMapUsednumUsed这三个参数了。
<1>ChannelMap5byte数据,实际使用37bit,用来表示设备间传输的信道图。其中0表示信道不可用,1表示信道可用。高位表示信道数高,低位为信道数低
<2>Used : 一个数组,用来记录当前ChannelMap中的可用信道。
<3>numUsed : 可用信道数量。
(3)当我们在上述的跳频算法中,获得的 f n + 1 f_{n+1} fn+1并不是可用信道时,就需要再使用如下算法得重映射后的信道。
<1> C h a n n e l Channel Channel : 重映射后的信道。
<2> U s e d [ ] Used[] Used[] : 可用信道数组
<3> f n + 1 f_{n+1} fn+1 : 下一次BLE连接事件使用的理论信道。
<4> % \% % : 取余,因为可用数据信道只有numUsed个。
<5> n u m U s e d numUsed numUsed : 可用信道数量。

C h a n n e l = U s e d [ f n + 1 % n u m U s e d ] Channel = Used[f_{n+1} \% numUsed] Channel=Used[fn+1%numUsed]

自适应跳频算法举例说明

所有信道均正常

(1)首先,我们假设0~37个信道都是可供BLE进行使用的。那么此时的
<1>ChannelMap = 0001 1111 1111 1111 1111 1111 1111 1111 1111 1111
<2>Used = [0,1,2,3,4,5,...,35,36]
<3>numUsed = 37
(2)我们预设hop值为5,初始信道 f n f_{n} fn0,那么信道分布如下:
<0>我们第一个信道设置为0,为好信道,因此无需进行重映射。因此实际信道也为0。
<1>因为上一个信道 f n f_{n} fn0hop5,所以 f n f_{n} fn+hop = 5,5 % 37 = 5。而信道5为可用信道,因此此时采用信道5
<…>
<8>因为上一个信道 f n f_{n} fn35,所以 f n f_{n} fn+hop = 40,40 % 37 = 3。而信道3为可用信道,因此此时采用信道3

连接事件计数器未映射时信道是否进行映射实际信道
000
155
21010
31515
42020
52525
63030
73535
833

部分信道正常

(1)上述情况为理想状态,那么我们现在假设3个主要的WI-FI信道都正在使用,此时的
<1>ChannelMap = 0001 1110 0000 0000 1110 1111 1111 0110 0000 0000。注意,从左到右表示360信道。
<2>Used = [9,10,21,22,23,33,34,35,36]
<3>numUsed = 9
(2)我们预设hop值为7,初始信道 f n f_{n} fn7,那么信道分布如下:
<0>首先,因为我们的初始信道 f n f_{n} fn7,而信道7不是可用信道,因此它会被重映射。因为numUsed = 9,所以 f n + 1 m o d n u m U s e d = 7 m o d 9 = 7 f_{n+1} \ mod \ \ numUsed = 7 \ mod \ 9 = 7 fn+1 mod  numUsed=7 mod 9=7。又因为Used[7] = 35,因此最终重映射后的实际信道为35
<…>后面计算方法同理。

连接事件计数器未映射时信道是否进行映射实际信道
0735
11433
22121
32810
43535
5533
61222
71910
82636
93333
10322
111010

自适应跳频算法学习存在问题

为什么hop为5~16?

(1)根据上面的例子,想必各位已经能够成功掌握自适应跳频算法了。那么,我们此时是否应该思考一个问题,为什么跳频算法的跳数值hop是在5~16范围内呢?
(2)因为大多数干扰一般都会占据几兆带宽,使用过小的hop值,并不能快速的脱离干扰源,这样将会造成持续的干扰。
(3)同理,如果使用过大的hop值,也无法快速脱离干扰源。根据前面所说的跳频算法,如果我们的 f n = 20 f_{n} = 20 fn=20 h o p = 17 hop = 17 hop=17,那么第一次信道为20,第二次就是0,第三次就是17。 这样我们会发现第一次和第三次的信道差距仅仅3个信道。

存在一个好信道,为什么不一直使用到不能使用为止?

(1)通过上面的了解,我们又会发现一个问题。如果某个信道是可用的,那为什么还需要跳到下一个信道中呢?按照常识来说,既然我们找到了一个可用信道,不应该一直使用该信道,直到该信道不可用为止吗?
(2)这个时候我们就需要考虑到一个问题,我们发现当前信道不可用了,那么做出改变,还来得及吗?因为数据信道大多和WI-FI的信道存在冲突,而WI-FI这种互联网流量存在突发性。当我们突然发现该信道不可用了,那么我们想通知对端设备更改信道,此时会发现,信息将无法有效的被对端设备接收。
(3)一旦信道失效,BLE设备就需要断开连接,重新进行连接同步,这将会耗费许多能量。
(4)而且处于同一区域的网络,会自发的选择干净的频率。如果使用单信道模型,将会出现,短时间相同信道网络数量激增情况。(这个从现实角度举例,就好比大家发现某个专业很好,就都一股脑往里面冲,最终导致内卷严重)
(5)如果使用跳频算法,将能够对网络流量在时域频域做出合理的分配,这样就能够允许大量的网络在同一区域同时工作。(注意,这个“同时”是较大的单位,例如分钟。如果从us级单位来看,并不是同时工作)
(6)最终,BLE设备采用是的,一个连接事件之内保持相同信道进行数据的交互,在下一个连接事件到来之时,将会换至另外一个信道中进行通讯

参考

(1)低功耗蓝牙开发权威指南 — 7.4 信道
(2)低功耗蓝牙开发权威指南 — 7.7.5 信道图
(3)低功耗蓝牙开发权威指南 — 7.11.1 自适应跳频
(3)低功耗蓝牙开发权威指南 — 7.12.5 单信道连接事件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网横向——利用WMI进行内网横向

文章目录 一、WMI介绍二、常规利用方法三、常见利用工具3.1 wmiexec3.2 Invoke-WmiCommand 四、WMI事件订阅的利用4.1 手动实现4.2 Sharp-WMIEvent 网络拓扑&#xff1a; 攻击机kali IP&#xff1a;192.168.111.0 跳板机win7 IP&#xff1a;192.168.111.128&#xff0c;192.168…

业务记录:处理动态表头的CSV/EXCEL文件

业务描述&#xff1a;传入一个动态表头的CSV文件&#xff0c;解析CSV&#xff0c;并保存入库。 CSV文件的表头是不确定的&#xff0c;即顺序和字段个数不确定&#xff0c;以及表头是中文字段。 例如&#xff1a; 为了顺利解析CSV文件&#xff0c;前端需要传入对应的字段名和顺…

axure制作切换栏--动态面板的应用

先看下效果&#xff1a;点击上面的切换栏 切换到西游记栏目&#xff1a; 切换到水浒传栏目&#xff1a; 上述两个图片比对可以发现&#xff0c;在点击切换栏的时候&#xff0c;里面的内容以及切换栏的下面蓝色横线也会发生对应的变化。这里涉及到两个地方的变化&#xff0c;就…

Golang 知识结构图

总结Go的入门知识结构&#xff0c;如下图所示&#xff1a;

图形/视图结构的三个坐标系

图形/视图结构的三个坐标系分别为视图结构系物理结构系&#xff0c;场景坐标系&#xff0c;图形项坐标系。 本文记录实践三个坐标系及视图与场景坐标转换&#xff0c;通过事件槽来显示出来的过程。 自定义1个View视图组件&#xff0c;其中扩展了鼠标点击、鼠标移动的事件&…

Golang | Leetcode Golang题解之第297题二叉树的序列化与反序列化

题目&#xff1a; 题解&#xff1a; type Codec struct{}func Constructor() (_ Codec) {return }func (c Codec) serialize(root *TreeNode) string {if root nil {return "X"}left : "(" c.serialize(root.Left) ")"right : "("…

前端渲染模式

渲染的概念 在Web开发中&#xff0c;渲染&#xff08;Rendering&#xff09;是一个核心概念&#xff0c;指的是将应用程序的数据&#xff08;data&#xff09;与模板&#xff08;template&#xff09;结合&#xff0c;生成最终的HTML页面&#xff0c;这个页面随后会被浏览器解析…

主宰生物进化的 “魔咒” —— 制约生物在特殊环境下进化方式的线索

一些神秘的法则制约着生物在特殊环境下的进化方式。它们还为动物将如何适应气候变暖提供了线索。 一些奇特的进化现象 一艘装满大象和老鼠的 “诺亚方舟” 搁浅在一座偏远的小岛上。动物们都幸存下来并繁衍后代。但是&#xff0c;随着世代相传&#xff0c;奇怪的事情发生了&a…

【基础篇】Docker 概览 ONE

嗨&#xff0c;大家好&#xff01;我是小竹笋&#xff0c;一名热爱创作的工程师。今天我将带领大家一起踏上探索 Docker 的奇妙之旅。我们先从 Docker 的历史和发展说起&#xff0c;然后再看看 Docker 和虚拟机之间的区别&#xff0c;最后了解一下 Docker 在各行各业的应用情况…

环境配置—批量删除时提示/usr/bin/rm: Argument list too long问题

文章目录 1. 背景介绍2. 问题原因3. 解决方案3.1 分批删除文件3.2 使用 find 命令直接删除3.3 增加系统参数限制3.4 使用循环删除 4. 结论 1. 背景介绍 在Linux系统中&#xff0c;rm 命令是删除文件和目录的常用工具。然而&#xff0c;当需要删除大量文件时&#xff0c;可能会…

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …

Kafka知识总结(事务+数据存储+请求模型+常见场景)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 事务 事务Producer保证消息写入分区的原子性&#xff0c;即这批消…

国内本地化OCSP服务的SSL证书:提升安全与效率的新选择

在数字化时代&#xff0c;网络安全成为企业运营和用户体验的重要基石。HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;作为一种安全的网络协议&#xff0c;通过SSL&#xff08;Secure Sockets Layer&#xff09;加密技术&#xff0c;保障了数据传输的机密性…

MATLAB基础应用精讲-【数模应用】Poisson 回归分析(附R语言代码实现)

目录 前言 知识储备 基于泊松回归、负二项回归模型 数据分布介绍 模型介绍 模型的选择 案例介绍 算法原理 泊松回归 数学模型 适用条件 参数估计与假设检验 SPSSAU Poisson 回归案例 1、背景 2、理论 3、操作 4、SPSSAU输出结果 5、文字分析 6、剖析 疑难解…

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

OpenSSL SSL_connect: Connection was reset in connection to github.com:443 目录 OpenSSL SSL_connect: Connection was reset in connection to github.com:443 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&…

kuberneter管理GUI工具Lens

从github上可以知道&#xff0c;lens的前端是用electron做的客户端工具&#xff0c;打开安装路径你会发现kubectl.exe,没错&#xff0c;就是你经常用的kubectl命令行的客户端工具。kubectl本来就能输出json的数据类型&#xff0c;集成前端更方便了。看到这里你是不是发现&#…

前端Long类型精度丢失:后端处理策略

文章目录 精度丢失的具体原因解决方法1. 使用 JsonSerialize 和 ToStringSerializer2. 使用 JsonFormat 注解3. 全局配置解决方案 结论 开发商城管理系统的品牌管理界面时&#xff0c;发现一个问题&#xff0c;接口返回品牌Id和页面展示的品牌Id不一致&#xff0c;如接口返回的…

Transformer--输入部分

&#x1f3f7;️上文我们简单介绍了Transformer模型的总体架构&#xff0c;本章我们主要介绍其输入部分 &#x1f4d6;前言 &#x1f4d6;文本嵌入层的作用 &#x1f4d6;位置编码器的作用 &#x1f4d6;前言 输入部分主要包括源文本嵌入层以及位置编码器&#xff0c;目标文本…

HX1838红外接收模块-红外遥控(外部中断+状态机)

目录 红外遥控 模块介绍 HX1838红外接收二极管 红外发射遥控器 遥控器键码 模块接线 NEC协议编码 状态机分析 驱动代码 IR.h IR.c main.c 红外遥控 红外遥控是利用红外光进行通信的设备&#xff0c;由红外LED将调制后的信号发出&#xff0c;由专用的红外接收头进行…

Unity + Hybridclr + Addressable + 微信小程序 热更新报错

报错时机&#xff1a; Generate All 怎么All 死活就是报错 生成微信小程序&#xff0c;并启动后 报错内容&#xff1a; MissingMethodException:AoT generic method notinstantiated in aot.assembly:Unity.ResourceManager:dll, 原因&#xff1a; Hybridclr 开发文档 解…