------------------------------------------------------------------------------------------------------------
文章版权归为微信公众号 Wireless Inside (前身 无线技术联盟),转载请注明出处.
XCODER.
技术博客:www.iotbzw.com
------------------------------------------------------------------------------------------------------------
FHSS : Frequency-hopping-spread-spectrum
关注微信公众号 "无线技术联盟", 提供有价值的市场信息和最新的技术分析
“ 本篇讲述蓝牙跳频算法及原理分析,分为四块部分,为什么需要跳频,经典蓝牙跳频,BLE 4.x跳频和BLE 5.x跳频,最后附上一份跳频代码,需要的朋友可以后台和我联系”
01
为什么需要跳频
WLAN和基于IEEE 802.11规范的无线设备与蓝牙一样,在无需许可的2.4 GHz ISM(工业,科学和医疗)无线电频段中运行。为了改善在该环境中的相同规范设备的通讯性能,SIG引入了自适应跳频的技术AFH(advance frequence hopping),以减少这种干扰的影响。该跳频技术可以通过各种方法实现,每种方法都有其固有的优点和缺点。爱立信是蓝牙无线技术领域的领导者,采用的方法非常适合作为知识产权(IP)销售的广泛的蓝牙设计解决方案。爱立信通过使用其他标准和专有技术进一步增强了AFH的实施,在多种无线技术的存在下为语音中心应用提供了出色的音频质量。
在AFH解决方案出现之前开发的蓝牙产品采用另一种形式的跳频,其跳频在设计上是随机的。 这些第一代蓝牙设备使用2.4 GHz频段中的83.5个可用频道中的79个,以随机方式跳过这些频道,速率为每秒1600次。 一旦将另一个无线设备引入环境中,这种类型的跳跃就会导致偶尔的冲突。 没有AFH蓝牙缺乏避免这些冲突的能力,从而适应其环境。 结果如下图所示,显示了蓝牙(BT)和无线LAN(WLAN)都在运行的环境。
与上述相反,自适应跳频AFH允许蓝牙通过识别固定的干扰源并将其从可用信道列表中排除来适应环境。 这种重新映射过程还涉及减少蓝牙使用的信道数量。 蓝牙规范要求至少20个信道的最小集合。 下图显示了与上图相同的环境,但现在使用了自适应跳频后的蓝牙通讯信道。
02
经典蓝牙跳频原理
经典蓝牙跳频框架如下所示:有一个Channel map,即为跳频表,一个跳频阶跃;根据跳频表和跳频阶跃和当前通讯频点,即可计算出主从机下一次数据通讯的频点。
蓝牙跳频表算法各家的算法略有不同,但都需要解决两个问题
1. 信道评估:
SIG规范没有规定如何识别不良信道,这一过程通常被称为“信道评估”,因此AFH算法工程师面临着为每个特定解决方案选择最合适方法的任务。目前,有两种主要的方法用于执行具有自适应跳频的信道评估:RSSI(接收信号强度指示)和PER(分组错误率)。
RSSI和PER都是众所周知的用于确定哪些信道可能已被占用的技术。然而,当涉及监听当前信道状态时,这两种方法不同。 PER用于反复测试和重新评估不良信道的方法不如RSSI准确,并且可能导致临时挫折。然而,在使用RSSI时还存在许多其他问题,例如RSSI消耗的功率大于PER。当缺少可用的时隙时,RSSI还可以要求从其他功能获取带宽。
2. 同一信道数据通讯:
蓝牙AFH规定,主设备和从设备都通过同一频道进行通信。 这样做是为了避免主设备在“好”信道上发送而从设备响应“坏”信道(反之亦然)的情况,因为这将导致多次重传(其他协议AFH的数据收发是在不同信道,会产生发数据正常,接收信道干扰导致无法响应主产生的多次重传)。由于主设备和从设备在相同频率上发送接收数据,因此信道跳频率降低50%至每秒800次。 虽然这可以使蓝牙设备对来自其他蓝牙设备的干扰更敏感,但迄今为止所带来的好处超过了这个小缺点。
03
BLE4.x跳频算法
Bluetooth LE CSA #1
调频算法用于数据连接中,数据信道同37个,调频公式如下: unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37
fn+1=(fn+hop) mod 37 hop是一个5~16的值,每次调频之后中心频率加后hop并模37。因为都是正整数,这个表达式在软件中非常容易实现,软件中通过求余运算便能完成运算,协议规定第一次连接事件中fn=0,fn+1=(0+hop) mod 37,也就是hop信道编号。
假设主机ChanelMap=00011110 00000000 11100000 00000110 00000000b,最右边为第一通道,最左边为第40信道,8bit为一组,总共五组(包括了三个广播信道)。
那么使用到的信道为9,10,21,22,23,33,34,35,36。
usedChannel[]={9,10,21,22,23,33,34,35,36}
假设hopIncrement =7,那么就可以进行自适应调频计算了,第一连接时
fn+1=(0+7) mod 37=7
而7信道不是一个可用的好信道,那么就要重映射
remappingIndex = 7 mod 9=7
再通过
usedChannel[7]=35
编号35信道一定是一个可用的信道了,因为它本身就从可用的信道集合中求出来的,下图是仿真软件计算的部分跳频表,和上面分析一致。
04
BLE5.0跳频算法
Bluetooth LE CSA #2
信道选择算法#2(CSA#2)是更复杂和更难跟踪用于获得下一个连接事件的信道索引的算法。特别是在高通量使用情况下,避免干扰和多路径衰落效应,使得蓝牙可以在超过10dBm的发射功率情况下获取全世界不同国家的无线电认证(单点发射功率过高肯定是难过欧美无线电认证,必须通过跳频方式使得产品平均低于当地政府要求,CSA #2的算法下,蓝牙产品在整个工作频段的平均功率较CSA #1要低)。
CSA #2和CSA #1一样的地方是都有一张约定的跳频表;不一样的是跳频阶跃的值,CSA #1的跳频阶跃值是固定的,CSA #2的跳频阶跃是通过算法计算出来的。
另外一个不一样的是CSA #2可以用在广播信道和连接信道,CSA #1只适用于连接信道。
CSA #2跳频阶跃算法:(不要问我为什么要弄这么复杂,背后是数学逻辑..)
Counter N:当前通信信道
ChannelIdentifier = (Access Address31-16) XOR (Access Address15-0)
通过Counter N和ChannelIdentifier 两个输入信号和一个随机序列产生器生成输出信号,输出信号即为跳频阶跃。
随机数据产生器中的MAM算法介绍:
MAM(The Multiply, Add, and Modulo)算法得出输出:
output = (17 x a + b) mod 216
经过几轮亦或运算XOR,置换排序PERM,MAM之后得到prn_e16(跳频阶跃),余下步骤和CSA#1一致。
完整跳频算法如下所示:
假设主机使用到的信道为9,10,21,22,23,33,34,35,36。
usedChannel[]={9,10,21,22,23,33,34,35,36}
Access Address为上一篇文章里面用到的0x364F10C1,下图为仿真软件计算的出来的prn_e和跳频表:
05
跳频总结
经典蓝牙跳频AFH算法最为复杂,需要实时监听坏信道,更新跳频表,对MCU资源要求较高,BLE 4.x是AFH的简化版,跳频表随机,跳频阶跃固定,蓝牙5的BLE部分使用新的CSA #2算法,跳频阶跃通过算法计算得到,避免干扰和多路径衰落效应。
大家看完不知道有没有过瘾,这是蓝牙的跳频算法,是一种被实验认证的标准,我们是不是可以换个思路,把算法放在其他私有频段通信使用呢?需要完整跳频算法代码的朋友后台留言给我:)
「Wireless Inside 微信公众号 (原无线技术联盟微信公众号) 微信交流群」
助力IoT行业朋友打通短距离无线通信圈的行业小社区。
集高通,Broadcom,TI,Nordic,Dialog,ST,Silicon lab, NXP, AMBIQ等蓝牙芯片原厂技术,市场,销售
集华为,MTK,泰凌微,凌思微,盛源达,ASR,华普微,中颖电子,百瑞互联,Realtek 国产芯片原厂技术,市场,销售
集Arrow,北高智,迅通,世强,利尔达,科通,全科等一线原厂代理商技术,市场,销售
集小米,华米,绿米,涂鸦,雅观,百度,阿里,Oppo,Vivo,京东互联网公司,品牌客户,方案公司技术,市场,销售,创始人
集蓝牙认证机构,被动器件,射频公司,以及SIG大佬
申请流程:
① 因群人数已超过限制人,请先微信扫描以下微信二维码或添加Xcoder微信号(blecoder),添加微信时请将您的个人信息进行备注(名字 公司 职位),以便登记,同时也欢迎同行和我进行交流。
② 由于需要我逐个邀请入群,所以请大家耐心等待!谢谢理解与支持!
无线技术联盟微信公众号,提供有价值的市场信息和最新的技术分析,欢迎关注交流,转载请注明出处。