В этом примере показано сквозное моделирование для измерения частоты битовых ошибок (BER) и частоты пакетных ошибок (PER) для различных типов пакетов физического уровня (PHY) Bluetooth ® BR/EDR с помощью библиотеки Communications Toolbox™ Library для протокола Bluetooth ®. Эти пакеты PHY искажаются путем добавления ухудшений внешнего радиоблока (RF) и аддитивного белого гауссова шума (AWGN). Искаженные сигналы BR/EDR Bluetooth обрабатываются в практическом приемнике для получения значений BER и PER. Полученные результаты моделирования показывают графики BER и PER как функцию отношения плотности энергии к шуму (Eb/No).
Bluetooth - технология беспроводной персональной вычислительной сети (WPAN) малой дальности, работающая в глобальном нелицензионном промышленном, научном и медицинском (ISM) диапазоне частот от 2,4 ГГц до 2,485 ГГц. В технологии Bluetooth данные делятся на пакеты. Каждый пакет передается по одному из 79 назначенных каналов Bluetooth. Полоса пропускания каждого канала составляет 1 МГц. Bluetooth реализует схему частотно-скачкообразного расширения спектра (FHSS) для переключения несущей между множеством частотных каналов с использованием псевдослучайной последовательности, известной передатчику и приемнику.
Стандарт Bluetooth определяет следующие режимы PHY:
Базовая скорость (BR) - обязательный режим, использует модуляцию гауссовой частотной манипуляции (GFSK) со скоростью передачи данных 1 Мбит/с.
Расширенная скорость передачи данных (EDR) - дополнительный режим, использует модуляцию фазовой манипуляции (PSK) с двумя вариантами:
EDR2M: Использует pi/4-DQPSK со скоростью передачи данных 2 Мбит/с
EDR3M: Использует 8-DPSK со скоростью передачи данных 3 Мбит/с
Это сквозное моделирование PHY Bluetooth BR/EDR определяет производительность BER и PER одного пакета Bluetooth, который имеет нарушения RF и AWGN. Каждый пакет генерируется по контуру вектора, равного длине отношения плотности энергии к шуму (Eb/No), используя bluetoothWaveformGenerator путем конфигурирования bluetoothWaveformConfig объект.
Для накопления статистики частоты ошибок генерируемая форма сигнала изменяется с ухудшением РЧ и AWGN перед прохождением через приемник.
Эти нарушения RF используются для искажения пакета:
Смещение постоянного тока
Смещение несущей частоты
Смещение статической синхронизации
Дрейф синхронизации
Белый гауссов шум добавляется к генерируемым сигналам Bluetooth BR/EDR. Искаженные и шумные сигналы обрабатываются через практический приемник Bluetooth, выполняющий следующие операции:
Удаление смещения постоянного тока
Обнаружение всплесков сигнала
Выполнить согласованную фильтрацию
Оценка и исправление смещения времени
Оценка и корректировка смещения несущей частоты
Демодуляция сигнала BR/EDR
Выполнение декодирования с прямым исправлением ошибок (FEC)
Выполнить дедупликацию данных
Проверка ошибок заголовка (HEC) и проверка циклическим избыточным кодом (CRC)
Вывод декодированных битов и статистики декодированных пакетов на основе декодированной части нижнего адреса (LAP), HEC и CRC
Эта блок-схема иллюстрирует этапы обработки для каждого пакета Bluetooth BR/EDR PHY.


