Алгоритмы выбора канала BLE

В этом примере показано, как выбрать индекс канала с помощью алгоритмов выбора канала, заданных в спецификации ядра Bluetooth ® Low Energy (BLE) [1], с помощью библиотеки Communications Toolbox™ для протокола Bluetooth ®.

Каналы BLE

Система BLE работает в полосе ISM 2,4 ГГц на 2400 - 2483,5 МГц. Он использует сорок каналов RF (каждый канал имеет ширину 2 МГц). Рисунок ниже показывает отображение между частотами и каналами BLE. Каждому из этих радиочастотных каналов выделяется уникальный индекс канала (на рисунке обозначенный как «канал BLE»).

BLE классифицирует эти сорок каналов РФ по трем рекламным каналам (индексы каналов: 37, 38, 39) и тридцати семи каналам данных (индексы каналов: от 0 до 36). Обратите внимание, что рекламные каналы распределены по спектру 2,4 ГГц. Цель этого широкого интервала состоит в том, чтобы избежать помех от других устройств, работающих в том же спектре, таких как WLAN. Рекламные каналы в основном используются для передачи рекламных пакетов, пакетов запроса/ответа сканирования и пакетов индикации соединения. Каналы данных в основном используются для обмена пакетами данных.

Скачкообразное изменение канала

Скачкообразное изменение канала используется в Bluetooth, чтобы уменьшить помехи и улучшить пропускную способность. Стандарт Bluetooth определяет правила переключения между каналами и алгоритмы, используемые при выполнении скачкообразного изменения канала.

Использование нелицензированной полосы 2.4GHz ISM несколькими беспроводными технологиями вызывает повышенные помехи и приводит к повторным передачам, чтобы исправить ошибки в принятых пакетах. Поскольку BLE является протоколом с низкой энергией, он более восприимчив к интерференции. BLE использует скачкообразное изменение канала для борьбы с влиянием помех. Когда один канал полностью заблокирован из-за помех, устройства все еще могут продолжать общаться друг с другом по другим каналам.

В классическом Bluetooth скачкообразное изменение канала ограничено 1600 скачками частоты/сек. Для BLE спецификация скачкообразного изменения канала была пересмотрена. Для рекламы и подключенных устройств применяются различные правила, и заданы два алгоритма выбора канала.

Рекламное устройство передает рекламные пакеты по трем рекламным каналам циклически (начиная с индекса 37 канала). Ту же процедуру использует сканирующее/инициирующее устройство, циклически прослушивая три рекламных канала.

Подключенное устройство изменяется на новый канал данных для каждого события подключения. Событие соединения является последовательностью обмена пакетами данных между двумя подключенными устройствами. События соединения происходят периодически с интервалом, называемым интервалом соединения. Все пакеты в пределах события соединения передаются по одному и тому же каналу данных. Новое событие подключения использует новый канал данных.

Два альтернативных алгоритма выбора канала заданы спецификацией ядра Bluetooth (см. Раздел 4.5.8, Часть-B, Vol-6 из [1]), могут использоваться, чтобы выбрать каналы данных для каждого события соединения:

  1. Алгоритм # 1

  2. Алгоритм # 2

Два алгоритма выбора канала избегают каналов, которые подвержены ошибкам передачи. Карта канала обменивается между ведущим и ведомым устройствами. Эта карта указывает хорошие и плохие каналы данных. Классификация хороших и плохих каналов данных зависит от реализации и может быть выполнена на основе различных параметров, таких как ОСШ (отношение сигнал/шум), PER (частота ошибок пакета) и т.д. Для связи между устройствами используются только хорошие каналы данных. Карта канала будет обновлена ведущим устройством, если оно распознает какие-либо плохие каналы данных. Два алгоритма выбора канала используют карту канала, чтобы определить, является ли выбранный канал данных хорошим для использования. Если выбранный канал данных оказывается плохим, новый канал данных выбирается с помощью процедуры повторного преобразования канала (см. Раздел 4.5.8, Часть-B, Vol-6 из [1]), которая переключает плохой канал данных на один из хороших каналов данных. Каждый алгоритм имеет собственную процедуру переделывания.

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

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

Симулирующий алгоритм #

1

Можно использовать bleChannelSelection Системный объект для выбора нового индекса канала. Этот системный объект конфигурирует поля, необходимые для выбора индекса канала.

Создайте Системный объект для 'Алгоритма # 1'

Чтобы выбрать индекс канала, создайте bleChannelSelection Системный объект с Algorithm установите значение 1.

csa = bleChannelSelection('Algorithm', 1);

Сконфигурируйте поля.

  • The HopIncrement свойство определяет счетчик шага, который будет использоваться. Значение по умолчанию является 5. Это свойство применимо для 'Алгоритма # 1'.

  • The UsedChannels свойство задает список используемых (хороших) каналов данных.

