В этом примере показано, как моделировать полнодуплексную связь в пикосети Bluetooth ®, имеющей помехи WLAN, и поддерживать функции адаптивной скачкообразной перестройки частоты (AFH) с использованием библиотеки Communications Toolbox™ Library for the Bluetooth Protocol. Узлы Bluetooth, работающие на физическом уровне (PHY) базовой скорости (BR), взаимодействуют друг с другом одновременно посредством передачи пакетов данных (через логический транспорт, ориентированный на асинхронное соединение (ACL)) и голосовых пакетов (через логический транспорт, ориентированный на синхронное соединение (SCO)) в виде случайных битов. Поддерживаемые пакеты данных и голосовые пакеты:
Типы пакетов данных: DM1, DH1, DM3, DH3, DM5 и DH5
Типы голосовых пакетов: HV1, HV2 и HV3
Этот пример обеспечивает возможность AFH путем классификации каналов как хороших или плохих на основе частоты ошибок пакетов (PER) каждого канала. Для анализа результатов моделирования можно добавить собственный алгоритм классификации. Результаты моделирования показывают график частоты ошибок пакетов (PER) для каждого узла Bluetooth. Спектральная плотность мощности сигналов Bluetooth с интерференцией WLAN визуализируется с помощью анализатора спектра.
Технология Bluetooth работает в промышленной, научной и медицинской (ISM) полосе 2,4 ГГц и делится ею с другими беспроводными технологиями, такими как ZigBee и WLAN. Спецификация ядра Bluetooth [1], определенная Специальной группой по интересам (SIG), определяет два режима PHY: обязательный 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 и WLAN часто работают в одном и том же физическом сценарии и в одном и том же устройстве. Поэтому передачи Bluetooth и WLAN могут создавать помехи друг другу, тем самым влияя на производительность и надежность обеих сетей. Для уменьшения этих помех группа задач IEEE 802.15.2 [2] рекомендует использовать метод AFH. Изучение AFH и сосуществования Bluetooth с WLAN см. в разделе Сосуществование Bluetooth-WLAN.
Дополнительные сведения о радио Bluetooth BR/EDR и стеке протоколов см. в разделе Стек протоколов Bluetooth. Дополнительные сведения о структурах пакетов Bluetooth BR/EDR см. в разделе Структура пакетов Bluetooth.
Система Bluetooth поддерживает двухточечные или многоточечные соединения, называемые пикосетями. Каждая пикосеть состоит из узла в роли Master, а другие узлы в роли Slave. Ведущий и подчиненный устройства обмениваются данными по нескольким логическим транспортам. Эти логические переносы:
SCO: Master и Slave обмениваются пакетами SCO с регулярными интервалами в зарезервированных слотах. Узлы Bluetooth используют логический транспорт SCO для обмена периодическими данными, такими как потоковая передача звука. Этот логический транспорт не поддерживает повторные передачи.
Расширенное синхронное соединение (eSCO): узлы Bluetooth используют eSCO для обмена периодическими данными, такими как потоковая передача звука. Этот логический транспорт поддерживает повторные передачи.
ACL: узлы Bluetooth используют ACL для обмена асинхронными данными, такими как протокол передачи файлов (FTP). В течение каждого интервала опроса ведущий опрашивает логический транспорт ACL ведомого устройства, по крайней мере, один раз.
Active slave broadcast (ASB): узлы Bluetooth используют логический транспорт ASB для отправки сообщений от ведущего устройства всем ведомым устройствам в пикосети. Этот логический транспорт поддерживает однонаправленный трафик без подтверждений.
Ведомое вещание без установления соединения (CSB): главный узел использует логический транспорт CSB для передачи данных широковещания профиля нескольким ведомым устройствам. Этот логический транспорт поддерживает однонаправленный трафик без подтверждений.
В этом примере поддерживается логический перенос ACL и SCO между ведущим устройством и ведомыми устройствами путем рассмотрения данных как случайных битов 0 и 1. На этом рисунке показана связь между Ведущим и тремя Ведомыми Устройствами в пикосети через логические транспорты ACL и SCO.

