Этот пример показывает сквозная симуляция для измерения частоты битовых ошибок (BER) и частоты пакетных ошибок (PER) для различных типов пакетов физического слоя Bluetooth ® BR/EDR (PHY) при помощи библиотеки Communications Toolbox™ для протокола 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:
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 конфигурируется с помощью 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
Установите параметры частоты, времени и смещения постоянного тока, чтобы искажать сигнал 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 пакеты генерируются и обрабатываются через следующие шаги:
Сгенерируйте случайные биты
Сгенерируйте сигнал 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;
В примере используется эта вспомогательная функция:
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/