Этот пример показывает сквозную симуляцию, чтобы измерить частоту ошибок по битам (BER) и пакетный коэффициент ошибок (PER) для различного физического уровня Bluetooth® BR/EDR (PHY) пакетные типы при помощи Библиотеки Communications Toolbox™ для Протокола Bluetooth®. Эти пакеты PHY искажены путем добавления ухудшений радио-фронтенда (RF) и аддитивного белого Гауссова шума (AWGN). Искаженный Bluetooth формы волны BR/EDR обрабатывается в практическом приемнике, чтобы получить значения PER и BER. Полученные результаты симуляции показывают графики BER и PER в зависимости от отношения плотности энергии к шуму (Eb/No).
Bluetooth является ближней технологией Беспроводной персональной сети области (WPAN), действующей в глобально нелицензированной промышленной, научной, и медицинской полосе (ISM) в частотном диапазоне от 2,4 ГГц до 2,485 ГГц. В технологии Bluetooth данные разделены на пакеты. Каждый пакет передается на одном из 79 обозначенных каналов Bluetooth. Полоса пропускания каждого канала составляет 1 МГц. Bluetooth реализует схему скачкообразно перемещающего частоту спектра распространения (FHSS) переключить несущую между несколькими каналами частоты при помощи псевдослучайной последовательности, известной передатчику и приемнику.
Стандарт Bluetooth задает эти режимы PHY:
Режим Basic rate (BR) - Mandatory, модуляция Гауссова манипулирования сдвига частоты (GFSK) использования со скоростью передачи данных 1 Мбит/с.
Режим Enhanced data rate (EDR) - Optional, модуляция манипулирования сдвига фазы (PSK) использования с этими двумя вариантами:
EDR2M: Использование pi/4-DQPSK со скоростью передачи данных 2 Мбит/с
EDR3M: Использование 8-DPSK со скоростью передачи данных 3 Мбит/с
Эта сквозная симуляция BR/EDR PHY Bluetooth определяет BER и эффективность PER одного пакета Bluetooth, который имеет ухудшения RF и AWGN. Каждый пакет сгенерирован по циклу вектора, равного длине отношения плотности энергии к шуму (Eb/No) использование bluetoothWaveformGenerator
функция путем конфигурирования bluetoothWaveformConfig
объект.
Чтобы накопить статистику коэффициента ошибок, сгенерированная форма волны изменена с ухудшениями RF и AWGN перед прохождением через приемник.
Эти ухудшения RF используются, чтобы исказить пакет:
DC возмещен
Несущая частота возмещена
Статическая синхронизация возмещена
Синхронизация дрейфа
Белый Гауссов шум добавляется к сгенерированному Bluetooth формы волны BR/EDR. Искаженные и шумные формы волны обрабатываются через практический приемник Bluetooth, выполняющий эти операции:
Удалите смещение DC
Обнаружьте пакеты сигнала
Выполните согласованную фильтрацию
Оцените и откорректируйте смещение синхронизации
Оцените и откорректируйте смещение несущей частоты
Демодулируйте форму волны BR/EDR
Выполните декодирование прямого исправления ошибок (FEC)
Выполните данные dewhitening
Выполните проверку на ошибки заголовка (HEC) и контроль циклическим избыточным кодом (CRC)
Выходные параметры декодировали биты и декодировали пакетную статистику на основе декодируемого ниже обратитесь к части (LAP), HEC и CRC
Эта блок-схема иллюстрирует шаги обработки для каждого пакета BR/EDR PHY Bluetooth.
Чтобы определить BER и PER, сравните восстановленные выходные биты с битами передаваемых данных.
Проверяйте, установлена ли 'Библиотека Communications Toolbox для пакета поддержки' Протокола 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
Установите частоту, время и параметры смещения DC искажать форму волны 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
Добавьте смещение частоты
Добавьте смещение синхронизации
Добавьте смещение DC
Передайте искаженную форму волны через практический приемник
Вычислите 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.
Этот пример показывает целую сквозную процедуру, чтобы сгенерировать пакет BR/EDR Bluetooth. Сгенерированный Bluetooth форма волны BR/EDR искажен путем добавления ухудшений RF и AWGN. Чтобы получить BER и значения PER, искаженный Bluetooth, форма волны BR/EDR синхронизируется, демодулируется и декодируется от практического приемника.
Специальная группа (SIG) Bluetooth. "Базовый Системный пакет [Контроллер BR/EDR Объем]". Спецификация Ядра Bluetooth. Версия 5.1, Объем 2. www.bluetooth.com /