В этом примере показано, как библиотека 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, контролируется двумя параметрами:
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, как часть панели инструментов параллельных вычислений, выполняет обработку для каждой точки 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.
В этом примере используются следующие вспомогательные устройства:
helperBLEVENTmpaires.m Addition.m: Добавление нарушений RF в форму сигнала BLE
helperBLEPracingReceiver.m: Демодуляция и декодирование принятого сигнала
helperBLEReceiverInit.m: Инициализация параметров приемника BLE
helperBLEVENTmpairesInit.m: Инициализирует параметры ослабления RF
helperBLERefedResults.m: Создание ссылочных значений BER, PER и Eb/No
В этом примере моделируется передача пакетов PHY BLE, к которым добавлены нарушения RF и AWGN. Он показывает, как генерировать сигналы BLE, демодулировать и декодировать биты данных с использованием практического приемника и вычислять BER и PER.
Том 6 спецификации ядра Bluetooth, версия 5.0 Пакет основной системы [Low Energy Controller Volume].