Статистическое моделирование интерференции WLAN в сети BLE

В этом примере показано, как симулировать статистическое моделирование интерференции WLAN на Bluetooth® низкая энергетическая сеть (BLE), пользующаяся Библиотекой Communications Toolbox™ для Протокола Bluetooth. Механизмы сосуществования используются, чтобы минимизировать интерференцию WLAN в сети BLE. В этом примере вероятность столкновения каждой сети WLAN используется, чтобы повредить сигналы BLE. Результаты симуляции, сгенерированные в этом примере, приходят к заключению, что для высокой вероятности столкновения канала WLAN, достигнутый показатель успешности соответствующего канала BLE является низким.

Механизм сосуществования BLE-WLAN

Как существуют различные типы беспроводных сетей, действующих в том же нелицензированном диапазоне частот, для двух различных сетей возможно вмешаться друг в друга. Эта интерференция может вызвать отказы передачи в обоих сети. Нет никакого стандартизированного алгоритма, чтобы достигнуть сосуществования двух различных беспроводных сетей. Однако стандарт IEEE® 802.15.2™ [1] задает некоторые методические рекомендации, чтобы достигнуть сосуществования беспроводных персональных сетей области (WPAN) с другими беспроводными устройствами, действующими в нелицензированных диапазонах частот.

Этот пример иллюстрирует статистическое моделирование интерференции WLAN в сети BLE. Коммуникация WLAN требует минимума пропускной способности на 20 МГц, в то время как устройства BLE требуют пропускной способности на только 2 МГц. WLAN использует названное обнаружение несущей механизма доступа к каналу, к которому несколько получают доступ с предотвращением столкновения (CSMA/CA), в то время как устройства BLE используют скачкообразное движение частоты. Интерференция происходит, когда рабочая частота BLE и устройств WLAN перекрывается. Чтобы минимизировать интерференцию, механизмы сосуществования используются.

Механизмы сосуществования широко классифицируются в эти две категории [1]:

  • Совместный: Этот механизм требует линии связи между сетями BLE и WLAN. Поскольку эти две сети могут связаться друг с другом, одна из этих сетей приостанавливает свою передачу, в то время как другой использует канал. Этот механизм используется, когда WLAN и устройства BLE встраиваются в то же физическое устройство.

  • Несовместный: Этот механизм не требует никакой линии связи между сетями BLE и WLAN. Поскольку эти две сети не могут связаться друг с другом, они используют свои собственные методы, чтобы обнаружить интерференцию другой сети. Этот механизм используется, когда WLAN и устройства BLE не встраиваются в то же физическое устройство.

Этот пример иллюстрирует несовместный механизм сосуществования для устройств BLE с WLAN.

Сосуществование BLE с WLAN - описание модели

Этот раздел разрабатывает передачу данных в BLE, интерференции WLAN и алгоритме сосуществования, используемом в предотвращении интерференции в этот пример.

Коммуникация в BLE: BLE задает две главных роли на Слое Ссылки, а именно, Ведущее устройство и Ведомое устройство. Ведущее устройство инициирует передачу данных, и Ведомое устройство отвечает Ведущему устройству. В этом примере пакетный обмен BLE моделируется между одним Ведущим устройством и несколькими (конфигурируемый до 5) Ведомые устройства. В BLE [2] передача данных происходит только во время событий связи. Событие связи является повторением (равномерно названный интервалом связи) последовательность пакетного обмена данных между Ведущим устройством и Ведомым устройством. Все пакеты в событии связи передаются на том же канале данных. В начале каждого события связи Ведущее устройство инициирует связь с соответствующим Ведомым устройством. После этого Ведомое устройство отвечает Ведущему устройству с пакетом данных. Если нет никаких данных, чтобы отправить, Ведомое устройство отвечает пустым пакетом. В этом примере только одна транзакция моделируется событие для каждого подключения. Новое событие связи использует новый канал данных. Новый канал выбран на основе адаптивного быстрого переключения каналов. Карта канала, указывающая на хорошие или плохие каналы, используется при выборе нового канала, таким образом показе адаптивности в быстром переключении каналов.

