addMobility
Download Required: To use addMobility
,
first download the Communications Toolbox Wireless Network Simulation Library add-on. For more
information, see Get and Manage Add-Ons.
Description
addMobility(
adds a
random waypoint mobility model to Bluetooth® low energy (LE) nodes, blenode
)blenode
. In the random waypoint
model, a wireless node pauses for some duration at a location before moving towards its next
random destination (waypoint) with a random speed. The node repeats this process at each
waypoint.
addMobility(
sets the random waypoint mobility configuration parameters using one or more optional
name-value arguments. For example, blenode
,Name=Value
)PauseDuration=0.02
sets the pause
duration of a Bluetooth LE node to 0.02 seconds. If you add random waypoint mobility models
to multiple wireless nodes in a single addMobility
function call, all
the nodes use the mobility parameter values specified by the name-value arguments.
Examples
Create, Configure, and Simulate Bluetooth LE Network With Custom Channel
This example shows you how to simulate a Bluetooth® low energy (LE) network with a custom channel by using Bluetooth® Toolbox and Communications Toolbox™ Wireless Network Simulation Library.
Using this example, you can:
Create and configure a Bluetooth LE piconet with Central and Peripheral nodes.
Create and configure a link layer (LL) connection between Central and Peripheral nodes.
Add application traffic from the Central to Peripheral nodes.
Create a custom channel, and plug it into the wireless network simulator.
Simulate Bluetooth LE network and retrieve the statistics of the Central and Peripheral nodes.
Check if the Communications Toolbox Wireless Network Simulation Library support package is installed. If the support package is not installed, MATLAB® returns an error with a link to download and install the support package.
wirelessnetworkSupportPackageCheck
Create a wireless network simulator.
networkSimulator = wirelessNetworkSimulator.init;
Create a Bluetooth LE node, specifying the role as "central"
. Specify the name and position of the node.
centralNode = bluetoothLENode("central"); centralNode.Name = "CentralNode"; centralNode.Position = [0 0 0]; % In x-, y-, and z-coordinates in meters
Create a Bluetooth LE node, specifying the role as "peripheral"
. Specify the name and position of the node.
peripheralNode = bluetoothLENode("peripheral"); peripheralNode.Name = "PeripheralNode"; peripheralNode.Position = [10 0 0] % In x-, y-, and z-coordinates in meters
peripheralNode = bluetoothLENode with properties: TransmitterPower: 20 TransmitterGain: 0 ReceiverRange: 100 ReceiverGain: 0 ReceiverSensitivity: -100 NoiseFigure: 0 InterferenceModeling: "overlapping-adjacent-channel" InterferenceFidelity: 0 Name: "PeripheralNode" Position: [10 0 0] Read-only properties: Role: "peripheral" ConnectionConfig: [1x1 bluetoothLEConnectionConfig] CISConfig: [1x1 bluetoothLECISConfig] TransmitBuffer: [1x1 struct] ID: 2
Add a random waypoint mobility model to the Bluetooth peripheral node. Set the shape of the node's mobility area to "circle"
.
addMobility(peripheralNode,BoundaryShape="circle");
Create a default Bluetooth LE configuration object to share the LL connection between the Central and Peripheral nodes.
cfgConnection = bluetoothLEConnectionConfig;
Specify the connection interval and connection offset. Throughout the simulation, the object establishes LL connection events for the duration of each connection interval. The connection offset is from the beginning of the connection interval.
cfgConnection.ConnectionInterval = 0.01; % In seconds cfgConnection.ConnectionOffset = 0; % In seconds
Specify the active communication period after the connection event is established between the Central and Peripheral nodes.
cfgConnection.ActivePeriod = 0.01 % In seconds
cfgConnection = bluetoothLEConnectionConfig with properties: ConnectionInterval: 0.0100 AccessAddress: "5DA44270" UsedChannels: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36] Algorithm: 1 HopIncrement: 5 CRCInitialization: "012345" SupervisionTimeout: 1 PHYMode: "LE1M" InstantOffset: 6 ConnectionOffset: 0 ActivePeriod: 0.0100
Configure the connection between Central and Peripheral nodes by using the configureConnection
object function of the bluetoothLEConnectionConfig
object.
configureConnection(cfgConnection,centralNode,peripheralNode);
Create a networkTrafficOnOff
object to generate an On-Off application traffic pattern. Specify the data rate in kb/s and the packet size in bytes. Enable packet generation to generate an application packet with a payload.
traffic = networkTrafficOnOff(DataRate=100, ... PacketSize=10, ... GeneratePacket=true);
Add application traffic from the Central to the Peripheral node by using the addTrafficSource
object function.
addTrafficSource(centralNode,traffic,"DestinationNode",peripheralNode.Name);
Create a Bluetooth LE network consisting of a Central and a Peripheral node.
nodes = {centralNode peripheralNode};
Add the Central and Peripheral nodes to the wireless network simulator.
addNodes(networkSimulator,nodes)
Add the custom channel to the wireless network simulator.
addChannelModel(networkSimulator,@addImpairment);
Set the simulation time in seconds and run the simulation.
simulationTime = 0.5; run(networkSimulator,simulationTime)
Retrieve application, link layer (LL), and physical layer (PHY) statistics corresponding to the Central and Peripheral nodes. For more information about the statistics, see Bluetooth LE Node Statistics.
centralStats = statistics(centralNode)
centralStats = struct with fields:
Name: "CentralNode"
ID: 1
App: [1x1 struct]
LL: [1x1 struct]
PHY: [1x1 struct]
peripheralStats = statistics(peripheralNode)
peripheralStats = struct with fields:
Name: "PeripheralNode"
ID: 2
App: [1x1 struct]
LL: [1x1 struct]
PHY: [1x1 struct]
Follow these steps to create a custom channel that models Bluetooth path loss for an industrial scenario.
Create a custom function with this syntax:
rxData = customFcnName(rxInfo,txData)
. TherxInfo
input specifies the receiver node information as a structure, and thetxData
input specifies the transmitted packets as a structure. The simulator automatically passes information about the receiver node and the packets transmitted by a transmitter node as inputs to the custom function. For more information about creating custom channel, see theaddChannelModel
object function.Use the
bluetoothPathLossConfig
object to set path loss configuration parameters for an industrial scenario.Calculate path loss between the Central and Peripheral nodes using the
bluetoothPathLoss
function. Specify the transmitter and receiver positions.Apply path loss to the transmitted packets.
function rxData = addImpairment(rxInfo,txData) pathlossCfg = bluetoothPathLossConfig(Environment="Industrial"); % Apply path loss and update output signal rxData = txData; % Calculate the distance between transmitter and receiver in meters distance = norm(rxData.TransmitterPosition - rxInfo.Position); pathloss = bluetoothPathLoss(distance,pathlossCfg); rxData.Power = rxData.Power-pathloss; % In dBm scale = 10.^(-pathloss/20); [numSamples,~] = size(rxData.Data); rxData.Data(1:numSamples,:) = rxData.Data(1:numSamples,:)*scale; end
Input Arguments
blenode
— Bluetooth LE node
bluetoothLENode
object | vector of bluetoothLENode
objects
Bluetooth LE node, specified as a bluetoothLENode
object or a vector of bluetoothLENode
objects.
Name-Value Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.
Example: addMobility(blenode,PauseDuration=0.02)
sets the pause
duration for a Bluetooth LE node, after it reaches a target waypoint, to 0.02
seconds.
SpeedRange
— Speed range
[0.415 1.66]
(default) | two-element numeric vector
Speed range, specified as a two-element numeric vector. The function sets the speed of the Bluetooth LE node according to a continuous uniform distribution based on this range. The first element of the vector specifies the minimum speed of the node, while the second specifies the maximum speed, in meters per second.
Data Types: double
PauseDuration
— Pause duration of Bluetooth LE node
0
(default) | nonnegative scalar
Pause duration of the Bluetooth LE node after reaching a target waypoint, specified as a nonnegative scalar. Units are in seconds.
Data Types: double
BoundaryShape
— Shape of node mobility area
"rectangle"
(default) |
"circle"
Shape of the node mobility area, specified as "rectangle"
or
"circle"
.
Data Types: char
| string
Bounds
— Center coordinates and dimensions of mobility area
three-element numeric vector | four-element numeric vector
Center coordinates and dimensions of the mobility area, specified as a
three-element or four-element numeric vector, depending on the value of the
BoundaryShape
argument.
"rectangle"
— Specify a four-element numeric vector of the form [xcenter ycenter length width]. The default value is [xcurrent ycurrent10
10
], where the first two elements specify the xy-coordinates of current node position."circle"
— Specify a three-element numeric vector of the form [xcenter ycenter radious]. The default value is [xcurrent ycurrent10
], where the first two elements specify the xy-coordinates of current node position.
Data Types: double
Version History
Introduced in R2023b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)