主要内容

无线传感器网络中的蓝牙网状洪水

此示例使用用于Bluetooth®协议的通信工具箱库™,演示了Bluetooth®网格网络中的网络层泛洪。使用此示例,您可以:

  • 通过在网格中定位节点来创建和配置一个蓝牙网格网络。

  • 通过配置节点位置和节点位置分配类型来指定自己的网络。

  • 将网状节点分类和配置为源,目标,继电器和结束节点,并观察网络层泛洪如何在源和目的地之间的通信中有所帮助,即使在禁用少量中间继电器节点之后也是如此。

  • 可视化从源到目的地的数据包流。

该示例还示出了如何在蓝牙网状网络上执行Monte Carlo模拟以获得数值结果(如所需的中继节点的数量,源和目的地之间的临界中继节点)在多个迭代中平均。

蓝牙网栈

蓝牙核心规范[1]包括用于低速率无线个人区域网络的低功耗版本,称为低功耗蓝牙(BLE)或蓝牙智能。BLE栈由通用属性配置文件GATT (generic attribute profile)、属性协议ATT (attribute protocol)、安全管理协议SMP (security manager protocol)、逻辑链路控制和适配协议L2CAP (logical link control and adaptation protocol)、链路层LL (link layer)和物理层组成。BLE被添加到产生少量数据的低能耗设备的标准中,如用于家庭自动化、医疗保健、健身和物联网(IoT)等应用的通知警报。有关BLE协议栈的更多信息,请参见蓝牙协议栈

蓝牙网格配置文件[2]定义实现BLE的网状网络解决方案的基本要求。网格堆叠位于BLE核心规范的顶部,包括模型层,基础模型层,接入层,上传输层,下传输层,网络层和承载层。蓝牙网状网络可以在智能照明,工业自动化,传感器网络,资产跟踪等应用中实现大型设备网络,以及许多其他物联网解决方案。金宝搏官方网站有关蓝牙网格堆栈的更多信息,请参阅蓝牙网状网络

蓝牙网状网络层执行这些主要操作。

  • 使用承载层在网络上传输上层消息

  • 中继网格消息

  • 实施托管洪水以优化网络泛滥

  • 分配网络地址

  • 配置网络层安全性

有关这些网状网络层操作的更多信息,请参见蓝牙网状网络

这个例子使用广告载体来演示蓝牙网格泛洪在无线传感器网络中的应用。

这个例子的主要目标是:

  1. 创建并配置一个蓝牙网状网络

  2. 可视化消息洪水

  3. 派生选定的源和目的地之间的路径

  4. 显示统计信息(参考每个节点的网络层统计信息)在每个节点

检查支持包安装情况金宝app

%检查'蓝牙协议的“通信工具箱库”%支金宝app持包是否安装。comm金宝appSupportPackageCheck (“蓝牙”);

创建和配置蓝牙网状网络方案

此示例使您可以创建和配置两个蓝牙网状网络方案。每种情况都是50节点网络。网络中的节点被分类为继电器,源,目的地和结束节点。指定相应的时间(ttl)源和目标节点的值。在第一场景中,该示例标识源和目标节点之间的路径。您可以通过网络层统计来可视化网络中的消息流。在第二种方案中,该示例禁用一些中继节点和结束节点。在这种情况下,模拟表明网络具有在指定源和目标对之间建立路径的可能性。

创建和可视化网格网络,使用HelperberaleshNetWorkNode.Helperberaleshvisualizenetwork.功能。指定节点数量(总数)和节点位置的类型(NodePositionType) 在Helperberaleshvisualizenetwork.功能。默认类型的节点位置是“网格”。要指定自己的网络,请设置值NodePositionType到'UserInput'和节点位置职位

