Bluetooth System-Level Simulation
Entry point for all Bluetooth system-level simulation. All Bluetooth simulations use sim = wirelessNetworkSimulator.init and follow the workflow defined in matlab-simulate-wireless-network (simulator init, traffic, mobility, instrumentation, addNodes, run).
When to Use
- BLE ACL point-to-point or star network connections
- LE Audio unicast with CIS/CIG (stereo speakers, hearing aids)
- BLE GAP connection establishment (advertising, scanning, connection timing)
- Classic BR/EDR piconets with ACL data or SCO voice
- BLE + BR/EDR coexistence with adaptive frequency hopping
- Any simulation using
bluetoothLENode, bluetoothNode
When Not to Use
- Non-Bluetooth wireless simulations (use
matlab-simulate-wireless-network instead)
- PHY-layer or link level Bluetooth waveform generation, receiver analysis or BER analysis
- Generic simulator setup, traffic models, or mobility (use
matlab-simulate-wireless-network)
Scenario → Reference Routing
| Scenario |
Reference |
| BLE realistic connection setup (advertising, scanning, GAP) |
references/ble-gap-connection.md |
| BLE point-to-point data, star network, ACL connections |
references/ble-connection.md |
| LE Audio unicast (stereo speakers, hearing aids, CIS/CIG) |
references/ble-cis.md |
| Classic Bluetooth earbuds, SCO voice, ACL data |
references/bluetooth-bredr.md |
| BLE + BR/EDR coexistence, adaptive frequency hopping |
references/bluetooth-coexistence.md |
| Capture and visualization (PCAP, IQ, event tracing, traffic viewer) |
See matlab-simulate-wireless-network skill |
Node Roles
- BLE (ACL, CIS):
bluetoothLENode("central"), bluetoothLENode("peripheral")
- BR/EDR:
bluetoothNode("central"), bluetoothNode("peripheral") — max 7 peripherals per central
Traffic Attachment Rules
addTrafficSource(sourceNode, traffic, ...):
- ACL/CIS/BR/EDR:
DestinationNode=peer required. CIS also needs CISConfig=cfgCISOut.
- BR/EDR SCO: No traffic call — implicit via
SCOPacketType in connection config.
kpi() Availability
| Topology |
"throughput" |
"latency" |
"PLR" / "PDR" |
Layer |
| BLE ACL |
LL only |
App only |
Both LL and App |
"LL" or "App" |
| BLE CIS |
LL only |
App only |
Both LL and App |
"LL" or "App" |
| BR/EDR |
Baseband |
— |
Baseband |
"Baseband" |
Connection/Configuration Setup
| Topology |
Config Object |
Function |
Notes |
| BLE ACL |
bluetoothLEConnectionConfig |
configureConnection(cfg, central, peripheral) |
Per-peripheral in loop; unique AccessAddress per connection |
| BLE CIS |
bluetoothLEConnectionConfig + bluetoothLECISConfig |
[~, cfgCISOut] = configureConnection(cfg, central, peripheral, CISConfig=cfgCIS) |
Pass cfgCISOut to addTrafficSource(..., CISConfig=cfgCISOut) |
| BR/EDR |
bluetoothConnectionConfig |
configureConnection(cfg, central, peripherals) |
Single call with vector of peripherals |
Common Mistakes
bluetoothNode for BLE (or vice versa): BR/EDR = bluetoothNode, BLE = bluetoothLENode
- Wrong kpi Layer: BLE throughput →
"LL", BLE latency → "App", BR/EDR → "Baseband" only
- Properties locked after
run(): Node/connection properties cannot change mid-sim. Use updateChannelList for mid-sim channel updates.
configureConnection with peripheral vector for BLE: Must call per-peripheral in loop (BR/EDR accepts vector)
- Unique
AccessAddress per connection: Each BLE connection on same central needs different AccessAddress
- DataRate in Kbps:
DataRate=100 means 100 Kbps, not 100 bps
GeneratePacket=true is not valid: Not applicable for network-level simulation. Use OnTime=Inf for continuous traffic.