主要内容

蓝牙LE信道选择算法

此示例显示如何使用蓝牙核心规范中指定的信道选择算法来选择蓝牙®低能量(LE)信道索引[2]。使用这个例子,你可以:

  • 使用算法#1或算法#2为连接、周期性广告或等时事件选择通道索引。

  • 使用图形用户界面(GUI)生成所需的信道跳数,用于分析信道选择算法。

  • 使用蓝牙核心规格中指定的样本数据验证算法2 [2]。

  • 绘制并分析算法1和算法2的信道跳频模式。

  • 可视化100个连接事件的通道选择直方图。

蓝牙LE通道

蓝牙LE系统工作在2.4 GHz的ISM频段2400 ~ 2483.5 MHz。它使用40个射频信道(每个信道2 MHz宽)。下图显示了频率与蓝牙LE信道之间的映射关系。每个射频信道都被分配一个唯一的信道索引(在图中标记为“信道”)。

蓝牙LE将这40个射频信道分为3个广告信道(信道指数:37,38,39)和37个数据信道(信道指数:0到36)。请注意,广告频道散布在2.4 GHz频谱上。这种宽间距的目的是避免来自同一频谱中工作的其他设备(如WLAN)的干扰。广告通道主要用于发送广告报文、扫描请求/响应报文和连接指示报文。数据通道主要用于数据包的交换。

频道跳

在蓝牙技术中采用信道跳变技术来减少干扰,提高吞吐量。蓝牙核心规格[2]指定信道切换规则和跳频算法。

一些无线技术使用未经许可的2.4GHz ISM频段会增加干扰,并导致重传以纠正接收数据包中的错误。由于蓝牙LE是一种低能量协议,因此更容易受到干扰。蓝牙LE使用信道跳变来减轻干扰的影响。当一个信道被干扰完全阻塞时,设备之间可以在其他信道上继续通信。

广告设备在三个广告通道上循环传输广告报文(从通道索引37开始)。扫描或启动设备使用相同的程序,以循环方式监听三个广告通道。

连接的设备对于每个连接事件都会更改为新的数据通道。连接事件是两个连接设备之间的数据包交换序列。连接事件周期性地发生,间隔称为连接间隔。连接事件中的所有数据包都在同一数据通道上传输。新的连接事件使用新的数据通道。

蓝牙核心规范指定了“算法#1”和“算法#2”通道选择算法,为每个连接事件选择数据通道。有关信道选择算法的更多信息,请参阅[第6卷B部分第4.5.8节]2]。

这两种信道选择算法避免了容易产生传输错误的信道。中央节点和外围节点之间交换信道映射。这个映射表示好的和坏的数据通道。好的和坏的数据信道的分类依赖于信道分类的实现,并根据SNR(信噪比)、PER(分组错误率)等而有所不同。只有良好的数据通道用于设备之间的通信。如果Central设备识别出任何坏的数据通道,则更新通道映射。这两种信道选择算法使用信道映射来确定所选的数据信道是否适合使用。如果所选的数据通道是坏的,则使用通道重新映射过程选择一个新的数据通道。这个过程将坏的数据通道重新映射到一个好的数据通道。每种算法都有一个独特的重映射过程。 For more information about the channel selection algorithms, see Section 4.5.8, Part-B, Vol-6 of [2]。

模拟算法#1

创建蓝牙LE通道选择系统对象,指定算法为1。

csa = bleChannelSelection(“算法”1);

指定跳增量计数和使用的(正常)通道数。

csa。HopIncrement = 8;csa。UsedChannels = [0,5,13,9,24,36]
csa = bleChannelSelection with properties: Algorithm: 1 HopIncrement: 8 UsedChannels: [0 5 9 13 24 36] ChannelIndex: 0 EventCounter: 0

确定下一个信道跳点。为每个新连接事件选择一个新通道。

