В этом примере показано, как захватывать и декодировать сигналы Bluetooth ® BR/EDR с помощью библиотеки Communications Toolbox™ Library для протокола Bluetooth. Можно захватить формы сигнала Bluetooth BR/EDR с помощью радио ADALM-PLUTO или загрузить выборки IQ, соответствующие формам сигнала Bluetooth BR/EDR, из файла основной полосы частот (* .bb). Для генерации и передачи сигналов Bluetooth BR/EDR см. раздел Генерация и передача сигналов Bluetooth BR/EDR с использованием SDR и настройте тестовую среду следующим образом:
Две платформы SDR подключены к одному и тому же хост-компьютеру и запускают две сессии MATLAB ® на одном хост-компьютере.
Две платформы SDR подключаются к двум хост-компьютерам и запускают по одному сеансу MATLAB на каждом хост-компьютере.
Чтобы настроить хост-компьютер для работы с пакетом поддержки ADALM-PLUTO Radio, обратитесь к разделу Настройка аппаратного обеспечения Guided Host-Radio (пакет поддержки Communications Toolbox для аналоговых устройств ADALM-Pluto Radio).
Для захвата сигналов в режиме реального времени требуется радио ADALM-PLUTO и соответствующая надстройка пакета поддержки:
Полный список панелей инструментов связи, поддерживаемых платформами SDR, см. в разделе Поддерживаемые аппаратные средства на странице обнаружения программно определяемого радио (SDR).
Bluetooth - технология беспроводной персональной вычислительной сети (WPAN) малой дальности, работающая в глобальном нелицензионном промышленном, научном и медицинском (ISM) диапазоне частот от 2,4 ГГц до 2,485 ГГц. В технологии Bluetooth данные делятся на пакеты, и каждый пакет передается по одному из 79 назначенных каналов Bluetooth. Каждый канал имеет полосу пропускания 1 МГц. Поскольку существуют различные типы беспроводных сетей, работающих в одной и той же нелицензионной полосе частот, две разные сети могут создавать помехи друг другу. Для уменьшения помех Bluetooth реализует схему расширения спектра со скачкообразной перестройкой частоты (FHSS) для переключения несущей между несколькими частотными каналами посредством использования псевдослучайной последовательности, известной как передатчику, так и приемнику.
Стандарт Bluetooth определяет следующие режимы физического уровня (PHY):
Базовая скорость (BR) - обязательный режим, использует модуляцию GFSK со скоростью передачи данных 1 Мбит/с
Расширенная скорость передачи данных (EDR) - дополнительный режим, использует модуляцию фазовой манипуляции (PSK) с двумя вариантами:
EDR2M: Использует pi/4-DQPSK со скоростью передачи данных 2 Мбит/с
EDR3M: Использует 8-DPSK со скоростью передачи данных 3 Мбит/с
Форматы пакетов радиоинтерфейса для режимов PHY включают следующие поля:
Код доступа: каждый пакет начинается с кода доступа. Если следует заголовок пакета, код доступа имеет длину 72 бита. В противном случае длина кода доступа составляет 68 бит и называется сокращенным кодом доступа. Код доступа состоит из следующих полей:
Преамбула: преамбула представляет собой фиксированный узор ноль-один из четырех символов.
Sync Word: Слово синхронизации - это 64-битное кодовое слово, полученное из 24-битной нижней адресной части (LAP) адреса устройства Bluetooth.
Трейлер: Трейлер представляет собой фиксированный образец «ноль один» из четырех символов.
Формат кода доступа

Заголовок пакета: Заголовок включает в себя информацию управления каналом связи и состоит из следующих полей:
LT_ADDR: 3-разрядный логический транспортный адрес
TYPE: 4-битный код типа, который определяет тип пакета, используемый для передачи. Ценность этой области может быть ID, ПУСТЫМ УКАЗАТЕЛЕМ, ОПРОСОМ, FHS, HV1, HV2, HV3, DV, EV3, EV4, EV5, 2-EV3, 2-EV5, 3-EV3, 3-EV5, 1 немецкая марка, DH1, 3 немецких марки, DH3, 5 немецких марок, DH5, AUX1, 2-DH1, 2-DH3, 2-DH5, 3-DH1, 3-DH3 и 3-DH5. Это поле определяет количество слотов, занимаемых текущим пакетом.
FLOW: 1-битовое управление потоком для асинхронного логического (ACL) транспорта, ориентированного на соединение
ARQN: индикация 1-битового подтверждения
SEQN: 1-битовый порядковый номер
HEC: 8-битовая проверка ошибок заголовка
Формат заголовка

