exponenta event banner

Сквозное моделирование PHY Bluetooth с низким энергопотреблением с повреждениями и коррекциями RF

В этом примере показано, как библиотека Communications Toolbox™ Library для протокола Bluetooth ® может использоваться для измерения частоты битовых ошибок (BER) и частоты пакетных ошибок (PER) для различных режимов передачи пакетов с низкой энергией (BLE) [1] физического уровня (PHY) Bluetooth, которые имеют нарушения внешнего радиосигнала (RF) и аддитивный белый гауссовский шум (AWy).

Введение

Bluetooth special interest group (SIG) представила BLE для маломощной связи малого радиуса действия. Устройства BLE работают в глобальном нелицензионном промышленном, научном и медицинском (ISM) диапазоне частот от 2,4 ГГц до 2,485 ГГц. BLE задает интервал между каналами 2 МГц, что приводит к 40 радиочастотным каналам. Стандарт BLE определяет канальный уровень, который включает в себя уровни PHY и MAC. Приложения BLE включают передачу изображений и видеофайлов между мобильными телефонами, автоматизацию дома и интернет вещей (IoT).

Это сквозное моделирование PHY BLE определяет производительность BER и PER четырех режимов передачи PHY BLE с нарушениями RF и AWGN, добавленными к пакетам передачи. Вложенные для циклов используются для вычисления коэффициентов ошибок для каждого режима передачи при нескольких битовых значениях отношения энергии к плотности шума (Eb/No). Внутри цикла Eb/No генерируется несколько пакетов передачи с использованием bleWaveformGenerator функция и измененные с радиочастотными нарушениями и AWGN для накопления статистики частоты ошибок. Каждый пакет искажается этими нарушениями RF:

  • Смещение постоянного тока

  • Смещение несущей частоты

  • Смещение фазы несущей

  • Дрейф синхронизации

Белый гауссовый шум добавляется к передаваемым сигналам BLE. Шумные пакеты обрабатываются через практический приемник BLE, который выполняет следующие операции:

  • Автоматическая регулировка усиления (АРУ)

  • Демонтаж постоянного тока

  • Коррекция смещения несущей частоты

  • Согласованная фильтрация

  • Обнаружение пакетов

  • Исправление ошибок синхронизации

  • Демодуляция и декодирование

  • Dewhitening

Этапы обработки для каждого пакета суммированы на следующей диаграмме:

Синхронизированные пакеты затем демодулируются и декодируются для восстановления битов данных. Эти восстановленные биты данных сравниваются с переданными битами данных для определения BER и PER. Кривые BER и PER генерируются для следующих четырех режимов пропускной способности передачи PHY, поддерживаемых в BLE:

  • Некодированный PHY со скоростью передачи данных 1 Мбит/с (LE1M)

  • Некодированный PHY со скоростью передачи данных 2 Мбит/с (LE2M)

  • Кодированный PHY со скоростью передачи данных 500 кбит/с (LE500K)

  • Кодированный PHY со скоростью передачи данных 125 кбит/с (LE125K)

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

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

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

EbNo = 2:4:10;                       % Eb/No in dB
sps = 4;                             % Samples per symbol, must be greater than 1
dataLen = 42;                        % Data length in bytes, includes header, payload and CRC
simMode = {'LE1M','LE2M','LE500K','LE125K'}; % PHY modes considered for the simulation

Количество пакетов, протестированных в каждой точке Eb/No, контролируется двумя параметрами:

  1. maxNumErrors - максимальное количество битовых ошибок, моделируемых в каждой точке Eb/No. Когда число битовых ошибок достигает этого предела, моделирование в этой точке Eb/No завершается.

  2. maxNumPackets является максимальным количеством пакетов, моделируемых в каждой точке Eb/No, и ограничивает продолжительность моделирования, если предел битовых ошибок не достигнут.

Числа, выбранные для maxNumErrors и maxNumPackets в этом примере приводит к очень короткому моделированию. Для получения значимых результатов мы рекомендуем увеличить эти цифры.

maxNumErrors = 100; % Maximum number of bit errors at an Eb/No point
maxNumPackets = 10; % Maximum number of packets at an Eb/No point

Моделирование для каждой точки Eb/No

В этом примере также показано, как parfor может использоваться вместо for цикл при моделировании каждой точки Eb/No для ускорения моделирования. parfor, как часть панели инструментов параллельных вычислений, выполняет обработку для каждой точки Eb/No параллельно, чтобы сократить общее время моделирования. Чтобы разрешить использование параллельных вычислений для увеличения скорости, прокомментируйте оператор «for» и раскомментируйте оператор «parfor» ниже. Если панель инструментов Parallel Computing Toolbox (TM) не установлена, parfor будет использоваться по умолчанию для обычного оператора for.

