Этот пример представляет сквозную симуляцию, чтобы продемонстрировать, как адаптивное скачкообразное изменение частоты (AFH) изменяет последовательность скачкообразного изменения частоты в Bluetooth ® basic rate (BR) и улучшенной скорости передачи данных (EDR) физическом слое (PHY) и минимизирует влияние интерференции WLAN, используя библиотеку Communications Toolbox™ для Bluetooth В отличие от основного скачкообразного изменения частоты, AFH исключает каналы Bluetooth, которые являются источниками интерференции. Путем исключения этих каналов из списка доступных каналов AFH переназначивает передачу и прием пакетов в каналах с относительно меньшей помехой. Результаты симуляции в примере показывают, что значения частоты ошибок пакета (PER) и частоты битовой ошибки (BER) симуляции Bluetooth PHY с интерференцией WLAN меньше с AFH по сравнению с основной скачкообразной перестройкой частоты. Кроме того, пример показывает выбранный индекс канала на паз для основной скачкообразной перестройки частоты и AFH. Спектральную плотность степени сигналов Bluetooth BR/EDR с интерференцией WLAN визуализируют с помощью анализатора спектра.
Стандарт Bluetooth задает два режима PHY: BR и EDR. Библиотека Communications Toolbox™ для пакета поддержки протокола Bluetooth позволяет моделировать ссылки системы связи Bluetooth BR/EDR, как указано в спецификации ядра Bluetooth [1].
Режим Bluetooth BR является обязательным, в то время как режим EDR является необязательным. Радио Bluetooth BR/EDR реализует метод 1600 скачков частоты/с с расширением спектра (FHSS). Радио переходит псевдослучайным способом на 79 назначенных каналах Bluetooth. Каждый канал Bluetooth имеет полосу пропускания 1 МГц. Каждый канал центрирован на (2402 + k) МГц, где k = 0, 1,..., 78. Метод модуляции полезных нагрузок BR и EDR режима является Гауссовой манипуляцией частотой (GFSK) и дифференциальной фазой манипуляцией (DPSK), соответственно. Скорость передачи данных составляет 1 MSymbols/s. Радио Bluetooth BR/EDR использует дуплекс с делением по времени (TDD), в котором передача данных происходит в одном направлении за один раз. Коробка передач чередуется в двух направлениях, один за другим.
Дополнительные сведения о радио Bluetooth BR/EDR и стеке протоколов см. в разделе Стек протоколов Bluetooth. Для получения дополнительной информации о структурах пакета Bluetooth BR/EDR, смотрите Bluetooth Packet Structure.
Цель использования 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.
Применить смещение частоты на основе выбранного индекса канала.
Приемник цепи
Выберите индекс канала для приема.
Применить смещение частоты на основе выбранного индекса канала.
Декодируйте сигнал Bluetooth BR/EDR, чтобы получить выходные биты.
Беспроводной канал
Добавьте помехи 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';
Сконфигурируйте Bluetooth PHY
Используйте объект helperBluetoothPHY helper, чтобы смоделировать передачу и прием сигнала 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 от WLAN Toolbox™, выберите эту опцию.
«BasebandFile»: Добавить сигнал WLAN из файла baseband (.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; канал. EbNo = 22; % Ratio of energy per bit (Eb) to the spectral noise density (No) in dB канал. СЭР =-20; % Signal to interference ratio in dB if ~ strcmpi ( wlanInterferenceSource,'None') % Generate the WLAN waveform wlan Waveform = helper Bluetooth Generate WLANW aveform (wlan Interference Source, wlan BBF ilename); % Add the WLAN interference to Bluetooth channel addWLANWaveform (канал, wlanWaveform); end
Область Setup
Инициализируйте параметры, чтобы выполнить сквозную симуляцию 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 сигналов Bluetooth BR/EDR меньше при AFH по сравнению с основной скачкообразной перестройкой частоты.
Этот пример имитирует сквозную цепь передатчика-приемника, чтобы изучить, как AFH уменьшает помехи между сигналами Bluetooth BR/EDR и WLAN. Результаты симуляции проверяют, что PER и BER сигналов Bluetooth BR/EDR с интерференцией WLAN меньше с AFH по сравнению с основной скачкообразной перестройкой частоты.
В примере используется эта функция.
bluetoothFrequencyHop
: Индекс канала BR/EDR Bluetooth для скачкообразного изменения частоты
В примере используются следующие помощники:
helperBluetoothPHY: настройте и симулируйте Bluetooth PHY
helperBluetoothChannel: Настройка и моделирование беспроводного канала
helperBluetoothGenerateWLANWaveform: Генерирует сигнал WLAN, который будет добавлен как помеха для сигналов Bluetooth
helperBluetoothWLANDSSSpectrumMask: вычисляет степень помех смежного канала с помощью маски спектра WLAN 802.11b (DSSS)
helperBluetoothPacketDuration: Вычисляет длительность пакета Bluetooth
Bluetooth Special Interest Group (SIG). Спецификация ядра Bluetooth версии 5.2.https ://www.bluetooth.com.