Полезный груз: Полезный груз включает дополнительный заголовок полезного груза, тело полезного груза и дополнительный CRC.
Формат полезной нагрузки

Защита: Для пакетов EDR время защиты позволяет радио Bluetooth BR/EDR подготовиться к изменению модуляции с GFSK на DPSK. Время защиты должно составлять от 4,75 до 5,25 микросекунд.
Sync: Для пакетов EDR последовательность синхронизации содержит один опорный символ и десять символов DPSK.
Трейлер: Для пакетов EDR все биты трейлера должны быть нулевым шаблоном из двух символов, {00,00} для pi/4-DQPSK и {000000} для 8DPSK.
Формат пакета для режима BR показан на этом рисунке.
Формат пакета базовой скорости

Формат пакета для режима EDR показан на этом рисунке.
Расширенный формат пакетов скорости передачи данных

Проверьте, установлена ли библиотека Communications Toolbox для пакета поддержки протокола Bluetooth.
commSupportPackageCheck('BLUETOOTH');В этом примере показано, как декодировать сигналы BR/EDR Bluetooth, захваченные с помощью ADALM-PLUTO или считывая IQ-выборки из файла основной полосы частот.
Приемник Bluetooth BR/EDR

Общая структура примера приемника Bluetooth:
Инициализируйте параметры приемника.
Укажите источник сигнала.
Захват сигналов Bluetooth BR/EDR.
Обработка сигналов Bluetooth BR/EDR в приемнике.
Для настройки параметров Bluetooth BR/EDR используйте bluetoothPhyConfig объект.
cfg = bluetoothPhyConfig; cfg.Mode ='BR'; % Mode of transmission as one of BR, EDR2M and EDR3M cfg.WhitenInitialization = [0;0;0;0;0;1;1]; % Whiten initialization
Укажите источник сигнала как файл или ADALM-PLUTO.
Файл: Использует comm.BasebandFileReader для чтения файла, который содержит ранее захваченный эфирный сигнал.
ADALM-PLUTO: используетsdrrx (Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio) Системный объект для приема живого сигнала от аппаратных средств SDR.
Если в качестве источника сигнала назначен ADALM-PLUTO, в примере выполняется поиск радиоблока ADALM-PLUTO по адресу радиосвязи «usb: 0» и используется в качестве источника сигнала.
% The default signal source is 'File' signalSource ='File'; bbSymbolRate = 1e6; % 1 MSps if strcmp(signalSource,'File') switch cfg.Mode case 'BR' bbFileName = 'bluetoothCapturesBR.bb'; case 'EDR2M' bbFileName = 'bluetoothCapturesEDR2M.bb'; case 'EDR3M' bbFileName = 'bluetoothCapturesEDR3M.bb'; end sigSrc = comm.BasebandFileReader(bbFileName); sigSrcInfo = info(sigSrc); bbSampleRate = sigSrc.SampleRate; sigSrc.SamplesPerFrame = sigSrcInfo.NumSamplesInData; cfg.SamplesPerSymbol = bbSampleRate/bbSymbolRate; else % Check if the pluto Hardware Support Package (HSP) is installed if isempty(which('plutoradio.internal.getRootDir')) error(message('comm_demos:common:NoSupportPackage', ... 'Communications Toolbox Support Package for ADALM-PLUTO Radio',... ['<a href="https://www.mathworks.com/hardware-support/' ... 'adalm-pluto-radio.html">ADALM-PLUTO Radio Support From Communications Toolbox</a>'])); end connectedRadios = findPlutoRadio; % Discover ADALM-PLUTO radio(s) connected to your computer radioID = connectedRadios(1).RadioID; rxCenterFrequency =
2445000000; % In Hz, choose between 2.402e9 to 2.480e9 with 1e6 spacing bbSampleRate = bbSymbolRate * cfg.SamplesPerSymbol; sigSrc = sdrrx('Pluto',... 'RadioID', radioID,... 'CenterFrequency', rxCenterFrequency,... 'BasebandSampleRate', bbSampleRate,... 'SamplesPerFrame', 1e7,... 'GainSource', 'Manual',... 'Gain', 25,... 'OutputDataType', 'double'); end
Захват IQ-выборок, соответствующих сигналам Bluetooth BR/EDR, с помощью ADALM-PLUTO или файла основной полосы частот в качестве источника сигнала. Визуализировать спектр принятых сигналов Bluetooth с помощью анализатора спектра.
% The transmitted waveforms are captured as a burst dataCaptures = sigSrc(); % Setup spectrum viewer spectrumScope = dsp.SpectrumAnalyzer( ... 'SampleRate', bbSampleRate,... 'SpectrumType', 'Power density', ... 'SpectralAverages', 10, ... 'YLimits', [-130 -30], ... 'Title', 'Received Baseband Bluetooth Signal Spectrum', ... 'YLabel', 'Power spectral density'); % Show power spectral density of the received waveform spectrumScope(dataCaptures);