numMode = numel(simMode);          % Number of modes
ber = zeros(numMode,length(EbNo)); % Pre-allocate to store BER results
per = zeros(numMode,length(EbNo)); % Pre-allocate to store PER results
bitsPerByte = 8;                   % Number of bits per byte

% Fixed access address Ideally, this access address value should meet the
% requirements specified in Section 2.1.2 of the Bluetooth specification.
accessAdd = [0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 0 ...
                            1 0 0 0 1 0 1 1 1 0 0 0 1]';
for iMode = 1:numMode

    phyMode = simMode{iMode};

    % Set signal to noise ratio (SNR) points based on mode.
    % For Coded PHYs (LE500K and LE125K), the code rate factor is included
    % in SNR calculation as 1/2 rate FEC encoder is used.
    if any(strcmp(phyMode,{'LE1M','LE2M'}))
        snrVec = EbNo - 10*log10(sps);
    else
        codeRate = 1/2;
        snrVec = EbNo + 10*log10(codeRate) - 10*log10(sps);
    end

%     parfor iSnr = 1:length(snrVec)  % Use 'parfor' to speed up the simulation
    for iSnr = 1:length(snrVec)   % Use 'for' to debug the simulation

        % Set random substream index per iteration to ensure that each
        % iteration uses a repeatable set of random numbers
        stream = RandStream('combRecursive','Seed',0);
        stream.Substream = iSnr;
        RandStream.setGlobalStream(stream);

        % Create an instance of error rate
        errorRate = comm.ErrorRate('Samples','Custom',...
                        'CustomSamples',1:(dataLen*bitsPerByte-1));

        % Create and configure the System objects for impairments
        initImp = helperBLEImpairmentsInit(phyMode,sps);

        % Create and configure the receiver System objects
        initRxParams = helperBLEReceiverInit(phyMode,sps,accessAdd);

        % Initialize error computation parameters
        [numErrs,perCnt] = deal(0);
        numPkt = 1;

        % Loop to simulate multiple packets
        while numErrs <= maxNumErrors && numPkt <= maxNumPackets

            % Generate BLE waveform
            txBits = randi([0 1],dataLen*bitsPerByte,1,'int8'); % Data bits generation
            chanIndex = randi([0 39],1,1); % Random channel index value for each packet
            txWaveform = bleWaveformGenerator(txBits,'Mode',phyMode,...
                                            'SamplesPerSymbol',sps,...
                                            'ChannelIndex',chanIndex,...
                                            'AccessAddress',accessAdd);

            % Define the RF impairment parameters
            initImp.pfo.FrequencyOffset = randsrc(1,1,-50e3:10:50e3); % In Hz, Max range is +/- 150 KHz
            initImp.pfo.PhaseOffset = randsrc(1,1,-10:5:10);          % In degrees
            initoff = 0.15*sps; % Static timing offset
            stepsize = 20*1e-6; % Timing drift in ppm, Max range is +/- 50 ppm
            initImp.vdelay = (initoff:stepsize:initoff+stepsize*(length(txWaveform)-1))'; % Variable timing offset
            initImp.dc = 20;     % Percentage w.r.t maximum amplitude value

            % Pass the generated waveform through RF impairments
            txImpairedWfm = helperBLEImpairmentsAddition(txWaveform,initImp);

            % Pass the transmitted waveform through AWGN channel
            rxWaveform = awgn(txImpairedWfm,snrVec(iSnr));

            % Recover data bits using practical receiver
            [rxBits,accessAddress] = helperBLEPracticalReceiver(rxWaveform,initRxParams,chanIndex);

            % Determine the BER and PER
            if(length(txBits) == length(rxBits))
                errors = errorRate(txBits,rxBits); % Outputs the accumulated errors
                ber(iMode,iSnr) = errors(1);       % Accumulated BER
                currentErrors = errors(2)-numErrs; % Number of errors in current packet
                if(currentErrors) % Check if current packet is in error or not
                    perCnt  = perCnt + 1;          % Increment the PER count
                end
                numErrs = errors(2);               % Accumulated errors
                numPkt = numPkt + 1;
            end
        end
        per(iMode,iSnr) = perCnt/(numPkt-1);

    disp(['Mode ' phyMode ', '...
        'Simulating for Eb/No = ', num2str(EbNo(iSnr)), ' dB' ', '...
        'BER:',num2str(ber(iMode,iSnr)), ', '...
        'PER:',num2str(per(iMode,iSnr))])
    end