%将随机数生成器种子设置为“默认”SPREV = RNG(“默认”);%指定网状网络中的节点数TotalNodes = 50;%初始化与类型对象的“blemeshnodes”向量% helperBLEMeshNetworkNodeblmeshnodes (1, totalNodes) = helperblemeshnetworkknode;%使用唯一标识符配置每个网状节点为了IDX = 1:TotalNodes Meshnode = HelperBeryhnetWorknode;meshnode.identifier = IDX;meshnode.networklayer.elementaddresses = Dec2Hex(IDX,4);Blemeshnodes(IDX)= Meshnode;结尾从MAT文件加载节点位置加载(“bleMeshNetworkNodePositions.mat”);在本示例中模拟的场景数量numberofscenarios = 2;%初始化带有类型的对象的' meshnetworkplot '向量% helperBLEMeshVisualizeNetworkmeshnetworkplots(1,numberofscenarios)= helperberaleshvisualizenetwork;为了idx = 1:numberOfScenarios meshNetworkPlots(idx) = helperblemeshvisualizennetwork;meshNetworkPlots (idx)。NumberOfNodes = totalNodes;%将节点位置分配的类型设置为“网格”或%'userInput'meshnetworkplots(idx).nodepositytype =“UserInput”;%基于节点数量设置节点位置(适用于% 'UserInput'),单位为米meshNetworkPlots (idx)。职位= bleMeshNetworkNodePositions;%根据节点位置设置附近范围,单位为米meshNetworkPlots (idx)。VicinityRange = 25;%设置标题为网络可视化meshnetworkplots(idx).title =......['设想 'num2str (idx)':蓝牙网状洪水'];结尾

在使用的网状网络中指定源和目的对的数量srcDstPairs范围。指定源自每个源节点的数据包的TTL值。

%模拟时间,单位为毫秒simulationTime = 600;%启用或禁用可视化enableVisualization = true;%指定源对和目标对srcdstpaire = [1 7;13 29];%指定每个源节点发出的报文的TTL值ttl = [25;25);

模拟

要运行模拟并获取结果,请使用helperBLEMeshFloodingSimulationhelperBLEMeshFloodingSimulationResults功能分别。

  • 场景1:在这种情况下,网络中的所有50个节点都是活动的。其中一些节点被选择为继电器,并且在此场景中没有故障节点。

%指定中继节点relayNodeIDs =[3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 .参数参数说明取值relayNodeIDs = [3 4 5 8 10 11 15 19 20 21 23 25 28 30 32 34 36 37 38 39 41 .......42 43 44 45 46 47 48 49];%指定失败的节点(未采用网络的节点)failedNodeIDs = [];

该图显示了每个源和目标对之间的对应路径。这scenarioOneResults工作区变量存储包含场景1中获得的路径的结果。

%使用场景1配置运行模拟pathscenarioone = helperberaleshfloodingsimulation(totalnodes,blemeshnodes,meshnetworkplots(1),......模拟时间,srcdstpairs,ttl,relaynodeids,failednodeids,......enableVisualization);%显示场景1的结果场景= HelperberaleshFloadingsImulationResults(Srcdstpairs,PathScenarioone)
NumberOfHops scenarioOneResults = 2 x4表源目的地路径  ______ ___________ ___________________________ ____________ 1 7 {[1 46 19 4 39 41 48 23 7]} 8 13 29 {[13 5 3 28 36 44 29]} 6

  • 场景2:在这种情况下,禁用节点41的中继特征。从网络中删除节点3和节点43。

%指定中继节点RelayNodeDID = [4 5 8 10 11 15 19 20 21 23 23 23 23 23 32 37 38 39 42......44 45 46 47 48 49];%指定失败的节点(未采用网络的节点)failednodeids = [3,43];

该图显示了每个源和目标对之间的对应路径。这场景工作区变量存储包含场景2中获得的路径的结果。

%使用场景2配置运行模拟pathscenariotwo = helperberbesh闪亮ingsimulation(totalnodes,blemeshnodes,meshnetworkplots(2),......模拟时间,srcdstpairs,ttl,relaynodeids,failednodeids,......enableVisualization);%显示场景2的结果chinesotworesults = helperBLEMeshFloodingSimulationResults(srcDstPairs, pathscenario otwo)
场景= 2x4表源目的地路径NumbumeOfhops ______ ___________ ___________________________________________________________________________________________________________________________________________________________________________________________________17} 7

网络层数据

在每个节点上,本示例捕获这些网络层统计信息。

  • 节点传输的消息数

  • 节点接收的消息数

  • 收到的应用程序消息数

  • 节点转发的消息数

  • 节点丢弃的消息数

statisticsAtEachNode工作区变量包含场景1和场景2中所有节点的累计网络统计信息。对于特定的模拟运行,您只能看到前5个节点的网络统计信息。这些是网络中前5个节点的网络统计数据。