Для декодирования заголовка пакета, информации заголовка полезной нагрузки и битов необработанного сообщения приемник обрабатывает выборки основной полосы частот, принятые от источника сигнала. На этом рисунке показана обработка в приемнике.
Практический приемник Bluetooth
Практический приемник Bluetooth выполняет следующие функции:
Удаление смещения постоянного тока
Обнаружение всплесков сигнала
Выполнить согласованную фильтрацию
Оценка и исправление смещения времени
Оценка и корректировка смещения несущей частоты
Демодуляция сигнала BR/EDR
Выполнение декодирования с прямым исправлением ошибок (FEC)
Выполнить дедупликацию данных
Проверка ошибок заголовка (HEC) и проверка циклическим избыточным кодом (CRC)
Вывод декодированных битов и статистики декодированных пакетов на основе декодированной части нижнего адреса (LAP), HEC и CRC
% Bluetooth practical receiver [decBits,decodedInfo,pktStatus] = helperBluetoothPracticalReceiver(dataCaptures,cfg); % Get the number of detected packets pktCount = length(pktStatus); disp(['Number of Bluetooth packets detected: ' num2str(pktCount)])
Number of Bluetooth packets detected: 2
% Get the decoded packet statistics displayFlag =true; % set true, to display the decoded packet statistics if(displayFlag && (pktCount~=0)) decodedInfoPrint = decodedInfo; for ii = 1:pktCount if(pktStatus(ii)) decodedInfoPrint(ii).PacketStatus = 'Success'; else decodedInfoPrint(ii).PacketStatus = 'Fail'; end end packetInfo = struct2table(decodedInfoPrint,'AsArray',1); fprintf('Decoded Bluetooth packet(s) information: \n \n') disp(packetInfo); end
Decoded Bluetooth packet(s) information:
LAP PacketType LogicalTransportAddress HeaderControlBits PayloadLength LLID FlowIndicator PacketStatus
_____________ __________ _______________________ _________________ _____________ ____________ _____________ ____________
{24x1 double} {'FHS'} {3x1 double} {3x1 double} 18 {2x1 double} 0 {'Success'}
{24x1 double} {'FHS'} {3x1 double} {3x1 double} 18 {2x1 double} 0 {'Success'}
% Get the packet error rate performance metrics if(pktCount) pktErrCount = sum(~pktStatus); pktErrRate = pktErrCount/pktCount; disp(['Simulated Mode: ' cfg.Mode ', '... 'Packet error rate: ',num2str(pktErrRate)]) end
Simulated Mode: BR, Packet error rate: 0
% Release the signal source
release(sigSrc);Этот пример позволяет декодировать сигналы Bluetooth BR/EDR, полученные с помощью ADALM-PLUTO, или считывая IQ-выборки из файла основной полосы частот. Визуализировать спектр принятых сигналов Bluetooth с помощью анализатора спектра. Частота ошибок пакета вычисляется на основе декодированной информации пакета.
Этот пример можно использовать для приема пакетов EDR путем изменения режима передачи PHY. Для получения формы сигнала Bluetooth в этом примере см. раздел Генерация и передача формы сигнала Bluetooth BR/EDR с использованием SDR.
Общие советы по устранению неполадок оборудования SDR и пакет поддержки Communications Toolbox для ADALM-PLUTO Radio можно найти в документе Общие проблемы и исправления (пакет поддержки Communications Toolbox для аналоговых устройств ADALM-Pluto Radio).
В этом примере используется эта вспомогательная функция:
helperBluetoothReceiver.m: Практический приемник для физического уровня Bluetooth
Группа специальных интересов Bluetooth (SIG). «Основной системный пакет [том контроллера BR/EDR]». Спецификация ядра Bluetooth. Версия 5.1, том 2 < https ://www.bluetooth.com/>