Трафик WLAN: трафик WLAN динамически добавлен к или удален из, модель согласно заданным временам начала и конца. Каждая сеть WLAN сконфигурирована с отдельной вероятностью столкновения. Для каждой передачи сгенерировано случайное число между 0 и 1. Если сгенерированное случайное число меньше вероятности столкновения, то кадр передачи повреждается.

Сосуществование BLE с WLAN: Если на выбранный канал BLE значительно повлияет интерференция WLAN на основе вероятности столкновения, то переданный пакет BLE подвергнется повреждению. Ведущее устройство периодически классифицирует Ведомые каналы как 'хорошие каналы' или 'плохие каналы', на основе пакетных отказов в том канале. Информация о классификации каналов хранится в форме названной карты канала битового массива. Битовый массив является массивом 1's и определение 0 классификация канала (или 'хороший' или 'плохой'). Функция classifyChannels классифицирует каналы BLE и хранит сгенерированный битовый массив. Ведущее устройство обеспечивает различную карту канала для каждого Ведомого устройства. Обновленная карта канала отправляется в Ведомое устройство. Периодичность классификации каналов сконфигурирована путем установки свойства ClassificationInterval в объекте helperBLEChannelClassification. Устройства BLE в состоянии ожидания, вычислите напряженное время канала для всех 'плохих каналов' путем выполнения энергетического обнаружения (ED). Если текущее количество хороших каналов меньше предпочтительного количества хороших каналов, плохие каналы классифицируются снова. Эта классификация основана на напряженном времени канала когда BadChannelClassificationMethod свойство установлено в 'Используя энергетические признаки'. Если BadChannelClassificationMethod свойство собирается 'Сбросить все плохие каналы', все плохие каналы сбрасываются к хорошим каналам.

Проверяйте на установку пакета поддержки

Проверяйте, установлена ли 'Библиотека Communications Toolbox для пакета поддержки' Протокола Bluetooth или нет.

commSupportPackageCheck('BLUETOOTH');

Параметры конфигурации BLE

Этот раздел добавляет Ведущее устройство BLE и конкретное количество Ведомых устройств к сети BLE. Поскольку Ведущее устройство ответственно за обновление карты канала для каждого Ведомого устройства в сети BLE, параметры классификации каналов сконфигурированы в Ведущем устройстве с помощью helperBLEChannelClassification. Объект helperBLEDeviceModel используется, чтобы смоделировать сосуществование BLE с WLAN.

% The number of BLE Slaves in connection with the Master
slavesCount = 1;

% Create the BLE Master device capable of connecting with "slavesCount"
% number of Slaves
master = helperBLEDeviceModel('Role','Master', ...
                              'SlavesCount',slavesCount);

% Initialize the channel classification parameters to classify the BLE
% channels into good or bad channels.
% PERThreshold:                 Packet error rate (PER) threshold value
% ClassificationInterval:       Periodicity of channel classification
% RxStatusCount:                Maximum number of received packets status
% MinRxCountToClassify:         Minimum number of received packets status
% BadChannelClassificationMethod: Method for bad channels classification
% PreferredMinimumGoodChannels: Preferred number of good channels
channelClassification = helperBLEChannelClassification(...
                        'PERThreshold',60, ...
                        'ClassificationInterval',150, ...
                        'RxStatusCount',50, ...
                        'MinRxCountToClassify',4, ...
                        'BadChannelClassificationMethod','Using energy detections', ...
                        'PreferredMinimumGoodChannels',20);

% Assign channel classification parameters to the Master device
master.ChannelClassification = channelClassification;

% Initialize "slavesCount" number of Slaves
slaves(1, slavesCount) = helperBLEDeviceModel;

% Create "slavesCount" number of Slave devices
for idx = 1:slavesCount
    slaves(idx) = helperBLEDeviceModel('Role','Slave');
end

% Create "slavesCount" connections between the "Master" and "Slaves". This
% function creates a Link Layer connection by sharing the common connection
% parameters such as connection interval, access address for each
% Master-Slave connection pair.
[master, slaves] = helperBLECreateLLConnection(master, slaves);