Bluetooth использует зарезервированные временные интервалы для связи между узлами. Продолжительность каждого слота составляет 625 микросекунд. Главный узел инициирует передачу в четных временных интервалах и расширяет передачу до нечетных временных интервалов при передаче пакета с несколькими слотами. Подчиненный узел инициирует передачу в нечетных временных интервалах и расширяет передачу до четных временных интервалов при передаче пакета с несколькими слотами.
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed commSupportPackageCheck('BLUETOOTH');
В этом разделе показано, как настроить параметры моделирования для пикосети Bluetooth, беспроводного канала и помех WLAN.
NumSlaves параметр указывает количество ведомых элементов в пикосети Bluetooth. LinkTraffic параметр определяет тип трафика по логическим переносам Bluetooth между ведущим и соответствующим ведомым. Эта таблица сопоставляется LinkTraffic к различным логическим переносам.

Если ведущий связывается с несколькими подчиненными устройствами, LinkTraffic должен быть вектором.
SequenceType параметр определяет тип алгоритма скачкообразной перестройки частоты, используемого узлом Bluetooth. При установке SequenceType кому 'Connection adaptive'каналы Bluetooth классифицируются как хорошие или плохие периодически на основе PER каждого канала Bluetooth. Для классификации каналов Bluetooth можно использовать функцию объекта classifyChannel.
% Set the simulation time in microseconds simulationTime = 3*1e6; % Enable or disable the visualization in the example enableVisualization = true; simulationParameters = struct; % Configure the number of Slaves in the piconet simulationParameters.NumSlaves =1; % Specify the positions of Bluetooth nodes in the form of n-by-3 array. % where n represents the number of nodes in the piconet. Each row specifies % the cartesian coordinates of a nodes starting from Master and followed by % Slaves. simulationParameters.NodePositions = [10 0 0; 20 0 0]; % Configure the logical links between the Master and Slaves % Each element represents the logical link between the Master and the % respective Slave. If the Master is connected to multiple Slaves, this % value must be a row vector. simulationParameters.LinkTraffic = 1; % Configure the frequency hopping sequence as 'Connection basic' or % 'Connection adaptive' simulationParameters.SequenceType =
'Connection adaptive'; % To enable an ACL logical transport, set linkTraffic to 1 or 3. Specify % the ACL packet type as 'DM1', 'DH1', 'DM3', 'DH3', 'DM5', or 'DH5'. simulationParameters.ACLPacketType =
'DM1'; % To enable a SCO logical transport, set linkTraffic to 2 or 3. Specify the % SCO packet type as 'HV1', 'HV2', or 'HV3' for the respective Slave that % has SCO link traffic. Here, 1 represents the Slave number, and 'HV3' % represents the corresponding SCO packet type used by Slave 1. simulationParameters.SCOPacketType = {1, 'HV3'};
Настройте беспроводной канал с помощью объекта helperBluetoothChannel helper. Можно установить EbNo значение для канала AWGN. Для генерации помех сигнала WLAN используйте функцию helperBluetoothGenerateWLANWaveform helper. Укажите источники помех WLAN с помощью WLANInterference параметр. Одна из этих опций используется для указания источника помех WLAN.
'Generated': Чтобы добавить сигнал Toolbox™ WLAN, выберите этот параметр. Выполните шаги, показанные в дальнейшем исследовании, чтобы добавить сигнал от Toolbox™ WLAN.
'BasebandFile': Добавление сигнала WLAN из файла основной полосы частот (.bb), выберите эту опцию. Можно указать имя файла с помощью WLANBBFilename входной аргумент. Если не указать .bb файл, в примере используется значение по умолчанию .bb файл, 'WLANNonHTDSSS.bb', для добавления сигнала WLAN.
'None' параметр означает, что сигнал WLAN не добавляется. AWGN присутствует на протяжении всего моделирования.
% Configure wireless channel parameters simulationParameters.EbNo = 22; % Ratio of energy per bit (Eb) to spectral noise density (No) in dB % Configure the WLAN interference % Specify the WLAN interference as 'Generated', 'BasebandFile', or 'None'. % To use the 'wlanBBFilename' option, set wlanInterference to % 'BasebandFile'. simulationParameters.WLANInterference ='BasebandFile'; simulationParameters.WLANBBFilename = 'WLANNonHTDSSS.bb'; % Signal to interference ratio in dB simulationParameters.SIR = [-15 -16];
Классифицируйте каналы Bluetooth как хорошие или плохие с помощью объекта helperBluetoothStartClassification только в том случае, если SequenceType является 'Connection adaptive'. Пример классифицирует каналы Bluetooth с помощью этих параметров.
PERThreshold: пороговое значение PER
ClassificationIntervalПериодичность (в слотах) классификации каналов
RxStatusCount: Максимальное количество принятых пакетов, состояние которых поддерживается для каждого канала
MinRxCountToClassify: Минимальное количество принятых пакетов состояния для каждого канала, чтобы классифицировать канал как хороший или плохой
PreferredMinimumGoodChannels:: Предпочтительное количество хороших каналов, необходимых для связи между хозяином и рабами
Вы можете добавить свой собственный алгоритм классификации, настроив метод classifyedChannel объекта helperBluetoothStartClassification.
simulationParameters.PERThreshold =50; % Packet error rate simulationParameters.ClassificationInterval =
3000; % In slots simulationParameters.RxStatusCount =
10; % Maximum Rx packets status simulationParameters.MinRxCountToClassify =
4; % Minimum packets received simulationParameters.PreferredMinimumGoodChannels =
20; % Preferred number of good channels
Укажите общее количество узлов Bluetooth в пикосети. Установите роль узлов «Ведущий» или «Ведомый». Чтобы создать пикосеть Bluetooth из настроенных параметров, используйте функцию helperBluetoothCreatePiconet helper.
% Reset the random number generator rng('default'); % Specify Tx power, in dBm simulationParameters.TxPower = 20; % Specify the Bluetooth node receiver range (in meters) simulationParameters.ReceiverRange = 40; % Set the total number of nodes in the piconet (one Master and multiple % Slaves) numNodes = simulationParameters.NumSlaves + 1; % Create a Bluetooth piconet btNodes = helperBluetoothCreatePiconet(simulationParameters);
Чтобы визуализировать формы сигналов Bluetooth, создайте dsp.SpectrumAnalyzer System™ объект.
% View the Bluetooth waveforms using the spectrum analyzer spectrumAnalyzer = dsp.SpectrumAnalyzer(... 'Name','Bluetooth Full Duplex Communication', ... 'ViewType','Spectrum and spectrogram', ... 'TimeResolutionSource','Property', ... 'TimeResolution',0.0005, ... 'SampleRate',btNodes{1}.PHY.SamplesPerSymbol*1e6, ... 'TimeSpanSource','Property', ... 'TimeSpan',0.05, ... 'FrequencyResolutionMethod','WindowLength', ... 'WindowLength',512, ... 'AxesLayout','Horizontal', ... 'FrequencyOffset',2441*1e6, ... 'ColorLimits',[-20 15]);
Моделирование пикосети Bluetooth с использованием настроенных параметров. Визуализируйте график PER каждого узла Bluetooth в пикосети. Визуализация спектральной плотности мощности сигналов Bluetooth с помощью dsp.SpectrumAnalyzer Системный объект. Можно также вычислить статистику уровня основной полосы частот (общее количество переданных пакетов, общее количество принятых пакетов и общее количество отброшенных пакетов) и статистику классификации каналов в каждом узле Bluetooth. Если для типа последовательности установлено значение 'Connection adaptive', tузел Bluetooth обновляет статистику классификации каналов.
% Current simulation time in microseconds curTime = 0; % Elapsed time in microseconds elapsedTime = 0; % Next invoke times of all of the nodes in microseconds nextInvokeTimes = zeros(1, numNodes); if enableVisualization % Plot the PER perFigure = figure("Name","PER of Each Bluetooth Node",'Tag','BluetoothPERPlot'); perAxes = axes(perFigure); % Add annotations to the figure ylim(perAxes, [0 1]); xlabel(perAxes, 'Simulation Time (in Microseconds)'); ylabel(perAxes, 'PER'); title(perAxes, 'PER of Each Bluetooth Node'); % Plot the PER line for each Bluetooth node [perPlots, legendStr] = deal(cell(1, numNodes)); for plotIdx = 1:numNodes hold on perPlots{plotIdx} = plot(perAxes, curTime, 0); if plotIdx == 1 legendStr{1} = ['\color[rgb]{' num2str(perPlots{plotIdx}.Color) '} Master']; else legendStr{plotIdx} = ['\color[rgb]{' num2str(perPlots{plotIdx}.Color) '} Slave-' num2str(plotIdx-1)]; end end % Add a legend to the figure legend(perAxes, legendStr,'Location','northeastoutside','Box','on'); if ~strcmpi(simulationParameters.WLANInterference, 'None') % Generate the WLAN waveform for visualization wlanWaveform = helperBluetoothGenerateWLANWaveform(... simulationParameters.WLANInterference, simulationParameters.WLANBBFilename); end end % Run the simulation while(curTime < simulationTime) % Simulate the Bluetooth nodes for nodeIdx = 1:numNodes % Push the data into the node pushData(btNodes{nodeIdx}, ... simulationParameters.ACLPacketType, simulationParameters.SCOPacketType); % Run the Bluetooth node instance nextInvokeTimes(nodeIdx) = runNode(btNodes{nodeIdx}, elapsedTime); if enableVisualization if ~isempty(findobj('Tag', 'BluetoothPERPlot')) % Update and plot the PER perPlots{nodeIdx}.XData = [perPlots{nodeIdx}.XData curTime]; if isempty(btNodes{nodeIdx}.PHY.PER) per = 0; else per = btNodes{nodeIdx}.PHY.PER; end perPlots{nodeIdx}.YData = [perPlots{nodeIdx}.YData per]; end end end % Update the current simulation time curTime = curTime + elapsedTime; % Distribute any transmitted packets from each node into the receiving % buffers of the other nodes [isPacketDistributed, txBuffer] = helperBluetoothDistributePackets(btNodes); % Update visualization if enableVisualization for txIdx = 1:numel(txBuffer) channelWaveform = txBuffer{txIdx}.Waveform(1:txBuffer{txIdx}.NumSamples); if ~strcmpi(simulationParameters.WLANInterference, 'None') % Add WLAN interference to the channel waveform channelWaveform = channelWaveform + wlanWaveform(1:txBuffer{txIdx}.NumSamples); end % Plot the Bluetooth waveform spectrumAnalyzer(channelWaveform); end end % If packets are distributed to the receiver nodes, run the nodes to % check the packet reception buffer. if isPacketDistributed elapsedTime = 0; % Advance the simulation time to the next event at a node else elapsedTime = min(nextInvokeTimes(nextInvokeTimes ~= -1)); end end
ans = 1x79 logical array
0 1 1 0 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
![Figure PER of Each Bluetooth Node contains an axes. The axes with title PER of Each Bluetooth Node contains 2 objects of type line. These objects represent \color[rgb]{0 0.447 0.741} Master, \color[rgb]{0.85 0.325 0.098} Slave-1.](../../examples/bluetooth/win64/BluetoothFullDuplexExample_03.png)
release(spectrumAnalyzer);

