В этом примере представлено сквозное моделирование для демонстрации того, как адаптивная скачкообразная перестройка частоты (AFH) изменяет последовательность скачкообразной перестройки частоты на физическом уровне базовой скорости (BR) Bluetooth ® и повышенной скорости передачи данных (EDR), и минимизирует влияние помех WLAN с использованием библиотеки Communications Toolbox™ Library для протокола Bluetooth ®. В отличие от базовой скачкообразной перестройки частоты, AFH исключает каналы Bluetooth, которые являются источниками помех. Путем исключения этих каналов из списка доступных каналов AFH переназначает передачу и прием пакетов по каналам с относительно меньшими помехами. Результаты моделирования в примере показывают, что значения частоты ошибок пакетов (PER) и частоты ошибок битов (BER) моделирования PHY Bluetooth с помехами WLAN меньше при AFH по сравнению со скачкообразной перестройкой базовой частоты. Кроме того, в примере показан выбранный индекс канала на интервал для скачкообразной перестройки базовой частоты и AFH. Спектральная плотность мощности сигналов Bluetooth BR/EDR с интерференцией WLAN визуализируется с помощью анализатора спектра.
Стандарт Bluetooth определяет два режима PHY: BR и EDR. Библиотека Communications Toolbox™ Library для пакета поддержки протокола Bluetooth позволяет моделировать каналы связи Bluetooth BR/EDR, как указано в спецификации ядра Bluetooth [1].
Режим Bluetooth BR является обязательным, в то время как режим EDR является необязательным. Радиоблок BR/EDR Bluetooth реализует технологию 1600 скачкообразных скачкообразных изменений частоты с расширенным спектром (FHSS). Радиостанция перескакивает псевдослучайным образом по 79 назначенным каналам Bluetooth. Каждый канал Bluetooth имеет пропускную способность 1 МГц. Каждый канал центрируется на частоте (2402 + k) МГц, где k = 0, 1,..., 78. Методика модуляции полезных нагрузок режимов BR и EDR заключается в гауссовой частотной манипуляции (GFSK) и дифференциальной фазовой манипуляции (DPSK) соответственно. Скорость передачи составляет 1 МСимболь/с. Радиоблок BR/EDR Bluetooth использует дуплекс с временным разделением каналов (TDD), в котором передача данных происходит в одном направлении одновременно. Трансмиссия чередуется в двух направлениях, один за другим.
Дополнительные сведения о радио Bluetooth BR/EDR и стеке протоколов см. в разделе Стек протоколов Bluetooth. Дополнительные сведения о структурах пакетов Bluetooth BR/EDR см. в разделе Структура пакетов Bluetooth.
Целью использования FHSS в Bluetooth является обеспечение разнесения, которое позволяет минимизировать BER, даже если мешающие сети или физическая среда делают некоторые каналы непригодными для использования. Способы скачкообразной перестройки частоты могут либо реализовывать фиксированную последовательность скачкообразных переходов канала, например, со скачкообразной перестройкой основной частоты, либо динамически адаптировать свою последовательность скачкообразной перестройки с AFH к изменяющимся условиям помех.
До возможности AFH устройства Bluetooth реализовали базовую схему скачкообразной перестройки частоты. В этом подходе Bluetooth-радио перескакивает псевдослучайным способом со скоростью 1600 скачков/с. Когда другое беспроводное устройство, работающее в том же диапазоне 2,4 ГГц, попадает в среду, схема скачкообразной перестройки базовой частоты приводит к случайным столкновениям. Например, Bluetooth и WLAN - это две такие сети, которые работают в диапазоне частот 2,4 ГГц. Радио Bluetooth и WLAN часто работают в одном и том же физическом сценарии и на одном и том же устройстве. В этих случаях передачи Bluetooth и WLAN могут создавать помехи друг другу. Эти помехи влияют на производительность и надежность обеих сетей. На этом рисунке показан сценарий, в котором передачи пакетов Bluetooth и WLAN мешают друг другу.

AFH позволяет Bluetooth минимизировать конфликты, избегая источников помех и исключая их из списка доступных каналов. На этом рисунке показан предыдущий сценарий с включенным AFH.

