Сквозная симуляция Bluetooth с низкой энергией PHY с ослаблениями и коррекциями RF

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

Введение

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

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

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

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

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

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

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

  • Автоматическое управление усилением (AGC)

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

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

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

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

  • Коррекция ошибок синхронизации

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

  • 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, как часть Parallel Computing Toolbox, выполняет обработку для каждой точки Eb/No параллельно, чтобы уменьшить общее время симуляции. Чтобы обеспечить возможность использования параллельных вычислений для повышения скорости, закомментируйте оператора for и раскомментируйте оператора parfor ниже. Если Parallel Computing Toolbox(TM) не установлен, оператор 'parfor' по умолчанию равен normal '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, включают запас для искажений RF и условий замирания канала, которые не моделируются в этой симуляции. В результате результаты симуляции здесь превосходят стандартные ссылочные результаты. Если вы измените этот пример, чтобы включить дополнительные искажения, такие как дрейф частоты, замирание и помехи в симуляции, кривые BER и PER будут двигаться прямо к ссылочным значениям Eb/No, сгенерированным на основе стандартных характеристик приемника BLE в [1], том 6, раздел 4.1.

Приложение

В этом примере используются следующие помощники:

Сводные данные

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

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

  1. Том 6 спецификации ядра Bluetooth версии 5.0 Core System Package [Low Energy Controller Volume].

Похожие темы