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

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

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

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

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

  • Библиотека Communications Toolbox для протокола Bluetooth

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

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

Фон

Bluetooth Special Interest Group (SIG) представила 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 со скоростью передачи данных 125 Кбит/с (iv) LE125K

Стандарт Bluetooth [1] задает форматы пакетов радиоинтерфейса для всех четырех режимов передачи PHY BLE, используя следующие поля:

  • Преамбула: Преамбула зависит от режима передачи PHY. LE1M mode используется 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);

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

Укажите источник сигнала как 'File' или '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. Выполните автоматическое управление усилением (AGC)

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

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

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

  5. Временная синхронизация

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

  7. Декодирование FEC и демпфирование шаблона для PHY с LECoded (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 Передатчика с Низким Энергопотреблением может использоваться, чтобы передать совместимую со стандартом форму волны BLE, которая может быть декодирована этим примером. Можно также использовать этот пример для передачи PDU канала данных путем изменения индекса канала, адреса доступа и значений центральной частоты в обоих примерах.

Поиск и устранение проблем

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

Приложение

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

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

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

Bluetooth Special Interest Group (SIG). Bluetooth Core Спецификации. Версия 5.2, том 6. https://www.bluetooth.com.

Похожие темы