Bluetooth низкий энергетический получатель

В этом примере показано, как реализовать 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) режимы показан на рисунке ниже:

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

% 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'.

  • 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')

    % 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. Удалите смещение DC

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

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

  5. Синхронизация синхронизации

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

  7. Декодирование FEC и шаблон demapping для ФИЗИКИ LECoded (LE500K и LE125K)

  8. Данные dewhitening

  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, которая может декодироваться этим примером. Можно также использовать этот пример, чтобы передать канал данных PDUs путем изменения индекса канала, указателя и центральных значений частоты в обоих примеры.

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

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

Приложение

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

Выбранная библиография

  1. Объем 6 из спецификации ядра Bluetooth, системный пакет ядра версии 5.0 [низкий энергетический контроллер объем].