主要内容

无线传感器网络中的蓝牙Mesh泛洪

这个例子展示了托管泛洪技术如何通过使用蓝牙®工具箱实现蓝牙®网状网络中的通信。使用这个例子,你可以:

  • 创建并配置一个蓝牙网状网络。

  • 可视化和分析托管泛洪技术如何使源节点和目标节点之间通信,即使在禁用一些中间中继节点之后。

  • 可视化从源节点到目标节点的消息流。

  • 分析性能指标,如网络包交付比(PDR)、端到端延迟、吞吐量和其他与节点相关的指标。

您还可以通过蒙特卡洛模拟识别蓝牙网状网络中源和目的地之间的关键中继节点。

蓝牙网栈

蓝牙核心规范[2]包括用于无线个人区域网络(WPAN)的低能耗版本,称为蓝牙低能耗(LE)或蓝牙智能。蓝牙LE被添加到产生少量数据的低能耗设备的标准中,如用于家庭自动化、医疗保健、健身和物联网(IoT)等应用的通知警报。有关蓝牙LE协议栈的更多信息,请参见蓝牙协议栈

蓝牙网格配置文件[3.定义了实现蓝牙LE网状网络解决方案的基本要求。蓝牙网状网络可以在智能照明、工业自动化、传感器网络和资产跟踪等应用中实现大规模设备网络。

该图显示了广告承载上的蓝牙网格堆栈。

有关蓝牙网格配置文件的更多信息,请参见蓝牙网状网络

蓝牙Mesh网络泛洪场景

本示例使用广告承载来演示有管理的泛洪。本示例使您能够创建和配置两个蓝牙网状网络场景。每个场景都是一个多节点网状网络。每种场景将网格节点分为节点、中继节点、源节点和目的节点。

  • 节点:网状网络中的任何设备

  • 中继节点:支持并启用中继特性的节点

  • 源节点:报文产生和传输的节点

  • 目的节点:源节点的报文到达的节点

第一种网状网络场景由21个网状节点组成,包括中继节点、源节点和目的节点。在第二个场景中,示例如下:

  • 关闭部分节点的中继功能

  • 从网状网络中移除一个节点

对于这两种场景,您都可以可视化网络中的消息流并检索这些统计信息。

  • 网络PDR:在网状网络中,所有目的节点接收到的数据包数量与所有源节点发送的数据包数量之比

  • 应用程序端到端数据包延迟(以秒为单位)

  • 链路层(LL)吞吐量(Kbps)

  • 收听状态、传输状态、空闲状态和休眠状态所花费的时间,以秒为单位

  • 应用层、网络层、传输层、链路层和物理层的报文统计

配置仿真参数

将随机数生成器的种子设置为1。种子值控制随机数生成的模式。对于高保真度的模拟结果,更改每次运行的种子值,并在多个模拟中对结果取平均值。

rng (1,“旋风”);

为两个场景指定模拟时间。

simulationTime = 0.3;%在几秒钟内

要在网状网络可视化中突出显示消息传输,请将此标志设置为真正的

highlightTransmissions =真正的

网状网络中的节点数。

numNodes = 21;

从MAT文件中获取节点位置。指定蓝牙网格节点的位置为numNodes2数组,numNodes是网络中的节点数。每一行指定一个节点的笛卡尔坐标,从第一个节点开始。

负载(“bleMeshNetworkNodePositions.mat”);如果numNodes ~= size(blemeshnetworkknodepositions,1) error("无效的蓝牙网格节点位置值。在MAT文件中指定' blemeshnetworkknodepositions '值作为...+ num2str (numNodes) +“2数组”。);结束

模拟网状网络场景一

第一个网状网络场景由21个网状节点组成。将部分节点设置为中继节点和源-目的节点对。如果需要指定多个源目标对,请执行更新sourceDestinationPairs通过添加指定源节点和目标节点的新行。

relayNodes = [3 6 7 8 9 12 13 14 15 17];sourceDestinationPairs = [1 10];

方法初始化无线网络模拟器wirelessNetworkSimulator的对象函数wirelessNetworkSimulator对象。

networkSimulator = wirelessNetworkSimulator.init ();

创建和配置蓝牙网格节点

初始化数组来存储蓝牙网格节点。

nodesScenarioOne = bluetoothLENode.empty (0, numNodes);

为场景一创建蓝牙网状网络。使用bluetoothMeshProfileConfig创建网格配置文件配置对象。要创建蓝牙网格节点,请使用bluetoothLENode对象。将角色指定为"broadcaster-observer”并指定网格配置文件MeshConfig

nodeIndex = 1: numNodes通过指定元素创建和配置蓝牙网格配置文件。%地址(网络中的每个节点都是唯一的)。集网络消息%重复为2,网络传输间隔为中的随机值%范围[10,30]毫秒。meshCfg = bluetoothMeshProfileConfig (ElementAddress = dec2hex (nodeIndex, 4),...NetworkTransmissions = 2, NetworkTransmitInterval =兰迪(3 [1])* 10 e - 3);%启用已配置中继节点的中继特性。集传递消息%重复到3,中继重传间隔为随机值%范围[10,30]毫秒。如果任何meshCfg (nodeIndex = = relayNodes)。继电器= true;meshCfg。RelayRetransmissions = 3;meshCfg。RelayRetransmitInterval = randi([1 3])*10e-3;结束通过分配网格配置文件创建和配置蓝牙网格节点。设置接收范围、广告间隔(秒)和扫描间隔(秒)。nodesScenarioOne (nodeIndex) = bluetoothLENode (“broadcaster-observer”MeshConfig = meshCfg,...位置= [bleMeshNetworkNodePositions (nodeIndex:) 0], Name =“节点”+ num2str (nodeIndex),...AdvertisingInterval ReceiverRange = 25日= 20 e - 3, ScanInterval = 30 e - 3);结束

向源节点添加应用流量

创建一个networkTrafficOnOff对象来生成一个On-Off应用程序流量模式。通过配置应用数据速率、报文大小、开启和关闭状态持续时间,配置应用流量模式。使用addTrafficSource对象函数在指定的源-目标节点对之间附加应用程序流量源。

srcIdx = 1:元素个数(sourceDestinationPairs) / 2设置数据速率、包大小、开机时间和关机时间%的模拟时间。流量= networkTrafficOnOff (DataRate = 1, PacketSize = 15, GeneratePacket = true,...定时= simulationTime * 0.3,停止时间= simulationTime * 0.7);通过设置控制报文的最大跳数生存时间(TTL)值ttl = 10;将应用程序流量附加到源addTrafficSource (nodesScenarioOne (sourceDestinationPairs (srcIdx 1)),交通,...%交通对象SourceAddress = nodesScenarioOne (sourceDestinationPairs (srcIdx 1) .MeshConfig.ElementAddress,...源元素地址DestinationAddress = nodesScenarioOne (sourceDestinationPairs (srcIdx 2) .MeshConfig.ElementAddress,...%目标元素地址TTL = TTL);结束

可视化网状网络

来可视化网状网络场景helperBLEMeshVisualizeNetworkhelper对象。

plotScenarioOne = helperBLEMeshVisualizeNetwork (NumberOfNodes = numNodes,...NodePositionType =“UserInput”位置= bleMeshNetworkNodePositions,...SimulationTime = SimulationTime ReceiverRange = 25日,...SourceDestinationPairs = SourceDestinationPairs,...Title =“场景一:蓝牙Mesh flood”);

对象指定helper对象NetworkPlot参数helperBLEMeshEventCallbackhelper对象。

eventsScenarioOne = helperBLEMeshEventCallback (nodesScenarioOne plotScenarioOne,...HighlightTransmissions = HighlightTransmissions);

运行仿真

向无线网络模拟器添加节点。

addnode (networkSimulator nodesScenarioOne);

在指定的模拟时间内运行网络模拟。

运行(networkSimulator simulationTime);
未添加自定义通道模型。采用自由空间路径损耗(fspl)模型作为默认信道模型。

模拟网状网络场景二

第二个网状网络场景由21个网状节点组成。在这个场景中,Node7、Node12上的中继特性被禁用,Node15被从网络中移除。

relayNodes = [3 6 8 9 13 14 17];failedNodes = 15;

方法为场景二创建、配置和模拟网状网络helperBLEMeshSimulateScenarioTwohelper对象。

[nodesScenarioTwo, eventsScenarioTwo] = helperBLEMeshSimulateScenarioTwo (bleMeshNetworkNodePositions,...simulationTime、highlightTransmissions sourceDestinationPairs, ttl、relayNodes failedNodes);
未添加自定义通道模型。采用自由空间路径损耗(fspl)模型作为默认信道模型。

仿真结果

使用统计数据对象函数获取两种场景下网格节点的统计信息。

场景一中模拟网格节点的统计信息列表(结构数组)nodeIndex = 1:numel(nodeesscenarioone) statisticsscenario oone (nodeIndex) = statistics(nodeesscenarioone (nodeIndex));% #好< * SAGROW >结束%场景二模拟网格节点的统计信息列表(结构数组)nodeIndex = 1:numel(nodeesscenariotwo) statisticsScenarioTwo(nodeIndex) = statistics(nodeesscenariotwo (nodeIndex));结束

计算两种场景的PDR和路径。

[pdrScenarioOne, pathScenarioOne] = meshResults (eventsScenarioOne statisticsScenarioOne)

图场景一:蓝牙Mesh flood包含一个axes对象。场景一:Bluetooth Mesh flood包含4个类型为graphplot、line的对象。这些对象表示场景一:蓝牙Mesh flood, \color[rgb]{0 0.5 1}节点,\color[rgb]{1 0.4980 0.4980}中继节点,\color[rgb]{0 0.5 0}源-目的对(1,10)。

pdrScenarioOne = 1
pathScenarioOne =1×4表源目的地路径NumberOfHops  ______ ___________ ________________ ____________ 1 10 {[1 6 7 8 9 10]} 5
[pdrScenarioTwo, pathScenarioTwo] = meshResults (eventsScenarioTwo statisticsScenarioTwo)

图场景二:蓝牙Mesh flood包含一个axes对象。场景二:Bluetooth Mesh flood包含5个类型为graphplot, line的对象。这些对象代表场景二:蓝牙Mesh flood, \color[rgb]{0 0.5 1} Node, \color[rgb]{1 0.4980 0.4980} Relay Node, \color[rgb]{0.6, 0.6} Failed Node, \color[rgb]{0 0.5 0} Source-Destination pair(1,10)。

pdrScenarioTwo = 1
pathScenarioTwo =1×4表源目的地路径NumberOfHops  ______ ___________ ____________________ ____________ 1 10 {[1 6 13 14 8 9 10]} 6

计算结果表明,即使网络中随机出现节点故障,源节点与目标节点之间仍然存在路径。

进一步的探索

为了获得多次模拟的平均数值结果,该示例实现了蒙特卡罗方法[4].要实现蒙特卡洛模拟,请使用helperBLEMeshMonteCarloSimulationshelper函数。在每次模拟运行期间,执行这些步骤。

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

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

  3. 存储PDR值

蒙特卡罗模拟输出确保消息从源到目的地传递所需的关键中继节点。该示例通过使用这些配置参数执行蒙特卡洛模拟。

%中继节点relayNodes = [3 6 7 8 9 12 13 14 15 17];源和目标对sourceDestinationPairs = [1 10];来自源的消息的% TTL值ttl = 10;

要查看模拟结果,请参见bleMeshMonteCarloResults垫文件。

负载(“bleMeshMonteCarloResults.mat”);disp (“进一步探索:节点[”+ num2str (criticalRelaysInfo{1:5, 1}”)+...是Node1和Node10之间通信的前5个关键中继。”);
进一步探索:节点[9 6 7 8 14]是Node1和Node10之间进行通信的前5个关键中继。

附录

这个例子使用了这些帮助器:

选定的参考书目

  1. 蓝牙技术的网站。“蓝牙技术网站|蓝牙技术官方网站。”2022年5月24日访问。https://www.bluetooth.com

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

  3. 蓝牙特殊兴趣小组(SIG)。“蓝牙网形象。”版本1.0.1https://www.bluetooth.com/。

  4. 大都会,尼古拉斯,S.乌兰。“蒙特卡洛法。”美国统计协会杂志44岁的没有。247(1949年9月):335-41。https://doi.org/10.1080/01621459.1949.10483310

另请参阅

功能

对象

相关的话题

Baidu
map