exponenta event banner

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

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

Каналы BLE

Система BLE работает в диапазоне 2,4 ГГц ISM на частоте 2400 - 2483,5 МГц. Он использует сорок радиочастотных каналов (ширина каждого канала 2 МГц). На рисунке ниже показано отображение между частотами и каналами BLE. Каждому из этих RF-каналов назначается уникальный индекс канала (на рисунке обозначенный как «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, Part-B, Vol-6 из [1]) могут использоваться для выбора каналов данных для каждого события соединения:

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

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

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

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

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

Моделирование алгоритма №

1

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

Создать системный объект для алгоритма # 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

Моделирование алгоритма No2

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

Создать системный объект для алгоритма # 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

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

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

helperBLEChannelHopSelectionUI()

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

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

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

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

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

При использовании указанных выше входов алгоритм # 2 должен выбрать следующие каналы в соответствии с разделом 3.1, Part-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, Part-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

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

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

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

helperBLEPlotChannelHopSequence(csa, hopSequence);

Алгоритм № 1 в сравнении с алгоритмом № 2

Приведенные выше графики показывают разницу между этими двумя алгоритмами.

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

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

Заключение

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

Приложение

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

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

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

  • helperBLEChannelHopSeliceUI: Сценарий для фигуры helperBLEChannelHopSeliceUI

  • helperBLEPlotStartHopSequence: Постройте график последовательности скачкообразного изменения канала для данного алгоритма

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

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