需要找做网站的,无代码开发软件,微信接单任务群,短链接生成器手机版前言 #xff08;1#xff09;自适应跳频算法是相当的简单#xff0c;小学生都能够看懂#xff0c;而且网上已经有相当多的关于自适应跳频算法的介绍。既然如此#xff0c;为什么我还要写这样一篇博客呢#xff1f; #xff08;2#xff09;原因很简单#xff0c;我发…前言 1自适应跳频算法是相当的简单小学生都能够看懂而且网上已经有相当多的关于自适应跳频算法的介绍。既然如此为什么我还要写这样一篇博客呢 2原因很简单我发现各位大佬可能是觉得自适应跳频算法太简单以至于又加上了一堆其他深奥的内容用以拔高整篇博客质量。当然深度提高了但是对于我这种小菜鸡来说就容易搞的脑壳痛。 3因此这里小菜鸡斗胆再写一篇博客介绍一下自适应跳频算法并举例进行分析。 为什么需要自适应跳频算法 1首先我们需要知道BLE的40个信道分布如下。 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_{n1} fn1 下一次BLE连接事件使用的理论信道。 3 h o p hop hop 每次跳频的间隔值为5~16。 3 % \% % 取余因为数据信道只有37个。 f n 1 ( f n h o p ) % 37 f_{n1}(f_{n} hop) \% 37 fn1(fnhop)%37 2在跳频算法中我们计算出来的 f n 1 f_{n1} fn1 可能并不是可用信道因此就需要ChannelMap、Used、numUsed这三个参数了。 1ChannelMap 5byte数据实际使用37bit用来表示设备间传输的信道图。其中0表示信道不可用1表示信道可用。高位表示信道数高低位为信道数低。 2Used : 一个数组用来记录当前ChannelMap中的可用信道。 3numUsed 可用信道数量。 3当我们在上述的跳频算法中获得的 f n 1 f_{n1} fn1并不是可用信道时就需要再使用如下算法得重映射后的信道。 1 C h a n n e l Channel Channel 重映射后的信道。 2 U s e d [ ] Used[] Used[] 可用信道数组 3 f n 1 f_{n1} fn1 下一次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_{n1} \% numUsed] ChannelUsed[fn1%numUsed]
自适应跳频算法举例说明
所有信道均正常 1首先我们假设0~37个信道都是可供BLE进行使用的。那么此时的 1ChannelMap 0001 1111 1111 1111 1111 1111 1111 1111 1111 1111 2Used [0,1,2,3,4,5,...,35,36] 3numUsed 37 2我们预设hop值为5初始信道 f n f_{n} fn为0那么信道分布如下 0我们第一个信道设置为0为好信道因此无需进行重映射。因此实际信道也为0。 1因为上一个信道 f n f_{n} fn为0hop为5所以 f n f_{n} fnhop 55 % 37 5。而信道5为可用信道因此此时采用信道5。 … 8因为上一个信道 f n f_{n} fn为35所以 f n f_{n} fnhop 4040 % 37 3。而信道3为可用信道因此此时采用信道3。 连接事件计数器未映射时信道是否进行映射实际信道00否015否5210否10315否15420否20525否25630否30735否3583否3
部分信道正常 1上述情况为理想状态那么我们现在假设3个主要的WI-FI信道都正在使用此时的 1ChannelMap 0001 1110 0000 0000 1110 1111 1111 0110 0000 0000。注意从左到右表示36到0信道。 2Used [9,10,21,22,23,33,34,35,36] 3numUsed 9 2我们预设hop值为7初始信道 f n f_{n} fn为7那么信道分布如下 0首先因为我们的初始信道 f n f_{n} fn为7而信道7不是可用信道因此它会被重映射。因为numUsed 9所以 f n 1 m o d n u m U s e d 7 m o d 9 7 f_{n1} \ mod \ \ numUsed 7 \ mod \ 9 7 fn1 mod numUsed7 mod 97。又因为Used[7] 35因此最终重映射后的实际信道为35。 …后面计算方法同理。 连接事件计数器未映射时信道是否进行映射实际信道07是35114是33221否21328是10435否3555是33612是22719是10826是36933否33103是221110否10
自适应跳频算法学习存在问题
为什么hop为5~16 1根据上面的例子想必各位已经能够成功掌握自适应跳频算法了。那么我们此时是否应该思考一个问题为什么跳频算法的跳数值hop是在5~16范围内呢 2因为大多数干扰一般都会占据几兆带宽使用过小的hop值并不能快速的脱离干扰源这样将会造成持续的干扰。 3同理如果使用过大的hop值也无法快速脱离干扰源。根据前面所说的跳频算法如果我们的 f n 20 f_{n} 20 fn20 h o p 17 hop 17 hop17那么第一次信道为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 单信道连接事件