Предыдущий график анализатора спектра показывает спектр сигнала Bluetooth, искаженного помехами WLAN (в частотной области) и прошедшего через канал AWGN. На графике справа показано наложение пакетов Bluetooth на мешающий сигнал WLAN.
График «PER каждого узла Bluetooth» показывает PER каждого узла в пикосети Bluetooth относительно времени моделирования.
Для просмотра статистики уровня основной полосы для каждого узла Bluetooth проверьте statisticsAtEachNode переменная. Для просмотра статистики классификации каналов для каждой пары Master-Slave проверьте classificationStats переменная. Статистика классификации каналов действительна, когда sequenceType имеет значение 'Connection adaptive'. Получите статистику уровня основной полосы частот и классификации каналов каждого узла Bluetooth в пикосети.
% Get the baseband layer and channel classification statistics of each Bluetooth node in the piconet
[statisticsAtEachNode, classificationStats] = helperBluetoothFullDuplexStatistics(btNodes)statisticsAtEachNode=2×19 table
TotalRxPackets TotalTxPackets TxACLPackets TxACLOneSlotPackets TxACLThreeSlotPackets TxACLFiveSlotPackets RetransmittedACLPackets RxSlotsWithNoPacket TxSCOPackets RxACLPackets RxACLOneSlotPackets RxACLThreeSlotPackets RxACLFiveSlotPackets RxSCOPackets TotalRxFailedPackets ACKedACLPackets ACKedSCOPackets DroppedPackets DroppedLMPMessages
______________ ______________ ____________ ___________________ _____________________ ____________________ _______________________ ___________________ ____________ ____________ ___________________ _____________________ ____________________ ____________ ____________________ _______________ _______________ ______________ __________________
Master 1435 2401 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 965 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 157 {7x2 double} {7x2 double} 254 0
Slave1 2379 1444 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 0 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 384 {7x2 double} {7x2 double} 551 0
classificationStats=1×3 table
LTAddress ClassificationCount ChannelMap
_________ ___________________ _____________
1 1 {1x79 double}
В этом примере можно сконфигурировать и смоделировать полнодуплексную передачу данных и голосовую связь в пикосети Bluetooth с помехами WLAN. В этом примере AFH используется для уменьшения помех WLAN путем классификации каналов как хороших или плохих на основе значения PER. Производительность полнодуплексной связи анализируется путем визуализации влияния помех WLAN на каждый узел Bluetooth.
Для добавления сигнала WLAN с использованием функций Toolbox™ WLAN установите значение wlanInterference равным Generated. Этот код используется для добавления сигнала WLAN.
Добавьте в Bluetooth сигнал WLAN, генерируемый с использованием функций Toolbox™ WLAN, как помехи статического сигнала. Чтобы включить это, установите wlanInterference значение «Сгенерировано», добавьте пользовательский код генерации сигнала в функцию. Используйте этот образец фрагмента кода при генерации сигнала WLAN с использованием функций Toolbox™ WLAN.
% % WLAN waveform to interfere with Bluetooth waveforms can be % % modified by using the features of the WLAN Toolbox(TM). % psduLength = 1000; % % % Create configuration object for WLAN waveform (802.11b) % cfgNHT = wlanNonHTConfig('Modulation','DSSS', ... % 'PSDULength', psduLength); % % % Create random PSDU % psdu = randi([0 1], cfgNHT.PSDULength*8, 1); % % % Generate WLAN waveform % wlanWaveform = wlanWaveformGenerator(psdu, cfgNHT);
Пользовательский код генерации сигнала можно добавить в функцию helperBluetoothGenerateWLANWaveform. Можно также записать соответствующие маски спектра WLAN сигнала и зарегистрироваться в WLANSpectrum свойство helperBluetoothChannel в качестве указателя функции.
В примере используется следующий объект:
bluetoothFrequencyHop: Выбор индекса канала BR/EDR Bluetooth для скачкообразной перестройки частоты
В примере используются следующие помощники:
helperBluetoothFureDuplexNode: Настраивает и моделирует узел Bluetooth
helperBluetoothBaseband: Настраивает и имитирует уровень основной полосы Bluetooth
helperBluetoothLogicalTransports: Настройка логических переносов между узлами Bluetooth
helperBluetoothSlotTimer: Управляет часами Bluetooth и синхронизацией слотов
helperBluetoothPHY: Настройка и моделирование уровня Bluetooth PHY
helperBluetoothChannel: Настройка и моделирование беспроводного канала Bluetooth
helperBluetoothGenerateWLANWaveform: Генерирует сигнал WLAN, добавляемый как помеха к сигналам Bluetooth
helperBluetoothWLANDSSSspectrumMask: Вычисляет мощность помех соседних каналов с использованием масок спектра WLAN 802.11b (DSSS)
helperBluetoothCreatePiconet: Создание пикосети Bluetooth с использованием узлов Bluetooth
helperBluetoothFureDuplexStatistics: Возвращает статистику каждого узла Bluetooth в пикосети Bluetooth
helperBluetoothQueue: Создание объекта для функциональности очереди Bluetooth
Группа специальных интересов Bluetooth (SIG). «Спецификация ядра Bluetooth». Версия 5.2. https://www.bluetooth.com.
Стандартные 802.15.2™ IEEE ®. «Сосуществование беспроводных персональных сетей с другими беспроводными устройствами, работающими в нелицензированных диапазонах частот». IEEE Рекомендуемая практика в области информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования; Компьютерное общество IEEE.