Bluetooth низкая энергетическая симуляция частоты ошибок по битам

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

Введение

В этом примере сквозная симуляция используется, чтобы определить эффективность BER BLE [1] под каналом аддитивного белого гауссова шума (AWGN) для области значений энергии, подведенной к долоту к шумовому отношению плотности (Eb/No) значения. В каждой точке Eb/No несколько пакетов BLE передаются через шумный канал без других нарушений радио-фронтенда (RF). Принимая совершенную синхронизацию, идеальный приемник используется, чтобы восстановить биты данных. Эти восстановленные биты данных по сравнению с битами передаваемых данных, чтобы определить BER. Кривые BER сгенерированы для четырех режимов пропускной способности передачи PHY, поддержанных в спецификации [1] 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:2:8;                        % Eb/No range in dB
sps = 4;                              % Samples per symbol
dataLen = 2080;                       % Data length in bits
simMode = {'LE1M','LE2M','LE500K','LE125K'};

Количеством пакетов, протестированных в каждой точке 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™ не будет установлен, 'то parfor' примет значение по умолчанию к нормальному 'для' оператора.

numMode = numel(simMode);          % Number of modes
ber = zeros(numMode,length(EbNo)); % Pre-allocate to store BER results

for iMode = 1:numMode

    phyMode = simMode{iMode};
    % Set signal to noise ratio (SNR) points based on mode
    % For Coded PHY's (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-1));

        % Loop to simulate multiple packets
        numErrs = 0;
        numPkt = 1; % Index of packet transmitted
        while numErrs < maxNumErrors && numPkt < maxNumPackets

            % Generate BLE waveform
            txBits = randi([0 1],dataLen,1,'int8'); % Data bits generation
            chanIndex = randi([0 39],1,1); % Random channel index value for each packet
            if chanIndex <=36
                % Random access address for data channels
                % Ideally, this access address value should meet the requirements specified in
                % Section 2.1.2, Part-B, Vol-6 of Bluetooth specification.
                accessAdd = [1 0 0 0 1 1 1 0 1 1 0 0 1 ...
                          0 0 1 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0]';
            else
                % Default access address for periodic advertising channels
                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]';
            end
            txWaveform = bleWaveformGenerator(txBits,'Mode',phyMode,...
                                            'SamplesPerSymbol',sps,...
                                            'ChannelIndex',chanIndex,...
                                            'AccessAddress',accessAdd);

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

            % Recover data bits using ideal receiver
            rxBits = bleIdealReceiver(rxWaveform,'Mode',phyMode,...
                                        'SamplesPerSymbol',sps,...
                                        'ChannelIndex',chanIndex);

            % Determine the BER
            errors = errorRate(txBits,rxBits);
            ber(iMode,iSnr) = errors(1);
            numErrs = errors(2);
            numPkt = numPkt + 1;
        end
    disp(['Mode ' phyMode ', '...
        'Simulating for Eb/No = ', num2str(EbNo(iSnr)), ' dB' ', '...
        'BER:',num2str(ber(iMode,iSnr))])
    end
end
Mode LE1M, Simulating for Eb/No = -2 dB, BER:0.22222
Mode LE1M, Simulating for Eb/No = 0 dB, BER:0.14622
Mode LE1M, Simulating for Eb/No = 2 dB, BER:0.087542
Mode LE1M, Simulating for Eb/No = 4 dB, BER:0.024531
Mode LE1M, Simulating for Eb/No = 6 dB, BER:0.0080167
Mode LE1M, Simulating for Eb/No = 8 dB, BER:0.00010689
Mode LE2M, Simulating for Eb/No = -2 dB, BER:0.23377
Mode LE2M, Simulating for Eb/No = 0 dB, BER:0.16306
Mode LE2M, Simulating for Eb/No = 2 dB, BER:0.074074
Mode LE2M, Simulating for Eb/No = 4 dB, BER:0.022126
Mode LE2M, Simulating for Eb/No = 6 dB, BER:0.0063733
Mode LE2M, Simulating for Eb/No = 8 dB, BER:0.00053444
Mode LE500K, Simulating for Eb/No = -2 dB, BER:0.37326
Mode LE500K, Simulating for Eb/No = 0 dB, BER:0.27898
Mode LE500K, Simulating for Eb/No = 2 dB, BER:0.12266
Mode LE500K, Simulating for Eb/No = 4 dB, BER:0.032708
Mode LE500K, Simulating for Eb/No = 6 dB, BER:0.0017637
Mode LE500K, Simulating for Eb/No = 8 dB, BER:0
Mode LE125K, Simulating for Eb/No = -2 dB, BER:0.30736
Mode LE125K, Simulating for Eb/No = 0 dB, BER:0.065897
Mode LE125K, Simulating for Eb/No = 2 dB, BER:0.0013361
Mode LE125K, Simulating for Eb/No = 4 dB, BER:0
Mode LE125K, Simulating for Eb/No = 6 dB, BER:0
Mode LE125K, Simulating for Eb/No = 8 dB, BER:0

Постройте BER по сравнению с Результатами Eb/No

markers = 'ox*s';
color = 'bmcr';
dataStr = {zeros(numMode,1)};
figure;
for iMode = 1:numMode
    semilogy(EbNo,ber(iMode,:).',['-' markers(iMode) color(iMode)]);
    hold on;
    dataStr(iMode) = simMode(iMode);
end
grid on;
xlabel('Eb/No (dB)');
ylabel('BER');
legend(dataStr);
title('BER for BLE with AWGN channel');

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

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

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

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

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

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