Чтобы определить BER и PER, сравните восстановленные выходные биты с переданными битами данных.
Проверьте, установлена ли библиотека Communications Toolbox Library для пакета поддержки протокола Bluetooth.
commSupportPackageCheck('BLUETOOTH');% Eb/No in dB EbNo = 2:2:14; % Maximum number of bit errors simulated at each Eb/No point maxNumErrs = 100; % Maximum number of bits accumulated at each Eb/No point maxNumBits = 1e6; % Maximum number of packets considered at each Eb/No point maxNumPkts = 1000;
В этом примере значения maxNumErrs, maxNumBits и maxNumPkts выбираются в течение короткого времени моделирования.
Форма сигнала BR/EDR Bluetooth конфигурируется с помощью bluetoothWaveformConfig объект. Конфигурирование свойств bluetoothWaveformConfig объект в соответствии с вашими требованиями. В этом примере конфигурируются режим передачи PHY, тип пакета Bluetooth и количество выборок на символ.
phyMode ='BR'; % PHY transmission mode bluetoothPacket = 'FHS'; % Type of Bluetooth packet, this value can be: {'ID', % 'NULL','POLL','FHS','HV1','HV2','HV3','DV','EV3', % 'EV4','EV5','AUX1','DM3','DM1','DH1','DM5','DH3', % 'DH5','2-DH1','2-DH3','2-DH5','2-DH1','2-DH3', % '2-DH5','2-EV3','2-EV5','3-EV3','3-EV5'} sps = 8; % Samples per symbol, must be greater than 1
Установите параметры частоты, времени и смещения постоянного тока для искажения формы сигнала BR/EDR Bluetooth.
frequencyOffset =6000;% In Hz timingOffset =
0.5; % In samples, less than 1 microsecond timingDrift =
2; % In parts per million dcOffset =
2; % Percentage w.r.t maximum amplitude value symbolRate = 1e6; % Symbol Rate % Create timing offset object timingDelayObj = dsp.VariableFractionalDelay; % Create frequency offset object frequencyDelay = comm.PhaseFrequencyOffset('SampleRate',symbolRate*sps);
Для каждой точки Eb/No пакеты генерируются и обрабатываются посредством следующих шагов:
Генерировать случайные биты
Генерация сигнала Bluetooth BR/EDR
Пропускать сформированный сигнал через канал AWGN
Добавить смещение частоты
Добавление смещения синхронизации
Добавление смещения постоянного тока
Пропускать искаженный сигнал через практический приемник
Расчет BER и PER
ber = zeros(1,length(EbNo)); % BER results per = zeros(1,length(EbNo)); % PER results bitsPerByte = 8; % Number of bits per byte % Set code rate based on packet if any(strcmp(bluetoothPacket,{'FHS','DM1','DM3','DM5','HV2','DV','EV4'})) codeRate = 2/3; elseif strcmp(bluetoothPacket,'HV1') codeRate = 1/3; else codeRate = 1; end % Set number of bits per symbol based on the PHY transmission mode bitsPerSymbol = 1+ (strcmp(phyMode,'EDR2M'))*1 +(strcmp(phyMode,'EDR3M'))*2; % Get SNR from EbNo values snr = EbNo + 10*log10(codeRate) + 10*log10(bitsPerSymbol) - 10*log10(sps); % Create a Bluetooth BR/EDR waveform configuration object txCfg = bluetoothWaveformConfig('Mode',phyMode,'PacketType',bluetoothPacket,... 'SamplesPerSymbol',sps); if strcmp(bluetoothPacket,'DM1') txCfg.PayloadLength = 17; % Maximum length of DM1 packets in bytes end dataLen = getPayloadLength(txCfg); % Length of the payload % Get PHY properties rxCfg = getPhyConfigProperties(txCfg); for iSnr = 1:length(snr) rng default % Initialize error computation parameters errorCalc = comm.ErrorRate; berVec = zeros(3,1); pktCount = 0; % Counter for number of detected Bluetooth packets loopCount = 0; % Counter for number of packets at each SNR value pktErr = 0; while((berVec(2) < maxNumErrs) && (berVec(3) < maxNumBits) && (loopCount < maxNumPkts)) txBits = randi([0 1],dataLen*bitsPerByte,1); % Data bits generation txWaveform = bluetoothWaveformGenerator(txBits,txCfg); % Add Frequency Offset frequencyDelay.FrequencyOffset = frequencyOffset; transWaveformCFO = frequencyDelay(txWaveform); % Add Timing Delay timingDriftRate = (timingDrift*1e-6)/(length(txWaveform)*sps);% Timing drift rate timingDriftVal = timingDriftRate*(0:1:(length(txWaveform)-1))';% Timing drift timingDelay = (timingOffset*sps)+timingDriftVal; % Static timing offset and timing drift transWaveformTimingCFO = timingDelayObj(transWaveformCFO,timingDelay); % Add DC Offset dcValue = (dcOffset/100)*max(transWaveformTimingCFO); txImpairedWaveform = transWaveformTimingCFO + dcValue; % Add AWGN txNoisyWaveform = awgn(txImpairedWaveform,snr(iSnr),'measured'); % Receiver Module [rxBits,decodedInfo,pktStatus]... = helperBluetoothPracticalReceiver(txNoisyWaveform,rxCfg); numOfSignals = length(pktStatus); pktCount = pktCount+numOfSignals; loopCount = loopCount+1; % BER and PER Calculations L1 = length(txBits); L2 = length(rxBits); L = min(L1,L2); if(~isempty(L)) berVec = errorCalc(txBits(1:L),rxBits(1:L)); end pktErr = pktErr+sum(~pktStatus); end % Average of BER and PER per(iSnr) = pktErr/pktCount; ber(iSnr) = berVec(1); if ((ber(iSnr) == 0) && (per(iSnr) == 1)) ber(iSnr) = 0.5; % If packet error rate is 1, consider average BER of 0.5 end if ~any(strcmp(bluetoothPacket,{'ID','NULL','POLL'})) disp(['Mode ' phyMode ', '... 'Simulated for Eb/No = ', num2str(EbNo(iSnr)), ' dB' ', '... 'obtained BER:',num2str(ber(iSnr)),' obtained PER: ',... num2str(per(iSnr))]); else disp(['Mode ' phyMode ', '... 'Simulated for Eb/No = ', num2str(EbNo(iSnr)), ' dB' ', '... 'obtained PER: ',num2str(per(iSnr))]); end end
Mode BR, Simulated for Eb/No = 2 dB, obtained BER:0.23611 obtained PER: 0.875 Mode BR, Simulated for Eb/No = 4 dB, obtained BER:0.084028 obtained PER: 0.89474 Mode BR, Simulated for Eb/No = 6 dB, obtained BER:0.063492 obtained PER: 0.86667 Mode BR, Simulated for Eb/No = 8 dB, obtained BER:0.025 obtained PER: 0.77419 Mode BR, Simulated for Eb/No = 10 dB, obtained BER:0.0083333 obtained PER: 0.38824 Mode BR, Simulated for Eb/No = 12 dB, obtained BER:0.0019597 obtained PER: 0.13699 Mode BR, Simulated for Eb/No = 14 dB, obtained BER:0.00025304 obtained PER: 0.022267
В этом разделе представлены результаты BER и PER относительно входного диапазона Eb/No для рассматриваемого режима PHY.
figure, if any(strcmp(bluetoothPacket,{'ID','NULL','POLL'})) numOfPlots = 1; % Plot only PER else numOfPlots = 2; % Plot both BER and PER subplot(numOfPlots,1,1),semilogy(EbNo,ber.','-r*'); xlabel('Eb/No (dB)'); ylabel('BER'); legend(phyMode); title('BER of Bluetooth with RF impairments'); hold on; grid on; end subplot(numOfPlots,1,numOfPlots),semilogy(EbNo,per.','-k*'); xlabel('Eb/No (dB)'); ylabel('PER'); legend(phyMode); title('PER of Bluetooth with RF impairments'); hold on; grid on;

В примере используется эта вспомогательная функция:
helperBluetoothReceiver.m: Обнаруживает, синхронизирует и декодирует принятый сигнал Bluetooth BR/EDR.
В этом примере показана полная сквозная процедура генерации пакета Bluetooth BR/EDR. Генерируемая форма сигнала BR/EDR Bluetooth искажается путем добавления нарушений RF и AWGN. Для получения значений BER и PER искаженная форма сигнала BR/EDR Bluetooth синхронизируется, демодулируется и декодируется из практического приемника.
Группа специальных интересов Bluetooth (SIG). «Основной системный пакет [том контроллера BR/EDR]». Спецификация ядра Bluetooth. Версия 5.1, том 2. www.bluetooth.com/