csa.HopIncrement = 8;
csa.UsedChannels = [0, 5, 13, 9, 24, 36]
csa = 

  bleChannelSelection with properties:

       Algorithm: 1
    HopIncrement: 8
    UsedChannels: [0 5 9 13 24 36]
    ChannelIndex: 0
    EventCounter: 0

  • ChannelIndex является свойством только для чтения, которое указывает на текущий используемый канал.

  • EventCounter является свойством только для чтения, которое указывает на количество событий подключения, произошедших до сих пор. Он увеличивается для каждого нового выбранного канала.

Выберите индекс канала для следующего скачка

Вызовите объект csa как функцию для определения следующего скачка канала и выбора нового канала для каждого нового события соединения.

nextChannel = csa();
fprintf('Selected channel for connection event %d using ''Algorithm #1'' is: %d\n', csa.EventCounter, nextChannel);
Selected channel for connection event 0 using 'Algorithm #1' is: 9

Симулирующий алгоритм #

2

Можно использовать bleChannelSelection Системный объект для выбора нового индекса канала. Этот системный объект конфигурирует поля, необходимые для выбора индекса канала.

Создайте Системный объект для 'Алгоритма # 2'

Чтобы выбрать индекс канала, Создайте bleChannelSelection Системный объект с Algorithm установите значение 2.

csa = bleChannelSelection('Algorithm', 2);

Сконфигурируйте поля.

  • The AccessAddress свойство задает 32-разрядный уникальный адрес соединения между двумя устройствами. Значение по умолчанию является '8E89BED6'. Это свойство применимо для 'Алгоритма # 2'.

  • The UsedChannels свойство задает список используемых (хороших) каналов данных.

csa.AccessAddress = 'E89BED68';
csa.UsedChannels = [9, 10, 21, 22, 23, 33, 34, 35, 36]
csa = 

  bleChannelSelection with properties:

                   Algorithm: 2
               AccessAddress: 'E89BED68'
    SubeventChannelSelection: 0
                UsedChannels: [9 10 21 22 23 33 34 35 36]
                ChannelIndex: 0
                EventCounter: 0

Выберите индекс канала для следующего скачка

Вызовите объект csa как функцию для определения следующего скачка канала и выбора нового канала для каждого нового события соединения.

nextChannel = csa();
fprintf('Selected channel for connection event %d using ''Algorithm #2'' is: %d\n', csa.EventCounter, nextChannel);
Selected channel for connection event 0 using 'Algorithm #2' is: 22

Графический интерфейс пользователя для анализа алгоритмов выбора канала

Функция helperBLEChannelHopSelectionUI обеспечивает графический пользовательский интерфейс, чтобы сгенерировать желаемое количество скачков канала для анализа алгоритма. Оба алгоритма выбора канала могут быть проанализированы с помощью этого графический интерфейс пользователя. Он может использоваться, чтобы построить график скачкообразного изменения шаблона алгоритма, а также строит график соответствующей гистограммы.

helperBLEChannelHopSelectionUI()

Верификация алгоритма с выборочными данными

Выборочные данные проверки алгоритма # 2 (см. Раздел 3, Vol 6, часть C в [1]). Однако для проверки алгоритма # 1 нет доступных выборочных данных.

Выборочные данные 1 (тридцать семь хороших каналов данных)

  1. Адрес доступа = 8E89BED6

  2. Используемые каналы = [0:36]

Когда используются вышеуказанные входы, ожидается, что алгоритм # 2 выберет следующие каналы в соответствии с разделом 3.1, Часть-B, Vol-6 из [1]

$$ \begin{array}{|l|l|c|} \hline\vphantom{\displaystyle\int}
\mathbf{EventCounter}&\begin{array}{l}\mathbf{Channel}\end{array}\\
\hline\mathrm{1}&\begin{array}{l}\mathrm{20}\end{array}\\
\hline\mathrm{2}&\begin{array}{l}\mathrm{6}\end{array}\\
\hline\mathrm{3}&\begin{array}{l}\mathrm{21}\end{array}\\
\hline\end{array} $$

Следующий код выбирает три канала для первых трех событий соединения.

% Create a System object for 'Algorithm #2'
csa = bleChannelSelection('Algorithm', 2);

Сконфигурируйте поля с выборочными данными # 1.

% Connection access address
csa.AccessAddress = '8E89BED6';
% Use 37 good data channels as used channels according to the sample data
csa.UsedChannels = (0:36);

Выберите индексы канала для первых 3 событий соединения. Проверьте сгенерированные выходы в таблице, упомянутой выше.

numConnectionEvents = 4;
for i = 1:numConnectionEvents
    channel = csa();
    fprintf('Event Counter: %d, selected Channel: %d\n', csa.EventCounter, channel);
end
Event Counter: 0, selected Channel: 25
Event Counter: 1, selected Channel: 20
Event Counter: 2, selected Channel: 6
Event Counter: 3, selected Channel: 21