nextChannel = csa();流(使用“算法#1”为连接事件%d选择的通道为:%d\n, csa。EventCounter nextChannel);
使用“算法#1”为连接事件0选择的通道为:9

模拟算法2

创建蓝牙LE通道选择系统对象,指定算法为2。

csa = bleChannelSelection(“算法”2);

指定访问地址和已使用(正常)通道的数量。

csa。AccessAddress =“E89BED68”;csa。UsedChannels = [9,10,21,22,23,33,34,35,36]
csa = bleChannelSelection with properties: Algorithm: 2 AccessAddress: 'E89BED68' SubeventChannelSelection: false UsedChannels: [9 10 21 22 23 33 34 35 36] ChannelIndex: 0 EventCounter: 0

确定下一个信道跳点。为每个新连接事件选择一个新通道。

nextChannel = csa();流(使用“算法#2”为连接事件%d选择的通道为:%d\n, csa。EventCounter nextChannel);
使用“算法#2”为连接事件0选择的通道为:22

分析信道选择算法的GUI

BLEChannelSelectionUIapp提供了一个GUI来生成所需的通道跳数。

BLEChannelSelectionUI

图Bluetooth LE Channel Selection Algorithm Analyzer包含一个uipanel类型的对象。

使用这个GUI,你可以:

  • 分析“算法1”和“算法2”

  • 绘制“算法1”和“算法2”的信道跳频模式和信道选择直方图

用样本数据验证算法

蓝牙核心规范指定了验证“算法#2”的样本数据。有关详情,请参阅[第6卷C部分第3节]。2]。但是,没有用于验证算法#1的示例数据。

样本数据1(37个良好数据通道)

  1. 访问地址= 8E89BED6

  2. 已使用频道= [0:36]

当您使用上述输入时,算法#2选择这些通道。

这段代码使用算法#2为前三个连接事件选择了三个通道。

csa = bleChannelSelection(“算法”2);

设置连接访问地址。

csa。AccessAddress =“8 e89bed6”;

指定37个有效数据通道作为已使用通道。

csa。UsedChannels = (0:36);

为前四个连接事件选择通道索引。用上表中所述的值验证输出。

numConnectionEvents = 4;index = 1:numConnectionEvents channel = csa();流('事件计数器:%d,选定通道:%d\n', csa。EventCounter、通道);结束
事件计数器:0,选定通道:25事件计数器:1,选定通道:20事件计数器:2,选定通道:6事件计数器:3,选定通道:21

样本数据2(9个良好数据通道)

  1. 访问地址= 8E89BED6

  2. 已使用通道= [9,10,21,22,23,33,34,35,36]

当您使用上述输入时,算法#2选择这些通道。由于信道映射中包含坏信道,对算法中使用的信道重映射过程也进行了验证。

这段代码使用算法#2为前9个连接事件选择了9个通道。

csa = bleChannelSelection(“算法”2);

设置连接访问地址。

csa。AccessAddress =“8 e89bed6”;

指定9个可用的数据通道。

csa。UsedChannels = [9,10,21,22,23,33,34,35,36];

为前九个连接事件选择通道索引。用上表中所述的值验证输出。

numConnectionEvents = 9;index = 1:numConnectionEvents channel = csa();流('事件计数器:%d,选定通道:%d\n', csa。EventCounter、通道);结束
事件计数器:0,所选通道:35事件计数器:1,所选通道:9事件计数器:2,所选通道:33事件计数器:3,所选通道:21事件计数器:4,所选通道:34事件计数器:5,所选通道:36事件计数器:6,所选通道:23事件计数器:7,所选通道:9事件计数器:8,所选通道:34

绘制并分析信道跳频模式

这段代码片段使用“算法#1”为前100个连接事件选择通道索引。为“算法#1”创建一个通道选择算法系统对象。

csa = bleChannelSelection;

为100个连接事件生成通道跳序列。

numConnectionEvents = 100;hopSequence = 0 (1, numConnectionEvents);index = 1:numConnectionEvents hopSequence(index) = csa();结束

helperBLEPlotChannelHopSequence辅助函数绘制信道跳变模式和所选信道的直方图。

helperBLEPlotChannelHopSequence (csa, hopSequence);

图:通道选择算法#1包含2个轴对象。axis对象1带有标题通道跳变模式,xlabel连接事件计数器,ylabel蓝牙LE通道包含一个类型为line的对象。axis对象2带有标题的100个连接事件的通道选择直方图,xlabel蓝牙LE通道,ylabel通道计数包含类型为直方图的对象。

这段代码片段使用“算法#2”为前100个连接事件选择通道索引。为“算法#2”创建一个通道选择算法系统对象。

csa = bleChannelSelection(“算法”2);

为100个连接事件生成通道跳序列。

numConnectionEvents = 100;hopSequence = 0 (1, numConnectionEvents);index = 1:numConnectionEvents hopSequence(index) = csa();结束

helperBLEPlotChannelHopSequence辅助函数绘制信道跳变模式和所选信道的直方图。

helperBLEPlotChannelHopSequence (csa, hopSequence);

图:Channel Selection Algorithm #2包含2个轴对象。axis对象1带有标题通道跳变模式,xlabel连接事件计数器,ylabel蓝牙LE通道包含一个类型为line的对象。axis对象2带有标题的100个连接事件的通道选择直方图,xlabel蓝牙LE通道,ylabel通道计数包含类型为直方图的对象。

上面的图表显示了两种算法之间的差异。

  • 算法#1是一个简单的增量算法,它产生一个统一的通道序列。在选择新渠道的过程中不涉及随机化。

  • 算法#2在蓝牙核心规范的5.0版本中引入。与算法1相比,算法2更复杂,产生一个随机的通道序列。

附录

下面的例子使用了这个helper:

选定的参考书目

  1. 蓝牙技术网站。“蓝牙技术网站|蓝牙技术官网。”访问时间为2022年6月13日。https://www.bluetooth.com

  2. 蓝牙特别兴趣小组(SIG)。“蓝牙核心规范。”5.3版。https://www.bluetooth.com/。

另请参阅

对象