Трафик WLAN модели

Этот раздел моделирует трафик WLAN с помощью заданной настройки.

Параметры конфигурации

Параметры конфигурации для каждой сети WLAN включают вероятность столкновения, интерференционное время начала и интерференционное время окончания в заданном канале WLAN. Объект helperBLEWLANStatisticalTrafficConfig используется, чтобы смоделировать трафик WLAN.

% Set number of WLAN networks interfering with the BLE network
wlanNetworksCount = 6;

% Set of WLAN channels (in the range [1, 14]) used by each WLAN network
wlanChannels = [1, 5, 6, 12, 9, 8];
% Probability of collisions of each WLAN network with BLE network
collisionProbabilities = [0.35, 0.48, 0.26, 0.60, 0.28, 0.34];
% Start and end times (in milliseconds) of transmission in each WLAN
% network
wlanInterferencePeriod = [0, inf; ...
    0, inf; ...
    0, 2100; ...
    0, inf; ...
    200, 2800; ...
    150, inf];

Трафик WLAN модели

Этот раздел конфигурирует интерференцию к каждому Ведомому устройству путем добавления трафика WLAN с заданной настройкой. Сеть WLAN добавляется всего, задал каналы WLAN с помощью wlanTraffic функцию.

% Create a configuration object for WLAN traffic
wlanTrafficConfig = helperBLEWLANStatisticalTrafficConfig();

% Configure WLAN traffic with the specified WLAN network parameters
wlanTraffic(wlanTrafficConfig, wlanNetworksCount, wlanChannels, ...
    collisionProbabilities, wlanInterferencePeriod);

Симуляция сосуществования

Этот раздел иллюстрирует связь между Ведущими и Ведомыми устройствами, в то время как WLAN вмешивается статистически.

Инициализируйте параметры симуляции

Параметры симуляции, требуемые для статистического моделирования интерференции WLAN в сети BLE, инициализируются в этом коде.

% Initialize simulation parameters

% Reset the random number generator seed
sprev = rng('default');

% To enable the visualization of BLE coexistence with WLAN, set the
% "enableVisualization" to true. To disable the visualization of BLE
% coexistence with WLAN set the "enableVisualization" to false.
enableVisualization = true;

% To enable the visualization of channel hopping sequence, set the
% "enableHoppingVisualization" to true. To disable the visualization of
% channel hopping sequence, set the "enableHoppingVisualization" to false.
% If the "enableVisualization" is set to false, then
% "enableHoppingVisualization" is not considered.
enableHoppingVisualization = true;

% Total simulation time in milliseconds
simulationTime = 4000;

% One step time is considered as 0.025 milliseconds. All the timing
% parameters (connection interval, scan interval, advertising interval,
% etc.) in BLE specification are multiple of 0.625 milliseconds. The
% maximum packet size used in this example is 33 octets (264 bits). The
% packet transmission time in different PHY modes are: 0.264 milliseconds
% (in LE1M), 0.132 milliseconds (in LE2M), 0.528 milliseconds (in LE500K)
% and 1.056 milliseconds (in LE125K). Therefore, the step time is
% considered as 0.025 milliseconds (0.625 is multiple of 0.025) to achieve
% a trade-off between the simulation time and accuracy.
timeStep = 0.025;

% Create structure for an empty packet to initialize the output of Master
% and Slaves
% LLPDU:        Generated Link Layer Protocol Data Unit (PDU) appended with
%               Cyclic Redundancy Check (CRC)
% RateIndex:    String representing the rate at which the packet will be
%               transmitted. It contains one of 'LE2M' | 'LE1M' | 'LE500K'
%               | 'LE125K'
% AccessAddress:Unique address for each Master-Slave connection pair
% ChannelIndex: Channel on which the packet is transmitted
emptyPacket = struct('LLPDU',[], ...
                     'AccessAddress','', ...
                     'RateIndex','', ...
                     'ChannelIndex',-1);