Выборочные данные 2 (девять хороших каналов данных)

  1. Адрес доступа = 8E89BED6

  2. Используемые каналы = [9, 10, 21, 22, 23, 33, 34, 35, 36]

Когда используются вышеуказанные входы, ожидается, что алгоритм # 2 выберет следующие каналы в соответствии с разделом 3.2, Часть-B, Vol-6 из [1]. Поскольку карта канала содержит плохие каналы, процедура повторного копирования канала, используемая в алгоритме, также проверяется.

$$ \begin{array}{|l|l|c|} \hline\vphantom{\displaystyle\int}
\mathbf{EventCounter}&\begin{array}{l}\mathbf{Channel}\end{array}\\
\hline\mathrm{6}&\begin{array}{l}\mathrm{23}\end{array}\\
\hline\mathrm{7}&\begin{array}{l}\mathrm{9}\end{array}\\
\hline\mathrm{8}&\begin{array}{l}\mathrm{34}\end{array}\\
\hline\end{array} $$

Следующий код выбирает восемь каналов для первых восьми событий соединения.

% Create a System object for 'Algorithm #2'
csa = bleChannelSelection('Algorithm', 2);

Сконфигурируйте поля с выборочными данными # 2.

% Connection access address
csa.AccessAddress = '8E89BED6';
% Use 9 good data channels as used channels according to the sample data
csa.UsedChannels = [9, 10, 21, 22, 23, 33, 34, 35, 36];

Выберите индексы канала для первых 8 событий соединения. Проверьте сгенерированные выходы в таблице, упомянутой выше.

numConnectionEvents = 9;
for i = 1:numConnectionEvents
    channel = csa();
    fprintf('Event Counter: %d, selected Channel: %d\n', csa.EventCounter, channel);
end
Event Counter: 0, selected Channel: 35
Event Counter: 1, selected Channel: 9
Event Counter: 2, selected Channel: 33
Event Counter: 3, selected Channel: 21
Event Counter: 4, selected Channel: 34
Event Counter: 5, selected Channel: 36
Event Counter: 6, selected Channel: 23
Event Counter: 7, selected Channel: 9
Event Counter: 8, selected Channel: 34

Постройте и проанализируйте шаблон скачкообразного изменения - алгоритм # 1 и алгоритм #

2

Следующий код выбирает индексы канала для первых сотен событий соединения, используя 'Алгоритм # 1'. Выбранные каналы строятся и сравниваются с каналами 'Алгоритма # 2'.

% Channel selection algorithm System object for 'Algorithm #1'
csa = bleChannelSelection;
% For 100 connection events
numConnectionEvents = 100;
hopSequence = zeros(1, numConnectionEvents);
% Generate channel hop sequence for 100 connection events
for i = 1:numConnectionEvents
    hopSequence(i) = csa();
end

helperBLEPlotChannelHopSequence графиков функций шаблон скачкообразного изменения, а также выводит гистограмму выбранных каналов.

helperBLEPlotChannelHopSequence(csa, hopSequence);

Следующий код генерирует индексы канала для первых сотен событий соединения с помощью 'Алгоритма # 2'. Выбранные каналы строятся и сравниваются с каналами 'Алгоритма # 1'.

% Channel selection algorithm System object for 'Algorithm #2'
csa = bleChannelSelection('Algorithm', 2);
% For 100 connection events
numConnectionEvents = 100;
hopSequence = zeros(1, numConnectionEvents);
% Generate channel hop sequence for 100 connection events
for i = 1:numConnectionEvents
    hopSequence(i) = csa();
end

helperBLEPlotChannelHopSequence графиков функций шаблон скачкообразного изменения, а также выводит гистограмму выбранных каналов.

helperBLEPlotChannelHopSequence(csa, hopSequence);

Алгоритм # 1 по сравнению с алгоритмом # 2

Вышеописанные графики показывают различие между двумя алгоритмами.

  • Алгоритм # 1 является простым инкрементальным алгоритмом, который производит равномерную последовательность каналов. В процессе выбора нового канала не участвует рандомизация.

  • Алгоритм # 2 был представлен в версии 5.0 спецификации Bluetooth Core [1]. По сравнению с Алгоритмом # 1, это более комплексно и создает рандомизированную последовательность каналов.

Заключение

Этот пример продемонстрировал поведение алгоритмов выбора канала, заданных в спецификации ядра Bluetooth [1].

Приложение

В примере используется эта функция:

  • bleChannelSelection: Создайте Системный объект, используемый для выбора нового канала данных для передачи пакета данных

В примере используются следующие помощники:

Избранная библиография

  1. Веб-сайт Bluetooth ® Technology. Bluetooth Technology Website | Официальный сайт Bluetooth Technology. Доступ к 8 июля 2020 года. https://www.bluetooth.com/.