statisticateachnode = helperberaleshfloodingsimulationResults(欺骗性);statistics forfirstfivenodes = statisticateachnode(1:min(5,totalnodes),:)
statisticsForFirstFiveNodes = 5×6表节点ID TotalTxMsgs TotalRxMsgs TotalAppRxMsgs TotalRelayedMsgs TotalDroppedMsgs ______ ___________ ___________ ______________ ________________ ________________ 1 2 4 0 0 4 2 0 8 0 0 8 3 0 5 0 2 3 4 0 10 0 4 6 5 0 9 0 4 5

进一步的探索

为了获得在多种模拟上平均的数值结果,示例实现了蒙特卡罗方法[3.]。在启用或禁用网状网络中启用或禁用中继节点时,将消息传递的概率分析到目标节点,使用helperBLEMeshMonteCarloSimulations脚本。每个模拟运行遵循以下步骤。

  1. 使用新种子生成随机数。

  2. 随机禁用中继节点,直到源节点和目标节点之间只存在一条路径。

  3. 存储路径。

蒙特卡罗模拟输出这些统计数据。

  • 当在网络中随机禁用中继节点时,从源到目的地的消息传递的概率

  • 源和目标节点之间的平均跳数

  • 关键继电器需要确保数据包从源传送到目的地

该示例通过使用这些配置参数执行蒙特卡罗模拟。

%源节点和目标节点srcdstpair = [16 12];消息的%TTL值源自上述源节点TTL = 25;%继电器节点relayNodeIDs = [21 15 25 11 38 19 46 8 39 20 37 32 30 5 45 49 43 3 28 36 47......34 23 48 41 44 42 10 4];%故障节点(网络外的节点)failedNodeIDs = [];

该示例通过使用上述配置执行10,000个模拟。要查看仿真结果,请参阅bleMeshMonteCarloResults.mat垫文件。

加载('blemeshmontecarloresults.mat');DISP([“节点之间有路径的概率”num2str(srcdstpair(1))......'和节点'NUM2STR(SRCDSTPAIR(2))“是”......num2str(概率琥珀遗料)'%。']);DISP([节点间的平均跳数num2str(srcdstpair(1))'和节点'......NUM2STR(SRCDSTPAIR(2))“是”......num2str (averageHopCount)'。']);DISP([“推导节点之间路径所需的关键中继节点”num2str(srcdstpair(1))......'和节点'NUM2STR(SRCDSTPAIR(2))' 是 ['num2str (criticalRelaysInfo{1:5, 1}”)......“]”。]);%恢复之前的随机数生成设置rng (sprev);
节点16与节点12之间存在路径的概率为88.6428%。节点16与节点12之间的平均跳数为8。推导节点16与节点12之间路径所需的关键中继节点为[39 37 8 38 4]。

为自定义配置参数执行蒙特卡罗模拟,修改并运行helperBLEMeshMonteCarloSimulations脚本。

此示例使您可以创建和配置多个蓝牙网状网络并分析网络层泛洪。要研究洪水行为,该示例考虑了两个模拟方案。在第一场景中,通过选择一些中间节点作为中继节点来识别和可视化源区和目的地节点之间的路径。在第二种情况下,一些节点(继电器和结束)被丢弃,并且禁用了一些中继节点的中继功能。所获得的结果表明,即使网络中的节点(继电器和结束)失败,源和目标节点之间存在路径。

这个示例允许您创建自己的蓝牙网格网络,并可视化网格泛滥和网络统计信息。为了获得经过多次迭代的平均数值结果,您可以在蓝牙网格网络上执行蒙特卡罗模拟。

附录

该示例使用这些帮助程序:

选定的书目

  1. 蓝牙特殊兴趣组(SIG)。“蓝牙核心规范”。版本5.0。https://www.bluetooth.com/

  2. 蓝牙特殊兴趣组(SIG)。“蓝牙网格配置文件”。版本1.0。https://www.bluetooth.com/

  3. 大都会,尼古拉斯,和S. Ulam。"蒙特卡罗方法"美国统计协会杂志44,不。247(1949年9月):335-41。https://doi.org/10.1080/01621459.1949.10483310

相关的话题