% Initialize the Slave output
slaveOutput = emptyPacket;

% Preallocate the buffers to store the Slave outputs
slaveOutputs = cell(1, slavesCount);

Симуляция

Этот раздел симулирует обмен пакетами между Ведущие и Ведомые устройства BLE для заданного количества времени.

  • Ведущее устройство (Передача или Прием): В каждом событии связи Ведущее устройство BLE инициирует связь с соответствующим Ведомым устройством путем передачи пакета Слоя Ссылки на канале данных. Сгенерированный пакет BLE повреждается на основе вероятности столкновения WLAN соответствующего канала. После передачи Ведущее устройство ожидает ответа от Ведомого устройства.

  • Ведомое устройство (Передача или Прием): В каждом событии связи Ведомое устройство BLE получает вмешавшийся пакет от Ведущего устройства на канале данных. После этого Ведомое устройство отвечает Ведущему устройству на том же канале данных путем передачи пакета Слоя Ссылки. Сгенерированный пакет BLE повреждается на основе вероятности столкновения WLAN соответствующего канала.

Функция запуска helperBLEDeviceModel используется в связи между Ведущими и Ведомыми устройствами BLE. Функция getInterferenceLevel проверяет, вмешивается ли канал BLE значительно трафиком WLAN. helperBLEVisualizeCoexistence визуализирует симуляцию сосуществования BLE с трафиком WLAN.

% Initialize figures for visualization of coexistence model for each Slave.
% This visualization shows the WLAN channels along with their collision
% probabilities and also shows the channel hopping for the communication
% between BLE Master and Slave devices. It also shows the status (good or
% bad) of each BLE channel along with the success rate in the respective
% channel.
coexistenceModel = ...
    helperBLEVisualizeCoexistence(...
    'Action','Initialize', ...
    'SlaveCount',slavesCount, ...
    'WLANChannelList',wlanChannels, ...
    'PERThreshold',master.ChannelClassification.PERThreshold, ...
    'ClassificationInterval',master.ChannelClassification.ClassificationInterval, ...
    'ChannelBusyCountThreshold',master.ChannelClassification.ChannelBusyCountThreshold, ...
    'PreferredMinimumGoodChannels',master.ChannelClassification.PreferredMinimumGoodChannels, ...
    'ConnectionInterval',master.LLConnectionConfigs(1).ConnectionInterval, ...
    'Stoptime',simulationTime, ...
    'EnableVisualization',enableVisualization, ...
    'EnableHoppingVisualization',enableHoppingVisualization);
coexistenceModel.initializeVisualization();
viewModel(coexistenceModel);
master.CoexistenceVisualization = coexistenceModel;

