exponenta event banner

Приемник низкой энергии Bluetooth

В этом примере показано, как реализовать приемник Bluetooth ® Low Energy (BLE) с использованием библиотеки Communications Toolbox™ Library для протокола Bluetooth. С помощью ADALM-PLUTO Radio можно либо использовать захваченные сигналы, либо принимать сигналы в реальном времени. Подходящий сигнал для приема может быть сгенерирован путем моделирования сопутствующего примера, Bluetooth Low Energy Transmenter, с любой из следующих настроек: (i) две платформы SDR, соединенные с одним и тем же главным компьютером, который выполняет две сессии MATLAB (ii) две платформы SDR, соединенные с двумя компьютерами, которые выполняют отдельные сессии MATLAB.

Дополнительные сведения о том, как настроить хост-компьютер для работы с пакетом поддержки ADALM-PLUTO, см. в документации по настройке аппаратного обеспечения управляемого хоста (пакет поддержки Communications Toolbox для аналоговых устройств ADALM-Pluto Radio).

Необходимое оборудование и программное обеспечение

Для выполнения этого примера с использованием захваченных сигналов необходимо следующее программное обеспечение:

  • Библиотека коммуникационных инструментов для протокола Bluetooth

Для приема сигналов в режиме реального времени также требуется радиомодуль ADALM-PLUTO и соответствующий пакет поддержки Add-On:

Полный список платформ SDR, поддерживаемых Communications Toolbox, см. в разделе Поддерживаемые аппаратные средства на странице обнаружения программно-определяемого радио (SDR).

Фон

Группа Bluetooth Special Interest Group (SIG) представила BLE для маломощной связи малой дальности. Стандарт Bluetooth [1] определяет канальный уровень, который включает в себя уровни PHY и MAC. Приложения BLE включают передачу изображений и видеофайлов между мобильными телефонами, автоматизацию дома и Интернет вещей (IoT).

Технические характеристики BLE:

  • Диапазон частот передачи: 2,4-2,4835 ГГц

  • Радиочастотные каналы: 40

  • Скорость передачи символов: 1 Мсым/с, 2 Мсым/с

  • Модуляция: гауссова минимальная манипуляция сдвигом (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). Максимальный размер сообщения - 2080 бит.

  • Поля окончания: два 3-разрядных вектора нулей, используемых в кодировании с прямым исправлением ошибок. Поля окончания присутствуют только для кодированных режимов (LE500K и LE125K).

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

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

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

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

Пример структуры

Общая структура примера приемника BLE описана следующим образом:

  1. Инициализация параметров приемника

  2. Источник сигнала

  3. Захват пакетов BLE

  4. Обработка в приемнике

Инициализация параметров приемника

Сценарий helperBLEReceiverConfig.m инициализирует параметры приемника. Вы можете изменить phyMode параметр для декодирования принятого сигнала BLE на основе режима передачи PHY. phyMode может быть из набора {'LE1M', 'LE2M', 'LE500K', 'LE125K'}.

phyMode = 'LE1M';
bleParam = helperBLEReceiverConfig(phyMode);

Источник сигнала

Укажите источник сигнала как файл или ADALM-PLUTO.

  • Файл: Использует comm.BasebandFileReader для чтения файла, который содержит ранее захваченный эфирный сигнал.

  • ADALM-PLUTO: использует sdrrx (Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio) Системный объект для приема живого сигнала от аппаратных средств 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);
    sigSrcInfo = info(sigSrc);
    sigSrc.SamplesPerFrame = sigSrcInfo.NumSamplesInData;
    bbSampleRate = sigSrc.SampleRate;
    bleParam.SamplesPerSymbol = bbSampleRate/bleParam.SymbolRate;

elseif strcmp(signalSource,'ADALM-PLUTO')

    % First check if the HSP exists
    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

    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 и битов необработанного сообщения. На следующей схеме показана обработка приемника.

  1. Выполнить автоматическую регулировку усиления (АРУ)

  2. Удаление смещения постоянного тока

  3. Оценка и исправление смещения несущей частоты

  4. Выполнить согласованную фильтрацию гауссовым импульсом

  5. Синхронизация по времени

  6. Демодуляция GMSK

  7. Декодирование FEC и восстановление шаблона для LECoded PHY (LE500K и LE125K)

  8. Дедупликация данных

  9. Выполнение проверки CRC на декодированном PDU

  10. Частота ошибок обработки пакетов (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.000000.

Дальнейшие исследования

Дополнительный пример Bluetooth Low Energy Transmenter может использоваться для передачи совместимой со стандартом формы сигнала BLE, которая может быть декодирована с помощью этого примера. Этот пример можно также использовать для передачи PDU канала данных путем изменения индекса канала, адреса доступа и значений центральной частоты в обоих примерах.

Поиск неисправностей

Общие советы по устранению неполадок оборудования SDR и пакет поддержки Communications Toolbox для ADALM-PLUTO Radio можно найти в документе Общие проблемы и исправления (пакет поддержки Communications Toolbox для аналоговых устройств ADALM-Pluto Radio).

Приложение

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

* helperBLEReceiverConfig.m: Настройка параметров приемника BLE * helperBLEPhyBitRecover.m: Восстановление битов полезной нагрузки

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

Группа специальных интересов Bluetooth (SIG). «Спецификация ядра Bluetooth». Версия 5.2, том 6. https://www.bluetooth.com.

Связанные темы