Эта процедура переопределения включает в себя уменьшение количества каналов, используемых Bluetooth. Спецификации ядра Bluetooth [1] требуют не менее 20 каналов для передач Bluetooth.
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed. commSupportPackageCheck('BLUETOOTH');
Этот пример демонстрирует сквозную обработку формы сигнала Bluetooth BR/EDR с использованием механизма скачкообразной перестройки частоты, определенного в спецификации ядра Bluetooth [1]. Генерируемый сигнал Bluetooth BR/EDR модулируется по частоте и затем искажается помехами WLAN. На этой блок-схеме показана цепь передатчика и приемника Bluetooth.

Цепь датчиков
Выберите индекс канала для передачи.
Генерировать случайные входные биты.
Создание сигнала Bluetooth BR/EDR.
Применение сдвига частоты на основе выбранного индекса канала.
Цепочка приемников
Выберите индекс канала для приема.
Применение сдвига частоты на основе выбранного индекса канала.
Декодирование сигнала BR/EDR Bluetooth для получения выходных битов.
Беспроводной канал
Добавление помех WLAN (IEEE 802.11b) в форму сигнала Bluetooth BR/EDR.
Добавьте AWGN в форму сигнала Bluetooth BR/EDR.
Результаты
В примере показаны эти результаты для скачкообразной перестройки основной частоты и AFH.
PER и BER для моделирования, выполняемого в канале аддитивного белого гауссова шума (AWGN) для заданного битового отношения энергии к плотности шума (Eb/No).
Спектр принятого сигнала и спектрограмма канала
График, отображающий выбранный индекс канала на интервал передачи или приема
Настройте требуемый тип пакета Bluetooth, длину полезной нагрузки, режим PHY и время моделирования.
simulationTime = 2*1e6; % Simulation time in microseconds packetType ='DM1'; % Specify baseband packet type mode =
'BR'; % Specify PHY mode ('BR', 'EDR2M', 'EDR3M') payloadLength = 10; % Length of baseband packet in bytes
Конфигурирование скачкообразной перестройки частоты
Используйте bluetoothFrequencyHop объект для выбора индекса канала для передачи и приема сигналов Bluetooth BR/EDR.
% Bluetooth frequency hopping frequencyHop = bluetoothFrequencyHop; frequencyHop.SequenceType = 'Connection Adaptive';
Настройка PHY Bluetooth
Используйте вспомогательный объект helperBluetoothPHY для моделирования передачи и приема сигнала Bluetooth BR/EDR.
% Configure Bluetooth PHY transmission phyTx = helperBluetoothPHY; phyTx.Mode = mode; % Configure Bluetooth PHY reception phyRx = helperBluetoothPHY; phyRx.Mode = mode;
Настройка канала и помех WLAN:
Используйте объект helperBluetoothChannel для настройки беспроводного канала. Можно установить EbNo значение для канала AWGN. Для генерации формы сигнала WLAN, создающего помехи, используйте функцию helperBluetoothGenerateWLANWaveform. Укажите источники помех WLAN с помощью wlanInterferenceSource параметр. Сигнал WLAN присутствует в диапазоне от -10 до 10 МГц во время моделирования. Одна из этих опций используется для указания источника помех WLAN.
«Сгенерировано»: чтобы добавить сигнал WLAN из Toolbox™ WLAN, выберите этот параметр.
«BasebandFile»: Добавление сигнала WLAN из файла основной полосы (.bb), выберите этот параметр и укажите имя файла основной полосы в WLANBBFilename собственность. Если не указать .bb файл, в примере используется значение по умолчанию .bb файл, WLANNonHTDSSS.bb, для добавления сигнала WLAN.
«Нет»: сигнал WLAN не добавляется.
AWGN присутствует на протяжении всего моделирования.
% Specify as one of 'Generated' | 'BasebandFile' | 'None' wlanInterferenceSource ='BasebandFile'; wlanBBFilename = 'WLANNonHTDSSS.bb'; % Default baseband file % Configure wireless channel channel = helperBluetoothChannel; channel.EbNo = 22; % Ratio of energy per bit (Eb) to the spectral noise density (No) in dB channel.SIR = -20; % Signal to interference ratio in dB if ~strcmpi(wlanInterferenceSource, 'None') % Generate the WLAN waveform wlanWaveform = helperBluetoothGenerateWLANWaveform(wlanInterferenceSource, wlanBBFilename); % Add the WLAN interference to Bluetooth channel addWLANWaveform(channel, wlanWaveform); end
Настройка моделирования
Инициализируйте параметры для выполнения сквозного моделирования Bluetooth BR/EDR.
slotTime = 625; % Bluetooth slot duration in microseconds % Simulation time in terms of slots numSlots = floor(simulationTime/slotTime); % Slot duration, including transmission and reception slotValue = phyTx.slotsRequired(packetType)*2; % Number of Master transmission slots numMasterTxSlots = floor(numSlots/slotValue); % Total number of Bluetooth physical channels numBtChannels = 79; % errorsBasic and errorsAdaptive store relevant bit and packet error % information per channel. Each row stores the channel index, bit errors, % packet errors, total bits, and BER per channel. errorsBasic and % errorsAdaptive arrays store these values for basic frequency hopping % and AFH, respectively. [errorsBasic, errorsAdaptive] = deal(zeros(numBtChannels,5)); % Initialize first column with channel numbers [errorsBasic(:,1), errorsAdaptive(:,1)] = deal(0:78); % Initialize variables for calculating PER and BER [berBasic, berAdaptive, bitErrors] = deal(0); badChannels = zeros(1,0); totalTransmittedPackets = numMasterTxSlots; % Number of bits per octet octetLength = 8; % Sample rate and input clock used in PHY processing samplePerSymbol = 88; symbolRate = 1e6; sampleRate = symbolRate*samplePerSymbol; inputClock = 0; % Store hop index hopIndex = zeros(1, numMasterTxSlots); % Index to hop index vector hopIdx = 1; % Baseband packet structure basebandData = struct(... 'LTAddr',1, ... % Logical transport address 'PacketType',packetType,... % Packet type 'Payload',zeros(1,phyTx.MaxPayloadSize), ... % Payload 'PayloadLength',0, ... % Payload length 'LLID',[0; 0], ... % Logical link identifier 'SEQN',0, ... % Sequence number 'ARQN',1, ... % Acknowledgment flag 'IsValid',false); ... % Flag to identify the status of % cyclic redundancy check (CRC) and % header error control (HEC) % Bluetooth signal structure bluetoothSignal = struct(... 'PacketType',packetType, ... % Packet type 'Waveform',[], ... % Waveform 'NumSamples',[], ... % Number of samples 'SampleRate',sampleRate, ... % Sample rate 'SamplesPerSymbol',samplePerSymbol, ... % Samples per symbol 'Payload',zeros(1,phyTx.MaxPayloadSize), ... % Payload 'PayloadLength',0, ... % Payload length 'SourceID',0, ... % Source identifier 'Bandwidth',1, ... % Bandwidth 'NodePosition',[0 0 0], ... % Node position 'CenterFrequency',centerFrequency(phyTx), ... % Center frequency 'StartTime',0, ... % Waveform start time 'EndTime',0, ... % Waveform end time 'Duration',0); ... % Waveform duration % Clock ticks(one slot is 2 clock ticks) clockTicks = slotValue*2;
Для визуализации форм сигнала Bluetooth BR/EDR создайте dsp.SpectrumAnalyzer object™ системы.
% Spectrum analyzer for basic frequency hopping spectrumAnalyzerBasic = dsp.SpectrumAnalyzer(... 'Name','Bluetooth Basic Frequency Hopping', ... 'ViewType','Spectrum and spectrogram', ... 'TimeResolutionSource','Property', ... 'TimeResolution',0.0005, ... 'SampleRate',sampleRate, ... 'TimeSpanSource','Property', ... 'TimeSpan', 0.05, ... 'FrequencyResolutionMethod', 'WindowLength', ... 'WindowLength', 512, ... 'AxesLayout', 'Horizontal', ... 'FrequencyOffset',2441*1e6, ... 'ColorLimits',[-20 15]); % Spectrum analyzer for AFH spectrumAnalyzerAdaptive = dsp.SpectrumAnalyzer(... 'Name','Bluetooth Adaptive Frequency Hopping', ... 'ViewType','Spectrum and spectrogram', ... 'TimeResolutionSource','Property', ... 'TimeResolution',0.0005, ... 'SampleRate',sampleRate, ... 'TimeSpanSource','Property', ... 'TimeSpan',0.05, ... 'FrequencyResolutionMethod','WindowLength', ... 'WindowLength',512, ... 'AxesLayout','Horizontal', ... 'FrequencyOffset',2441*1e6, ... 'ColorLimits',[-20 15]);
Цепь передатчика и приемника Bluetooth моделируется с использованием скачкообразной перестройки базовой частоты и AFH. Используя результаты базовой скачкообразной перестройки частоты для каждого канала PER и BER, выведите список используемых каналов. Список используемых каналов подается на вход моделирования с помощью AFH.
Скачкообразная перестройка базовой частоты
Моделирование выполняется для всего указанного количества основных слотов передачи. Моделирует цепь передатчика, цепь приемника и канал для каждого слота. В конце моделирования в примере вычисляются PER и BER для всех форм сигнала Bluetooth BR/EDR.
sprev = rng('default'); % Set random number generator seed for slotIdx = 0:slotValue:numSlots-slotValue % Update clock inputClock = inputClock + clockTicks; % Frequency hopping [channelIndex,~] = nextHop(frequencyHop,inputClock); % PHY transmission stateTx = 1; % Transmission state TxBits = randi([0 1],payloadLength*octetLength,1); basebandData.Payload = TxBits; basebandData.PayloadLength = payloadLength; % Generate whiten initialization vector from clock clockBinary = comm.internal.utilities.de2biBase2RightMSB(inputClock,28); whitenInitialization = [clockBinary(2:7)'; 1]; % Update the PHY with request from the baseband layer updatePHY(phyTx,stateTx,channelIndex,whitenInitialization,basebandData); % Initialize and pass elapsed time as zero elapsedTime = 0; [nextTxTime,btWaveform] = run(phyTx,elapsedTime); % Run PHY transmission run(phyTx, nextTxTime); % Update next invoked time % Channel bluetoothSignal.Waveform = btWaveform; bluetoothSignal.NumSamples = numel(btWaveform); bluetoothSignal.CenterFrequency = centerFrequency(phyTx); channel.ChannelIndex = channelIndex; bluetoothSignal = run(channel,bluetoothSignal,mode); distortedWaveform = bluetoothSignal.Waveform; % PHY reception stateRx = 2; % Reception state % Update the PHY with request from the baseband layer updatePHY(phyRx,stateRx,channelIndex,whitenInitialization); [nextRxTime,~] = run(phyRx,elapsedTime,bluetoothSignal); bluetoothSignal.NumSamples = 0; run(phyRx,nextRxTime,bluetoothSignal); % Run PHY reception chIdx = channelIndex + 1; % Calculate error rate upon successful decoding the packet if phyRx.Decoded rxBitsLength = phyRx.DecodedBasebandData.PayloadLength*octetLength; RxBits = phyRx.DecodedBasebandData.Payload(1:rxBitsLength); % BER calculation txSymLength = length(TxBits); rxSymLength = length(RxBits); minSymLength = min(txSymLength,rxSymLength); if minSymLength > 0 bitErrors = sum(xor(TxBits(1:minSymLength),RxBits(1:minSymLength))); totalBits = minSymLength; % Bit errors found in channel errorsBasic(chIdx,2) = errorsBasic(chIdx,2) + bitErrors; % Total bits transmitted in channel errorsBasic(chIdx,4) = errorsBasic(chIdx,4) + totalBits; end if ~phyRx.DecodedBasebandData.IsValid || bitErrors % Packet errors found in channel errorsBasic(chIdx,3) = errorsBasic(chIdx,3) + 1; end else % Packet errors found in channel errorsBasic(chIdx,3) = errorsBasic(chIdx,3) + 1; end hopIndex(hopIdx) = channelIndex; hopIdx = hopIdx + 1; % Plot spectrum spectrumAnalyzerBasic(btWaveform + wlanWaveform(1:numel(btWaveform))); pause(0.01); end

На предыдущем рисунке график слева показывает спектр сигнала Bluetooth BR/EDR, искаженного помехами WLAN в частотной области и прошедшего через канал AWGN. График справа показывает, что сигнал WLAN присутствует от -10 до 10 МГц. Результаты показывают, что пакеты Bluetooth с мешающим сигналом WLAN перекрываются.
% Plot selected channel index per slot figBasic = figure('Name','Basic frequency hopping'); axisBasic = axes(figBasic); xlabel(axisBasic,'Slot'); ylabel(axisBasic,'Channel Index'); ylim(axisBasic,[0 numBtChannels+3]); title(axisBasic,'Bluetooth Basic Frequency Hopping'); hold on; plot(axisBasic,0:slotValue:numSlots-slotValue,hopIndex,'-o');

Этот график отображает выбранный индекс канала на интервал передачи или приема с использованием скачкообразной перестройки базовой частоты. В этом случае все каналы являются используемыми каналами.
Классификация каналов
Каналы с большим количеством ошибок пакетов помечаются как плохие каналы. Вычислите PER и BER на основе битовых и пакетных ошибок, полученных в результате вышеописанного моделирования.
% Select 25 channels with highest packet errors as bad channels [~,indexes] = sort(errorsBasic(:,3),'descend'); badChannelIdx = min(nnz(errorsBasic(:,3)),25); if badChannelIdx ~= 0 badChannels = indexes(1:badChannelIdx) - 1; end usedChannels = setdiff(0:numBtChannels-1,badChannels); % BER per channel calculation errorsBasic(:,5) = errorsBasic(:,2)./errorsBasic(:,4); errorsBasic(:,5) = fillmissing(errorsBasic(:,5),'constant',0); ber = nonzeros(errorsBasic(:,5)); if ~isempty(ber) berBasic = mean(ber); end % PER calculation packetErrorsBasic = sum(errorsBasic(:,3)); perBasic = packetErrorsBasic/totalTransmittedPackets; % Reset hopIdx = 1; [inputClock,bitErrors] = deal(0); fprintf('PER of Bluetooth BR/EDR waveforms using basic frequency hopping: %.4f\n',perBasic);
PER of Bluetooth BR/EDR waveforms using basic frequency hopping: 0.2787
fprintf('BER of Bluetooth BR/EDR waveforms using basic frequency hopping: %.4f\n',berBasic);BER of Bluetooth BR/EDR waveforms using basic frequency hopping: 0.0550
Адаптивная скачкообразная перестройка частоты
Задайте значение типа последовательности как 'Connection adaptive' и укажите классифицируемые используемые каналы.
frequencyHop.SequenceType = 'Connection adaptive';
frequencyHop.UsedChannels = usedChannels;Выполните моделирование с помощью AFH и вычислите PER и BER.
%rng('default'); % Set random number generator seed for slotIdx = 0:slotValue:numSlots-slotValue % Update clock inputClock = inputClock + clockTicks; % Frequency hopping [channelIndex,~] = nextHop(frequencyHop,inputClock); % PHY transmission stateTx = 1; % Transmission state TxBits = randi([0 1],payloadLength*octetLength,1); basebandData.Payload = TxBits; basebandData.PayloadLength = payloadLength; % Generate whiten initialization vector from clock clockBinary = comm.internal.utilities.de2biBase2RightMSB(inputClock,28); whitenInitialization = [clockBinary(2:7)'; 1]; % Update the PHY with request from the baseband layer updatePHY(phyTx,stateTx,channelIndex,whitenInitialization,basebandData); % Initialize and pass elapsed time as zero elapsedTime = 0; [nextTxTime,btWaveform] = run(phyTx,elapsedTime); % Run PHY transmission run(phyTx,nextTxTime); % Update next invoked time % Channel bluetoothSignal.Waveform = btWaveform; bluetoothSignal.NumSamples = numel(btWaveform); bluetoothSignal.CenterFrequency = centerFrequency(phyTx); channel.ChannelIndex = channelIndex; bluetoothSignal = run(channel,bluetoothSignal,mode); distortedWaveform = bluetoothSignal.Waveform; % PHY reception stateRx = 2; % Reception state % Update the PHY with request from the baseband layer updatePHY(phyRx,stateRx,channelIndex,whitenInitialization); [nextRxTime,~] = run(phyRx,elapsedTime,bluetoothSignal); bluetoothSignal.NumSamples = 0; run(phyRx,nextRxTime,bluetoothSignal); % Run PHY reception chIdx = channelIndex + 1; % Calculate error rate upon successful decoding the packet if phyRx.Decoded rxBitsLength = phyRx.DecodedBasebandData.PayloadLength*octetLength; RxBits = phyRx.DecodedBasebandData.Payload(1:rxBitsLength); % BER calculation txSymLength = length(TxBits); rxSymLength = length(RxBits); minSymLength = min(txSymLength,rxSymLength); if minSymLength > 0 bitErrors = sum(xor(TxBits(1:minSymLength),RxBits(1:minSymLength))); totalBits = minSymLength; % Bit errors found in channel errorsAdaptive(chIdx,2) = errorsAdaptive(chIdx,2) + bitErrors; % Total bits transmitted in channel errorsAdaptive(chIdx,4) = errorsAdaptive(chIdx,4) + totalBits; end if ~phyRx.DecodedBasebandData.IsValid || bitErrors % Packet errors found in channel errorsAdaptive(chIdx, 3) = errorsAdaptive(chIdx, 3) + 1; end else % Packet errors found in channel errorsAdaptive(chIdx, 3) = errorsAdaptive(chIdx, 3) + 1; end hopIndex(hopIdx) = channelIndex; hopIdx = hopIdx + 1; % Plot spectrum spectrumAnalyzerAdaptive(btWaveform + wlanWaveform(1:numel(btWaveform))); pause(0.01); end

На предыдущем графике можно наблюдать, что передача пакетов Bluetooth не перекрывается с сигналом WLAN. AFH исключает каналы, являющиеся источниками помех WLAN, и переназначает передачу пакетов Bluetooth по каналам с относительно меньшими помехами.
% Plot selected channel index per slot figAdaptive = figure('Name','Adaptive Frequency Hopping'); axisAdaptive = axes(figAdaptive); xlabel(axisAdaptive,'Slot'); ylabel(axisAdaptive,'Channel Index'); title(axisAdaptive,'Bluetooth Adaptive Frequency Hopping'); ylim(axisAdaptive,[0 numBtChannels+3]); hold on; plot(axisAdaptive,0:slotValue:numSlots-slotValue,hopIndex,'-o');

На этом графике отображается выбранный индекс канала для каждого интервала передачи или приема с использованием AFH. Для минимизации ошибок пакетов и битов в беспроводном канале AFH выбирает только используемые каналы для передачи или приема сигналов Bluetooth BR/EDR.
Вычислите PER и BER сигналов Bluetooth BR/EDR с помощью AFH.
% BER per channel calculation errorsAdaptive(:,5) = errorsAdaptive(:,2)./errorsAdaptive(:,4); errorsAdaptive(:,5) = fillmissing(errorsAdaptive(:,5),'constant',0); ber = nonzeros(errorsAdaptive(:,5)); if ~isempty(ber) berAdaptive = mean(ber); end % PER calculation packetErrorsAdaptive = sum(errorsAdaptive(:,3)); perAdaptive = packetErrorsAdaptive/totalTransmittedPackets; fprintf('PER of Bluetooth BR/EDR waveforms using adaptive frequency hopping: %.4f\n',perAdaptive);
PER of Bluetooth BR/EDR waveforms using adaptive frequency hopping: 0.0625
fprintf('BER of Bluetooth BR/EDR waveforms using adaptive frequency hopping: %.4f\n',berAdaptive);BER of Bluetooth BR/EDR waveforms using adaptive frequency hopping: 0.0020
% Restore previous setting of random number generation
rng(sprev);Значения PER и BER сигналов BR/EDR Bluetooth меньше при AFH по сравнению со скачкообразной перестройкой базовой частоты.
В этом примере моделируется сквозная цепь передатчик-приемник для изучения того, как AFH уменьшает помехи между сигналами Bluetooth BR/EDR и WLAN. Результаты моделирования подтверждают, что PER и BER сигналов Bluetooth BR/EDR с помехами WLAN меньше при AFH по сравнению со скачкообразной перестройкой базовой частоты.
В примере используется эта функция.
bluetoothFrequencyHopИндекс канала BR/EDR Bluetooth для скачкообразной перестройки частоты
В примере используются следующие помощники:
helperBluetoothPHY: Настройка и моделирование Bluetooth PHY
helperBluetoothChannel: Настройка и моделирование беспроводного канала
helperBluetoothGenerateWLANWaveform: Генерирует сигнал WLAN, добавляемый как помеха к сигналам Bluetooth
helperBluetoothWLANDSSSspectrumMask: Вычисляет мощность помех соседних каналов с использованием масок спектра WLAN 802.11b (DSSS)
helperBluetoothPacketDuration: Вычисление длительности пакета Bluetooth
Группа специальных интересов Bluetooth (SIG). «Спецификация ядра Bluetooth» Версия 5.2.https ://www.bluetooth.com.