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

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

Каналы BLE

Система BLE действует в 2.4 полосах GHz ISM на уровне 2400 - 2483.5 МГц. Это использует сорок каналов RF (каждый канал 2 МГц шириной). Рисунок ниже показывает отображение между каналами BLE и частотами. Каждый из этих, RF образовывает канал, выделяется уникальный индекс канала (помеченный как "Канал BLE" на рисунке).

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

Быстрое переключение каналов

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

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

В классическом Bluetooth быстрое переключение каналов ограничивается 1 600 транзитными участками/секунда частоты. Для 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);

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

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

  • 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);

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

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

  • 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 Спецификации [1] Ядра Bluetooth. По сравнению с Алгоритмом № 1 это является более комплексным и производит рандомизированную последовательность каналов.

Заключение

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

Приложение

Пример использует эту функцию:

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

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

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

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