为什么需要跳频
WLAN和基于IEEE 802.11规范的无线设备与蓝牙一样,在无需许可的2.4 GHz ISM(工业,科学和医疗)无线电频段中运行。
为了改善在该环境中的相同规范设备的通讯性能,SIG引入了自适应跳频的技术AFH(advance frequence hopping),以减少这种干扰的影响。
该跳频技术可以通过各种方法实现,每种方法都有其固有的优点和缺点。
在AFH解决方案出现之前开发的蓝牙产品采用另一种形式的跳频,其跳频在设计上是随机的。
这些第一代蓝牙设备使用2.4 GHz频段中的83.5个可用频道中的79个,以随机方式跳过这些频道,速率为每秒1600次。 一旦将另一个无线设备引入环境中,这种类型的跳跃就会导致偶尔的冲突,没有AFH蓝牙避免冲突的能力。 结果如下图所示,显示了蓝牙(BT)和无线LAN(WLAN)都在运行的环境。
与上述相反,自适应跳频AFH允许蓝牙通过识别固定的干扰源并将其从可用信道列表中排除来适应环境。 这种重新映射过程还涉及减少蓝牙使用的信道数量。
经典蓝牙跳频原理
经典蓝牙跳频框架如下所示:有一个Channel map,即为跳频表,一个跳频阶跃;根据跳频表和跳频阶跃和当前通讯频点,即可计算出主从机下一次数据通讯的频点。蓝牙跳频表算法各家的算法略有不同,但都需要解决两个问题
1. 信道评估:
SIG规范没有规定如何识别不良信道,这一过程通常被称为“信道评估”,因此AFH算法工程师面临着为每个特定解决方案选择最合适方法的任务。目前,有两种主要的方法用于执行具有自适应跳频的信道评估:RSSI(接收信号强度指示)和PER(分组错误率)。
RSSI和PER都是众所周知的用于确定哪些信道可能已被占用的技术。然而,当涉及监听当前信道状态时,这两种方法不同:PER用于反复测试和重新评估不良信道的方法不如RSSI准确,并且可能导致临时挫折。然而,在使用RSSI时还存在许多其他问题,例如RSSI消耗的功率大于PER。当缺少可用的时隙时,RSSI还可以要求从其他功能获取带宽。
2. 同一信道数据通讯:
蓝牙AFH规定,主设备和从设备都通过同一频道进行通信。 这样做是为了避免主设备在“好”信道上发送而从设备响应“坏”信道(反之亦然)的情况,因为这将导致多次重传(其他协议AFH的数据收发是在不同信道,会产生发数据正常,接收信道干扰导致无法响应主产生的多次重传)。由于主设备和从设备在相同频率上发送接收数据,因此信道跳频率降低50%至每秒800次。 虽然这可以使蓝牙设备对来自其他蓝牙设备的干扰更敏感,但迄今为止所带来的好处超过了这个小缺点。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信道一定是一个可用的信道了,因为它本身就从可用的信道集合中求出来的,下图是仿真软件计算的部分跳频表,和上面分析一致.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)算法得出输出:经过几轮亦或运算XOR,置换排序PERM,MAM之后得到prn_e16(跳频阶跃),余下步骤和CSA#1一致。output = (17 x a + b) mod 216
完整跳频算法如下所示:
假设主机使用到的信道为9,10,21,22,23,33,34,35,36。
usedChannel[]={9,10,21,22,23,33,34,35,36}
跳频总结
经典蓝牙跳频AFH算法最为复杂,需要实时监听坏信道,更新跳频表,对MCU资源要求较高,BLE 4.x是AFH的简化版,跳频表随机,跳频阶跃固定,蓝牙5的BLE部分使用新的CSA #2算法,跳频阶跃通过算法计算得到,避免干扰和多路径衰落效应。
网友评论