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

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

Введение

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

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

  • DC возмещен

  • Несущая частота возмещена

  • Фаза Carrier возмещена

  • Синхронизация дрейфа

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

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

  • Удаление DC

  • Несущая частота возместила коррекцию

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

  • Пакетное обнаружение

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

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

  • 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 параллельно, чтобы уменьшать общее время симуляции. Чтобы включить использование параллельных вычислений для увеличенной скорости, прокомментируйте 'для' оператора и не прокомментируйте 'parfor' оператор ниже. Если Parallel Computing Toolbox(TM) не будет установлен, 'то parfor' примет значение по умолчанию к нормальному 'для' оператора.

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.22537, PER:1
Mode LE500K, Simulating for Eb/No = 6 dB, BER:0.0038806, PER:0.3
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 из спецификации [1] Bluetooth.

[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.

  • DC возмещен

  • Несущая частота возмещена

  • Фаза Carrier возмещена

  • Синхронизация дрейфа

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

Приложение

Помощники, используемые в этом примере:

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

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

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

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

Для просмотра документации необходимо авторизоваться на сайте