end
Mode LE1M, Simulating for Eb/No = 2 dB, BER:0.079104, PER:1
Mode LE1M, Simulating for Eb/No = 6 dB, BER:0.0083582, PER:0.9
Mode LE1M, Simulating for Eb/No = 10 dB, BER:0, PER:0
Mode LE2M, Simulating for Eb/No = 2 dB, BER:0.1194, PER:1
Mode LE2M, Simulating for Eb/No = 6 dB, BER:0.0065672, PER:0.5
Mode LE2M, Simulating for Eb/No = 10 dB, BER:0, PER:0
Mode LE500K, Simulating for Eb/No = 2 dB, BER:0.20746, PER:1
Mode LE500K, Simulating for Eb/No = 6 dB, BER:0.0020896, PER:0.2
Mode LE500K, Simulating for Eb/No = 10 dB, BER:0, PER:0
Mode LE125K, Simulating for Eb/No = 2 dB, BER:0.0077612, PER:0.5
Mode LE125K, Simulating for Eb/No = 6 dB, BER:0, PER:0
Mode LE125K, Simulating for Eb/No = 10 dB, BER:0, PER:0

Результаты моделирования

В этом разделе представлены результаты BER и PER w.r.t входной диапазон Eb/No для рассматриваемых режимов PHY.

markers = 'ox*s';
color = 'bmcr';
dataStr = {zeros(numMode,1)};
for iMode = 1:numMode
    subplot(2,1,1),semilogy(EbNo,ber(iMode,:).',['-' markers(iMode) color(iMode)]);
    hold on;
    dataStr(iMode) = simMode(iMode);

    subplot(2,1,2),semilogy(EbNo,per(iMode,:).',['-' markers(iMode) color(iMode)]);
    hold on;
    dataStr(iMode) = simMode(iMode);
end
subplot(2,1,1),
grid on;
xlabel('Eb/No (dB)');
ylabel('BER');
legend(dataStr);
title('BER of BLE under RF impairments');

subplot(2,1,2),
grid on;
xlabel('Eb/No (dB)');
ylabel('PER');
legend(dataStr);
title('PER of BLE under RF impairments');

Справочные результаты

В этом разделе создаются ссылочные значения BER, PER и Eb/No для каждого режима PHY на основе чувствительности приемника и соответствующего BER, как указано в разделе 4.1 спецификации Bluetooth [1].

[refBER,refPER,refEbNo] = deal(zeros(numMode,1));
headerLen = 2; % Header length in bytes
crcLen = 3; % CRC length in bytes
payloadLen = dataLen-headerLen-crcLen; % Payload length in bytes
for iMode = 1:numMode
    [refBER(iMode),refPER(iMode),refEbNo(iMode)] = ...
                        helperBLEReferenceResults(simMode(iMode),payloadLen);
    disp(['Mode ' simMode{iMode} ', '...
        'Reference Eb/No = ', num2str(refEbNo(iMode)), ' dB' ', '...
        'BER = ',num2str(refBER(iMode)), ', '...
        'PER = ',num2str(refPER(iMode)), ', '...
        'for payload length of ',num2str(payloadLen), ' bytes'])
end
Mode LE1M, Reference Eb/No = 34.919 dB, BER = 0.001, PER = 0.30801, for payload length of 37 bytes
Mode LE2M, Reference Eb/No = 34.919 dB, BER = 0.001, PER = 0.30801, for payload length of 37 bytes
Mode LE500K, Reference Eb/No = 31.9087 dB, BER = 0.001, PER = 0.30801, for payload length of 37 bytes
Mode LE125K, Reference Eb/No = 31.9087 dB, BER = 0.001, PER = 0.30801, for payload length of 37 bytes

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

Количество пакетов, протестированных при каждом значении Eb/No, контролируется maxNumErrors и maxNumPackets параметры. Для статистически значимых результатов эти значения должны быть больше значений, представленных в этом примере. Чтобы создать рисунок ниже, моделирование выполнялось с длиной данных 128 байт, maxNumErrors = 1e3, и maxNumPackets = 1e4 для всех четырех режимов передачи.

На рисунке показано, что эталонные значения BER и PER могут быть получены в более низких точках Eb/No по сравнению с эталонным значением Eb/No, указанным в спецификации Bluetooth. В этом примере только следующие нарушения добавляются и передаются через канал AWGN.

  • Смещение постоянного тока

  • Смещение несущей частоты

  • Смещение фазы несущей

  • Дрейф синхронизации

Ссылочные значения Eb/No, сгенерированные на основе спецификации BLE, включают запас на ухудшение радиочастотного сигнала и условия замирания канала, которые не смоделированы в этом моделировании. В результате результаты моделирования здесь превосходят стандартные ссылочные результаты. Если изменить этот пример, включив в моделирование дополнительные нарушения, такие как дрейф частоты, замирание и помехи, кривые BER и PER будут перемещаться в направлении опорных значений Eb/No, сгенерированных на основе стандартных характеристик приемника BLE в [1], том 6, раздел 4.1.

Приложение

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

Резюме

В этом примере моделируется передача пакетов PHY BLE, к которым добавлены нарушения RF и AWGN. Он показывает, как генерировать сигналы BLE, демодулировать и декодировать биты данных с использованием практического приемника и вычислять BER и PER.

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

  1. Том 6 спецификации ядра Bluetooth, версия 5.0 Пакет основной системы [Low Energy Controller Volume].

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