В этом примере показано, как Библиотекой 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, управляют два параметра:
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 параллельно, чтобы уменьшать общее время симуляции. Чтобы включить использование параллельных вычислений для увеличенной скорости, прокомментируйте 'для' оператора и не прокомментируйте '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.
Помощники, используемые в этом примере:
helperBLEImpairmentsAddition.m: Добавляют нарушения РФ к форме волны BLE
helperBLEPracticalReceiver.m: Демодулируйте и декодирует полученный сигнал
helperBLEReceiverInit.m: Инициализирует параметры получателя BLE
helperBLEImpairmentsInit.m: Инициализирует параметры нарушения РФ
helperBLEReferenceResults.m: Генерирует ссылочный BER, PER и значения Eb/No
Этот пример симулирует пакет BLE PHY передачи, которые имеют нарушения РФ и AWGN, добавленный к ним. Это показывает, как сгенерировать формы волны BLE, демодулировать и декодировать биты данных с помощью практического получателя и вычислить BER и PER.
Объем 6 из спецификации ядра Bluetooth, системный пакет ядра версии 5.0 [низкий энергетический контроллер объем].