Сквозные симуляции Bluetooth BR/EDR PHY с ухудшениями RF и коррекциями

Этот пример показывает сквозная симуляция для измерения частоты битовых ошибок (BER) и частоты пакетных ошибок (PER) для различных типов пакетов физического слоя Bluetooth ® BR/EDR (PHY) при помощи библиотеки Communications Toolbox™ для протокола Bluetooth ®. Эти PHY-пакеты искажаются путем добавления нарушений радиочастотного фронта (RF) и аддитивного белого Гауссова шума (AWGN). Искаженные формы волны BR/EDR Bluetooth обрабатываются в практическом приемнике, чтобы получить значения BER и PER. Полученные результаты симуляции показывают графики BER и PER как функцию отношения энергии к шуму (Eb/No).

Спецификации Bluetooth BR/EDR-радио

Bluetooth - технология беспроводной персональной сети (WPAN) малой дальности, работающая в глобально нелицензируемых промышленных, научных и медицинских (ISM) полосах с частотной областью значений от 2,4 ГГц до 2,485 ГГц. В технологии Bluetooth данные делятся на пакеты. Каждый пакет передается по одному из 79 назначенных каналов Bluetooth. Пропускная способность каждого канала составляет 1 МГц. Bluetooth реализует схему расширенного спектра с скачкообразной перестройкой частот (FHSS), чтобы переключить несущую между несколькими частотными каналами с помощью псевдослучайной последовательности, известной передатчику и приемнику.

Стандарт Bluetooth задает следующие режимы PHY:

Basic rate (BR) - Обязательный режим, использует Гауссов частотный сдвиг манипуляцию (GFSK) модуляцию со скоростью передачи данных 1 Мбит/с.

Улучшенная скорость передачи данных (EDR) - опционный режим, использует фазу сдвига keing (PSK) модуляцию с этими двумя вариантами:

  • EDR2M: Использует pi/4-DQPSK со скоростью передачи данных 2 Мбит/с

  • EDR3M: Использует 8-DPSK со скоростью передачи данных 3 Мбит/с

Эта сквозная симуляция Bluetooth BR/EDR PHY определяет эффективность BER и PER одного пакета Bluetooth, который имеет нарушения RF и AWGN. Каждый пакет генерируется по циклу вектора, равного длине отношения энергии к шуму (Eb/No), используя bluetoothWaveformGenerator функция путем конфигурирования bluetoothWaveformConfig объект.

Чтобы накопить статистику частоты ошибок, сгенерированная форма волны изменяется с нарушениями RF и AWGN перед проходом через приемник.

Эти искажения RF используются для искажения пакета:

  • Смещение постоянного тока

  • Смещение несущей частоты

  • Статическое смещение синхронизации

  • Дрейф синхронизации

Белый Гауссов шум добавляется к сгенерированным сигналам Bluetooth BR/EDR. Искаженные и шумные формы волны обрабатываются через практичный приемник Bluetooth, выполняющий следующие операции:

  • Удаление смещения постоянного тока

  • Обнаружите пакеты сигнала

  • Выполните согласованную фильтрацию

  • Оцените и исправьте смещение времени

  • Оцените и исправьте смещение частоты несущей

  • Демодулируйте сигнал BR/EDR

  • Выполните декодирование с прямой коррекцией ошибок (FEC)

  • Выполните отключение данных

  • Выполните проверку ошибок заголовка (HEC) и циклическую проверку избыточности (CRC)

  • Выводит декодированные биты и декодированную статистику пакетов на основе декодированной нижней части адреса (LAP), HEC и CRC

Этот блок иллюстрирует шаги обработки для каждого пакета Bluetooth BR/EDR PHY.

Чтобы определить BER и PER, сравните восстановленные биты выхода с передаваемыми данными битами.

Проверка на установку пакета поддержки

Проверьте, установлен ли пакет поддержки 'Communications Toolbox Library for the Bluetooth Protocol'.

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 выбираются на короткое время симуляции.

Сконфигурируйте сигнал Bluetooth BR/EDR

Сигнал Bluetooth BR/EDR конфигурируется с помощью 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

Сконфигурируйте искажения RF

Установите параметры частоты, времени и смещения постоянного тока, чтобы искажать сигнал Bluetooth BR/EDR.

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

Для каждой точки 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;

Figure contains 2 axes. Axes 1 with title BER of Bluetooth with RF impairments contains an object of type line. This object represents BR. Axes 2 with title PER of Bluetooth with RF impairments contains an object of type line. This object represents BR.

Приложение

В примере используется эта вспомогательная функция:

  • helperBluetoothPracticalReceiver.m: Обнаружение, синхронизация и декодирование полученного сигнала Bluetooth BR/EDR.

В этом примере показана вся сквозная процедура для генерации пакета Bluetooth BR/EDR. Сгенерированный сигнал Bluetooth BR/EDR искажается добавлением нарушений RF и AWGN. Чтобы получить значения BER и PER, искаженная сигнал Bluetooth BR/EDR синхронизируется, демодулируется и декодируется из практического приемника.

Избранная библиография

  • Bluetooth Special Interest Group (SIG). «Основной системный пакет [том контроллера BR/EDR]». Спецификация ядра Bluetooth. Версия 5.1, том 2. www.bluetooth.com/

Похожие темы