% Run simulation
for simulationTimer = 0:timeStep:simulationTime
    % Stop the simulation, if all the Slaves are disconnected from the
    % Master due to interference. Master and Slave are disconnected when
    % the PER of the BLE channels in which they are communicating with each
    % other is high.
    if numel(master.ActiveConnectionIdxs(master.ActiveConnectionIdxs ~= -1)) == 0
        fprintf('Simulation terminated as all Slaves are disconnected from the Master device.\n')
        break;
    end

    % Update WLAN traffic in visualization
    helperBLEUpdateWLANTraffic(slavesCount, wlanChannels, wlanTrafficConfig, ...
        simulationTimer, master);

    % MASTER: Transmitting or Receiving mode
    if (master.ActiveChannel == slaveOutput.ChannelIndex) && ...
            strcmpi(master.ActiveAccessAddress, slaveOutput.AccessAddress)
        masterOutput = run(master, slaveOutput);
    else
        masterOutput = run(master, emptyPacket);
    end

    if ~(isempty(masterOutput.LLPDU))
        interferenceEffect = getInterferenceLevel(wlanTrafficConfig, ...
            masterOutput.ChannelIndex, simulationTimer);
        % Corrupt the packet, if the interference effect is 1
        if (interferenceEffect == 1)
            masterOutput.LLPDU(1:2) = ~masterOutput.LLPDU(1:2);
        % Drop the packet, if the interference effect is 2 (interference is
        % too high)
        elseif (interferenceEffect == 2)
            masterOutput = emptyPacket;
        end
    end

    % Update current simulation time
    coexistenceModel.CurrentTime = simulationTimer;
    coexistenceModel.Action = 'Simulation Progress';

    % SLAVE: Transmitting or Receiving mode
    for idx = 1:slavesCount
        % Pass the "MasterOutput" to the Slave listening in the same
        % frequency and matched access address
        if (slaves(idx).ActiveChannel == masterOutput.ChannelIndex) && ...
                strcmpi(slaves(idx).ActiveAccessAddress, masterOutput.AccessAddress)
            slaveOutputs{idx} = run(slaves(idx), masterOutput);
        % Pass an empty packet to all other Slaves to update the timers
        else
            slaveOutputs{idx} = run(slaves(idx), emptyPacket);
        end

        % Update simulation progress for each Slave
        coexistenceModel.SlaveNumber = idx;
        viewModel(coexistenceModel)
    end

    slaveOutput = emptyPacket;

    % Get the active Slave output (At any time instance only one Slave is
    % active)
    for idx = 1:slavesCount
        if ~isempty(slaveOutputs{idx}.LLPDU)
            slaveOutput = slaveOutputs{idx};
            break;
        end
    end

    if ~(isempty(slaveOutput.LLPDU))
        interferenceEffect = getInterferenceLevel(wlanTrafficConfig, ...
            slaveOutput.ChannelIndex, simulationTimer);
         % Corrupt the packet, if the interference effect is 1
        if (interferenceEffect == 1)
            slaveOutput.LLPDU(1:2) = ~slaveOutput.LLPDU(1:2);
        % Drop the packet, if the interference effect is 2 (interference is
        % too high)
        elseif (interferenceEffect == 2)
            slaveOutput = emptyPacket;
        end
    end
end

% Update the simulation progress for each Slave
for idx = 1:slavesCount
    master.CoexistenceVisualization.SlaveNumber = idx;
    master.CoexistenceVisualization.Action = 'Simulation Progress';
    viewModel(master.CoexistenceVisualization)
end

% Log the statistics of this example to
% |bleCoexistenceWithStatisticalWLANStatistics.mat| file
helperBLELogCoexistenceStats(master, slaves, ...
    'bleCoexistenceWithStatisticalWLANStatistics.mat');

% Restore the previous setting of random number generation
rng(sprev);

Результаты симуляции

Симуляция этого примера генерирует:

  1. График во время выполнения для каждой пары связи "Главный-подчиненный" изображение состояния (хороший или плохой) и совокупные, недавние показатели успешности каждого канала отображен

  2. Получен файл MAT bleCoexistenceWithStatisticalWLANStatistics.mat с подробной статистикой, такой как количество полученных пакетов, количество пакетов, поврежденных на каждом канале и состоянии (хороший или плохой) канала для каждого интервала классификации

Этот пример позволяет вам анализировать сосуществование BLE со статистической интерференцией WLAN. Вероятность столкновения каждой сети WLAN используется, чтобы повредить пакеты BLE. Ведущие и Ведомые устройства BLE используют хорошие каналы, чтобы связаться друг с другом, чтобы избежать пакетной потери. Показатель успешности вычисляется в каждом канале BLE. Этот пример приходит к заключению, что для высокой вероятности столкновения канала WLAN, достигнутый показатель успешности соответствующего канала BLE является низким. Поэтому эти каналы не используются в связи между Ведущими и Ведомыми устройствами BLE.

Приложение

Функции, использованные в этом примере:

Помощники, используемые в этом примере:

Выбранная библиография

  1. IEEE® Standard 802.15.2™. "Сосуществование Беспроводных Персональных Сетей области с Другими Беспроводными устройствами, Действующими в Нелицензированных Диапазонах частот". Методические рекомендации IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретные требования; Общество эпохи компьютеризации IEEE

  2. Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.0. https://www.bluetooth.com /

Для просмотра документации необходимо авторизоваться на сайте