В этом примере показано, как библиотека Communications Toolbox™ Library для протокола Bluetooth ® может использоваться для генерации сигналов для различных режимов физического уровня (PHY) низкой энергии Bluetooth (BLE) [1].
Bluetooth special interest group (SIG) представила BLE для маломощной связи малого радиуса действия. Устройства BLE работают в глобальном нелицензионном промышленном, научном и медицинском (ISM) диапазоне частот от 2,4 ГГц до 2,485 ГГц. BLE задает интервал между каналами 2 МГц, что приводит к 40 радиочастотным каналам, как показано на рисунке ниже. Стандарт BLE [1] определяет канальный уровень, который включает в себя уровни PHY и MAC. BLE находит приложения для передачи таких файлов, как изображения и MP3, между мобильными телефонами, домашней автоматикой и тенденцией Интернета вещей.

Стандарт Bluetooth [1] определяет следующие режимы физического уровня:
LE1M - Некодированный PHY со скоростью передачи данных 1 Мбит/с
LE2M - Некодированный PHY со скоростью передачи данных 2 Мбит/с
LE500K - Кодированный PHY со скоростью передачи данных 500 кбит/с
LE125K - Кодированный PHY со скоростью передачи данных 125 кбит/с
Форматы пакетов радиоинтерфейса для этих режимов включают в себя следующие поля:
Преамбула: преамбула зависит от того, какой режим PHY используется. LE1M режиме используется 8-битовая последовательность альтернативных нулей и единиц, '01010101'. LE2M использует 16-битную последовательность альтернативных нулей и единиц, '0101...'. LE500K и способы LE125K используют 80 последовательностей битов нолей и, полученных, повторяясь '00111100' десять раз.
Адрес доступа: Указывает адрес соединения, совместно используемый двумя устройствами BLE с использованием 32-разрядной последовательности.
Индикатор кодирования: 2-разрядная последовательность, используемая для дифференциации двух кодированных режимов (LE125K, LE500K).
Полезная нагрузка: входные биты сообщения, включая PDU и CRC. Максимальный размер сообщения - 2080 бит.
Поля окончания: два 3-разрядных вектора нулей, используемых в кодировке с прямым исправлением ошибок. Поля окончания присутствуют только для кодированных режимов (LE500K и LE125K).
Формат пакетов для некодированных режимов PHY (LE1M и LE2M) показан на рисунке ниже:

Формат пакетов для кодированных режимов PHY (LE500K и LE125K) показан на рисунке ниже:

В этом примере показано, как генерировать сигналы BLE для всех режимов физического уровня в соответствии со спецификацией Bluetooth [1]. Сгенерированные формы сигналов BLE визуализируются как во временной, так и в частотной области с использованием диапазона времени и анализатора спектра соответственно.
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed or not. commSupportPackageCheck('BLUETOOTH');
% Specify the input parameters for generating BLE waveform numPackets = 10; % Number of packets to generate sps = 16; % Samples per symbol messageLen = 2000; % Length of message in bits phyMode = 'LE1M'; % Select one mode from the set {'LE1M','LE2M','LE500K','LE125K'}; channelBW = 2e6; % Channel spacing (Hz) as per standard % Define symbol rate based on the PHY mode if any(strcmp(phyMode,{'LE1M','LE500K','LE125K'})) symbolRate = 1e6; else symbolRate = 2e6; end
% Create a spectrum analyzer object specAn = dsp.SpectrumAnalyzer('SpectrumType','Power density'); specAn.SampleRate = symbolRate*sps; % Create a time scope object timeScope = timescope('SampleRate', symbolRate*sps,'TimeSpanSource','Auto',... 'ShowLegend',true);
% Loop over the number of packets, generating a BLE waveform and plotting % the waveform spectrum rng default; for packetIdx = 1:numPackets message = randi([0 1],messageLen,1); % Message bits generation chanIndex = randi([0 39],1,1); % Channel index decimal value if(chanIndex >=37) % Default access address for periodic advertising channels accessAdd = [0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 ... 1 0 0 0 1 0 1 1 1 0 0 0 1]'; else % Random access address for data channels % Ideally, this access address value should meet the requirements % specified in Section 2.1.2 of volume 6 of the Bluetooth Core % Specification. accessAdd = [0 0 0 0 0 0 0 1 0 0 1 0 0 ... 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1]'; end waveform = bleWaveformGenerator(message,... 'Mode',phyMode,... 'SamplesPerSymbol',sps,... 'ChannelIndex',chanIndex,... 'AccessAddress',accessAdd); specAn.FrequencyOffset = channelBW*chanIndex; specAn.Title = ['Spectrum of ',phyMode,' Waveform for Channel Index = ', num2str(chanIndex)]; tic while toc < 0.5 % To hold the spectrum for 0.5 seconds specAn(waveform); end % Plot the generated waveform timeScope.Title = ['BLE ',phyMode,' Waveform for Channel Index = ', num2str(chanIndex)]; timeScope(waveform); end % Release objects release(specAn); release(timeScope);


В этом примере используется следующая функция:
bleWaveformGenerator: Формирование сигнала физического уровня BLE
Том 6 спецификации ядра Bluetooth, версия 5.0 Пакет основной системы [Low Energy Controller Volume].