Этот пример показывает, как реализовать Bluetooth® Low Energy (BLE) получатель, пользующийся Библиотекой Communications Toolbox™ для Протокола Bluetooth. Можно или использовать полученные сигналы или получить сигналы в режиме реального времени с помощью Радио ADALM-PLUTO. Подходящий сигнал для приема может быть сгенерирован путем симуляции сопутствующего примера, Bluetooth передатчика с низким энергопотреблением, с любой из следующей настройки: (i) Две платформы SDR, соединенные с тем же хостом - компьютером, который запускает два сеанса работы с MATLAB (ii) Две платформы SDR, соединенные с двумя компьютерами, которые запускают отдельные сеансы работы с MATLAB.
Отошлите к Ведомой Радио-Хостом Настройке оборудования (Пакет Поддержки Communications Toolbox для Аналоговых устройств Радио ADALM-Pluto) документацию для получения дополнительной информации о том, как сконфигурировать ваш хост - компьютер, чтобы работать с Пакетом Поддержки для Радио ADALM-PLUTO.
Чтобы запустить этот пример с помощью полученных сигналов, вам нужно следующее программное обеспечение:
Библиотека Communications Toolbox для протокола Bluetooth
Чтобы получить сигналы в режиме реального времени, вам также нужны радио ADALM-PLUTO и соответствующее Дополнение пакета поддержки:
Для полного списка Communications Toolbox поддерживаемые платформы SDR обратитесь к разделу Supported Hardware страницы открытия Программно определяемого радио (SDR).
Специальная группа (SIG) Bluetooth ввела BLE для коммуникаций малой дальности малой мощности. Стандарт Bluetooth [1] задает слой Link, который включает оба слоя PHY и MAC. Приложения BLE включают файл изображения и передачи видеофайла между мобильными телефонами, размещают автоматизацию и Интернет вещей (IoT).
Спецификации BLE:
Частотный диапазон передачи: 2.4-2.4835 ГГц
Каналы РФ: 40
Уровень символа: 1 Msym/s, 2 Msym/s
Модуляция: Гауссово минимальное манипулирование сдвига (GMSK)
Режимы передачи PHY: (i) LE1M - Незакодированный PHY со скоростью передачи данных 1 Мбит/с (ii) LE2M - Незакодированный PHY со скоростью передачи данных 2 Мбит/с (iii) LE500K - Закодированный PHY со скоростью передачи данных 500 Кбит/с (iv) LE125K - Закодированный PHY со скоростью передачи данных 125 Кбит/с
Стандарт Bluetooth [1] задает воздушные форматы пакета интерфейса для всех четырех режимов передачи PHY BLE использование следующих полей:
Преамбула: преамбула зависит от режима передачи PHY. Режим LE1M использует 8-битную последовательность альтернативных нулей и единиц, '01010101'. LE2M использует 16-битную последовательность альтернативных нулей и единиц, '0101...'. Режимы LE500K и LE125K используют 80-битную последовательность нулей и единиц, полученных путем повторения '00111100' десять раз.
Указатель: Задает адрес связи, совместно использованный двумя устройствами BLE с помощью 32-битной последовательности.
Кодирование Индикатора: 2-битная последовательность, используемая для дифференциации закодированных режимов (LE125K и LE500K).
Полезная нагрузка: биты Входного сигнала и включая модуль данных о протоколе (PDU) и включая контроль циклическим избыточным кодом (CRC). Максимальный размер сообщения составляет 2 080 битов.
Поля завершения: Два 3-битных вектора нулей, используемых в прямом кодировании исправления ошибок. Поля завершения присутствуют для закодированных режимов (LE500K и LE125K) только.
Формат пакета для незакодированного PHY (LE1M и LE2M) режимы показывают в фигуре ниже:
Формат пакета для закодированного PHY (LE500K и LE125K) режимы показывают в фигуре ниже:
Общая структура примера получателя BLE описана можно следующим образом:
Инициализируйте параметры получателя
Источник сигнала
Получите пакеты BLE
Обработка получателя
Инициализируйте параметры получателя
helperBLEReceiverConfig.m скрипт инициализирует параметры получателя. Можно изменить параметр phyMode
, чтобы декодировать полученную форму волны BLE на основе режима передачи PHY. phyMode
может быть один от набора: {'LE1M', 'LE2M', 'LE500K', 'LE125K'}.
phyMode = 'LE1M';
bleParam = helperBLEReceiverConfig(phyMode);
Источник сигнала
Задайте источник сигнала как 'Файл' или 'ADALM-PLUTO'.
File:Uses comm.BasebandFileReader
, чтобы считать файл, который содержит ранее полученный беспроводной сигнал.
ADALM-PLUTO: Использует Системный объект sdrrx
, чтобы получить живой сигнал от оборудования SDR.
Если вы присваиваете ADALM-PLUTO как источник сигнала, пример ищет ваш компьютер радио ADALM-PLUTO в радиообращении 'usb:0' и использует его в качестве источника сигнала.
signalSource = 'File'; % The default signal source is 'File'
if strcmp(signalSource,'File') switch bleParam.Mode case 'LE1M' bbFileName = 'bleCapturesLE1M.bb'; case 'LE2M' bbFileName = 'bleCapturesLE2M.bb'; case 'LE500K' bbFileName = 'bleCapturesLE500K.bb'; case 'LE125K' bbFileName = 'bleCapturesLE125K.bb'; otherwise error('Invalid PHY transmission mode. Valid entries are LE1M, LE2M, LE500K and LE125K.'); end sigSrc = comm.BasebandFileReader(bbFileName); bbSampleRate = sigSrc.SampleRate; sigSrc.SamplesPerFrame = 1e7; bleParam.SamplesPerSymbol = bbSampleRate/bleParam.SymbolRate; elseif strcmp(signalSource,'ADALM-PLUTO') bbSampleRate = bleParam.SymbolRate * bleParam.SamplesPerSymbol; sigSrc = sdrrx('Pluto',... 'RadioID', 'usb:0',... 'CenterFrequency', 2.402e9,... 'BasebandSampleRate', bbSampleRate,... 'SamplesPerFrame', 1e7,... 'GainSource', 'Manual',... 'Gain', 25,... 'OutputDataType', 'double'); else error('Invalid signal source. Valid entries are File and ADALM-PLUTO.'); end % Setup spectrum viewer spectrumScope = dsp.SpectrumAnalyzer( ... 'SampleRate', bbSampleRate,... 'SpectrumType', 'Power density', ... 'SpectralAverages', 10, ... 'YLimits', [-130 -30], ... 'Title', 'Received Baseband BLE Signal Spectrum', ... 'YLabel', 'Power spectral density');
Получите пакеты BLE
% The transmitted waveform is captured as a burst dataCaptures = sigSrc(); % Show power spectral density of the received waveform spectrumScope(dataCaptures);
Обработка получателя
Основополосные выборки, полученные от источника сигнала, обрабатываются, чтобы декодировать информацию о заголовке PDU и необработанные биты сообщения. Следующая схема показывает обработку получателя.
Выполните автоматическое управление усилением (AGC)
Удалите смещение DC
Оцените и исправьте для смещения несущей частоты
Выполните согласованную фильтрацию с гауссовым импульсом
Синхронизация синхронизации
Демодуляция GMSK
Декодирование FEC и шаблон demapping для ФИЗИКИ LECoded (LE500K и LE125K)
Данные dewhitening
Выполните проверку CRC на декодируемом PDU
Вычислите пакетный коэффициент ошибок (PER)
% Initialize System objects for receiver processing agc = comm.AGC('MaxPowerGain',20,'DesiredOutputPower',2); freqCompensator = comm.CoarseFrequencyCompensator('Modulation', 'OQPSK',... 'SampleRate',bbSampleRate,... 'SamplesPerSymbol',2*bleParam.SamplesPerSymbol,... 'FrequencyResolution',100); prbDet = comm.PreambleDetector(bleParam.RefSeq,'Detections','First'); % Initialize counter variables pktCnt = 0; crcCnt = 0; displayFlag = false; % true if the received data is to be printed % Loop to decode the captured BLE samples while length(dataCaptures) > bleParam.MinimumPacketLen % Consider two frames from the captured signal for each iteration startIndex = 1; endIndex = min(length(dataCaptures),2*bleParam.FrameLength); rcvSig = dataCaptures(startIndex:endIndex); rcvAGC = agc(rcvSig); % Perform AGC rcvDCFree = rcvAGC - mean(rcvAGC); % Remove the DC offset rcvFreqComp = freqCompensator(rcvDCFree); % Estimate and compensate for the carrier frequency offset rcvFilt = conv(rcvFreqComp,bleParam.h,'same'); % Perform gaussian matched filtering % Perform frame timing synchronization [~, dtMt] = prbDet(rcvFilt); release(prbDet) prbDet.Threshold = max(dtMt); prbIdx = prbDet(rcvFilt); % Extract message information [cfgLLAdv,pktCnt,crcCnt,remStartIdx] = helperBLEPhyBitRecover(rcvFilt,... prbIdx,pktCnt,crcCnt,bleParam); % Remaining signal in the burst captures dataCaptures = dataCaptures(1+remStartIdx:end); % Display the decoded information if displayFlag && ~isempty(cfgLLAdv) fprintf('Advertising PDU Type: %s\n', cfgLLAdv.PDUType); fprintf('Advertising Address: %s\n', cfgLLAdv.AdvertiserAddress); end % Release System objects release(freqCompensator) release(prbDet) end % Release the signal source release(sigSrc) % Determine the PER if pktCnt per = 1-(crcCnt/pktCnt); fprintf('Packet error rate for %s mode is %f.\n',bleParam.Mode,per); else fprintf('\n No BLE packets were detected.\n') end
Packet error rate for LE1M mode is 0.071429.
Сопутствующий Bluetooth передатчик с низким энергопотреблением в качестве примера может использоваться, чтобы передать стандартно-совместимую форму волны BLE, которая может декодироваться этим примером. Можно также использовать этот пример, чтобы передать канал данных PDUs путем изменения индекса канала, указателя и центральных значений частоты в обоих примеры.
Общие советы для поиска и устранения неисправностей оборудования SDR и Пакета Поддержки Communications Toolbox для Радио ADALM-PLUTO могут быть найдены в Типичных проблемах и Фиксируют (Пакет Поддержки Communications Toolbox для Аналоговых устройств Радио ADALM-Pluto).
Этот пример использует следующие функции помощника:
Объем 6 из спецификации ядра Bluetooth, системный пакет ядра версии 5.0 [низкий энергетический контроллер объем].