В этом примере показано, как библиотека 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, управляется двумя параметрами:
maxNumErrors
- максимальное количество битовых ошибок, моделируемых в каждой точке Eb/No. Когда количество битовых ошибок достигает этого предела, симуляция в этой точке Eb/No завершена.
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
Этот пример также демонстрирует, как 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.
В этом примере используются следующие помощники:
helperBLEImpairmentsAddition.m: Добавляет нарушения RF к форме волны BLE
helperBLEPracticalReceiver.m: Демодулируйте и декодируйте полученный сигнал
helperBLEReceiverInit.m: Инициализирует параметры приемника BLE
helperBLEImpairmentsInit.m: Инициализирует параметры нарушения РФ
helperBLEReferenceResults.m: генерирует ссылочные значения BER, PER и Eb/No
Этот пример описывает пакетные передачи BLE PHY, которые имеют искажения RF и добавленные к ним AWGN. Это показывает, как сгенерировать формы сигналов BLE, демодулировать и декодировать биты данных с помощью практичного приемника и вычислить BER и PER.
Том 6 спецификации ядра Bluetooth версии 5.0 Core System Package [Low Energy Controller Volume].