В этом примере показано, как смоделировать полнодуплексную коммуникацию в Bluetooth® piconet имеющий интерференцию WLAN и поддерживающий функциональность адаптивного скачкообразного движения частоты (AFH), пользующуюся Библиотекой Communications Toolbox™ для Протокола Bluetooth и WLAN Toolbox™. Узлы Bluetooth, действующие с физическим уровнем базовой скорости (BR) (PHY), связываются друг с другом одновременно путем передачи пакетов данных (по асинхронному с установлением соединения (ACL) логический транспорт) и речевых пакетов (по синхронному с установлением соединения (SCO) логический транспорт) как случайные биты. Поддерживаемые данные и речевые пакеты:
Пакетные типы данных: DM1, DH1, DM3, DH3, DM5 и DH5
Речевые пакетные типы: HV1, HV2 и HV3
Этот пример включает AFH путем классификации каналов как хорошие или плохие на основе пакетного коэффициента ошибок (PER) каждого канала. Результаты симуляции показывают график частоты ошибок по битам (BER) для каждого узла Bluetooth. Степень спектральная плотность форм волны Bluetooth с интерференцией WLAN визуализируется с помощью спектра анализатор.
Технология Bluetooth действует в промышленной, научной, и медицинской полосе (ISM) на 2,4 ГГц и совместно использует ее с другими беспроводными технологиями как ZigBee и WLAN. Спецификация [1] Ядра Bluetooth, заданная Специальной группой (SIG), задает два режима PHY: обязательный BR и дополнительная расширенная скорость передачи данных (EDR). Радио BR/EDR Bluetooth реализует 1 600 методов частоты, скачкообразно перемещающей спектр распространения (FHSS) транзитных участков/с. Радио скачкообразно двигается псевдослучайным способом на 79 обозначенных каналах Bluetooth. Каждый канал Bluetooth имеет пропускную способность 1 МГц. Каждый канал сосредоточен в (2402 + k) МГц, где k = 0, 1... 78. Метод модуляции на полезной нагрузке для режима BR и EDR является Гауссовым shift-keying частоты (GFSK) и дифференциальным shift-keying фазы (DPSK), соответственно. Скорость в бодах является 1 MSymbols/s. Радио BR/EDR Bluetooth использует схему дуплекса с разделением времени (TDD), в которой передача данных происходит в одном направлении одновременно. Передача чередуется в двух направлениях, один за другим.
Bluetooth и радио WLAN часто действуют в том же физическом сценарии и в том же устройстве. Поэтому Bluetooth и передачи WLAN могут вмешаться друг в друга, таким образом влияя на эффективность и надежность обоих сети. Чтобы смягчить эту интерференцию, Исследовательская группа IEEE 802.15.2 [2] рекомендует использовать метод AFH. Чтобы изучить AFH и сосуществование Bluetooth с WLAN, смотрите Сосуществование Bluetooth-WLAN.
Для получения дополнительной информации о радио BR/EDR Bluetooth и стеке протокола, смотрите Стек Протокола Bluetooth. Для получения дополнительной информации о Bluetooth пакетные структуры BR/EDR, смотрите Пакетную Структуру Bluetooth.
Система Bluetooth поддерживает "точка-точка" или связи точки-к-многоточечному, названные как piconets. Каждый piconet состоит из узла в роли Ведущего устройства с другими узлами в Ведомой роли. Ведущее устройство и Ведомое устройство обмениваются данными по нескольким логическим транспортам. Эти логические транспорты:
SCO: Ведущее устройство и Ведомое устройство обмениваются пакетами SCO равномерно в зарезервированных пазах. Узлы Bluetooth используют логический транспорт SCO, чтобы обмениваться периодическими данными, такими как потоковая передача аудио. Этот логический транспорт не поддерживает повторные передачи.
Расширенный синхронный с установлением соединения (eSCO): узлы Bluetooth используют eSCO, чтобы обмениваться периодическими данными, такими как потоковая передача аудио. Этот логический транспорт поддерживает повторные передачи.
ACL: узлы Bluetooth используют ACL, чтобы обмениваться асинхронными данными, такими как протокол передачи файлов (FTP). Во время каждого интервала опроса Ведущее устройство опрашивает ACL логический транспорт Ведомого устройства, по крайней мере, однажды.
Активная ведомая широковещательная передача (ASB): узлы Bluetooth используют ASB логический транспорт, чтобы отправить сообщения от Ведущего устройства ко всем Ведомым устройствам в piconet. Этот логический транспорт поддерживает однонаправленный трафик без подтверждений.
Ведомая широковещательная передача без установления соединения (CSB): Главный узел использует логический транспорт CSB, чтобы отправить широковещательные данные о профиле в несколько Ведомых устройств. Этот логический транспорт поддерживает однонаправленный трафик без подтверждений.
Этот пример поддерживает ACL и логические транспорты SCO между Ведущим устройством и Ведомыми устройствами путем рассмотрения данных как случайные биты 0s и 1 с. Этот рисунок показывает связь между Ведущим устройством и тремя Ведомыми устройствами в piconet по ACL и логическим транспортам SCO.
Bluetooth использует зарезервированные временные интервалы для связи между узлами. Длительность каждого паза составляет 625 микросекунд. Главный узел инициирует передачу в даже пазах и расширяет передачу к нечетным пазам при передаче пакета мультипаза. Ведомый узел инициирует передачу в нечетных пазах и расширяет передачу к даже пазам при передаче пакета мультипаза.
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed. commSupportPackageCheck('BLUETOOTH');
Этот раздел показывает, как сконфигурировать параметры симуляции для Bluetooth piconet, беспроводного канала и интерференции WLAN.
numSlaves
параметр задает количество Ведомых устройств в Bluetooth piconet. linkTraffic
параметр задает тип трафика по Bluetooth логические транспорты между Ведущим устройством и соответствующим Ведомым устройством. Эта таблица сопоставляет linkTraffic
к различным логическим транспортам.
Если Ведущее устройство связывается с несколькими Ведомыми устройствами, linkTraffic
должен быть вектор.
sequenceType
параметр задает тип алгоритма скачкообразного движения частоты, который использует узел Bluetooth. Когда вы устанавливаете sequenceType
к 'Connection adaptive'
, каналы Bluetooth классифицируются как хорошие или плохие периодически на основе PER каждого канала Bluetooth. Чтобы классифицировать каналы Bluetooth, можно использовать функцию объекта classifyChannels.
% Configure the number of Slaves in the piconet. numSlaves = 1; % 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 vector. linkTraffic = 1; % Configure the frequency hopping sequence as 'Connection basic' or % 'Connection adaptive'. 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'. 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. scoPacketType = {1, 'HV3'};
Сконфигурируйте беспроводной канал при помощи helperBluetoothChannel объекта помощника. Можно установить EbNo
значение для канала AWGN. Чтобы сгенерировать WLAN сигнализируют об интерференции, используют helperBluetoothGenerateWLANWaveform функцию помощника. Задайте источники интерференции WLAN при помощи wlanInterference
параметр. Используйте одну из этих опций, чтобы задать источник интерференции WLAN.
'Generated'
: Чтобы добавить WLAN toolbox™ сигнал, выберите эту опцию.
'BasebandFile'
: Чтобы добавить WLAN сигнализируют из основополосного файла (.bb
), выберите эту опцию. Можно задать имя файла с помощью wlanBBFilename
входной параметр. Если вы не задаете .bb
файл, пример использует .bb
по умолчанию файл,
'WLANNonHTDSSS.bb'
, добавить сигнал WLAN.
'None'
опция подразумевает, что никакой сигнал WLAN не добавляется. AWGN присутствует в течение симуляции.
% Configure wireless channel parameters. 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'. wlanInterference = 'BasebandFile'; wlanBBFilename = 'WLANNonHTDSSS.bb'; % Signal to interference ratio in dB. SIR =-15;
Задайте общее количество узлов Bluetooth в piconet. Установите роль узлов как Ведущее устройство или Ведомое устройство. Чтобы создать Bluetooth piconet из сконфигурированных параметров, используйте helperBluetoothCreatePiconet функцию помощника.
% Reset the random number generator. rng('default'); % Set the total number of nodes in the piconet (one Master and multiple % Slaves). numNodes = numSlaves + 1; % Initialize the cell array to store the Bluetooth nodes. btNodes = cell(1, numNodes); % Specify the distance (in meters) between two Bluetooth nodes. interNodeDistance = 10; % Configure the nodes as Master or Slave. for nodeIdx = 1:numNodes if nodeIdx == 1 % Create a baseband Master instance. basebandInstance = helperBluetoothBaseband('Role','Master'); else % Create a baseband Slave instance. basebandInstance = helperBluetoothBaseband('Role','Slave'); end % Configure the node position. nodePosition = [nodeIdx*interNodeDistance 0 0]; % Create and configure the channel of the node. channelInstance = helperBluetoothChannel('EbNo',EbNo, ... 'SIR',SIR, ... 'NodePosition',nodePosition, ... 'RxRange',numNodes*interNodeDistance); if ~strcmpi(wlanInterference, 'None') % Generate the WLAN waveform. wlanWaveform = helperBluetoothGenerateWLANWaveform(wlanInterference, wlanBBFilename); % Add the WLAN interference to Bluetooth channel. addWLANWaveform(channelInstance, wlanWaveform); end % Create and configure the node with a baseband layer and channel. node = helperBluetoothFullDuplexNode('Baseband',basebandInstance, ... 'Channel',channelInstance); % Update the node ID. node.NodeID = nodeIdx; % Update the node position. node.NodePosition = nodePosition; % Add Bluetooth nodes in the cell array. btNodes{nodeIdx} = node; end % Create a Bluetooth piconet. helperBluetoothCreatePiconet(btNodes, numSlaves, linkTraffic, ... sequenceType, scoPacketType);
Чтобы визуализировать формы волны Bluetooth, создайте dsp.SpectrumAnalyzer
Объект System™.
% View the Bluetooth waveforms using the spectrum analyzer. spectrumAnalyzer = dsp.SpectrumAnalyzer(... 'Name','Bluetooth Full Duplex Communication', ... 'ViewType','Spectrum and spectrogram', ... 'SpectrumType','Power density', ... 'TimeResolutionSource','Property', ... 'TimeResolution',0.0005, ... 'SampleRate',btNodes{1}.PHY.SamplesPerSymbol*1e6, ... 'TimeSpanSource','Property', ... 'TimeSpan',0.05, ... 'FrequencyResolutionMethod','WindowLength', ... 'WindowLength',512, ... 'AxesLayout','Horizontal');
Симулируйте Bluetooth piconet использование сконфигурированных параметров. Визуализируйте график BER каждого узла Bluetooth в piconet. Визуализируйте степень спектральная плотность форм волны Bluetooth при помощи dsp.SpectrumAnalyzer
Системный объект. Можно также вычислить основополосную статистику слоя (общие переданные пакеты, общие полученные пакеты и общие пропущенные пакеты) и статистику классификации каналов в каждом узле Bluetooth. Когда тип последовательности установлен в 'Connection adaptive'
T
он узел Bluetooth обновляет статистику классификации каналов.
% Set the simulation time in seconds. simulationTime = 2; % Convert the simulation time into microseconds. simulationTimeInUS = simulationTime*1e6; % Enable or disable the visualization in the example. enableVisualization = true; % 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); % Transmission flag to specify that the channel is free. txFlag = false; % Buffer to store the transmitted waveforms. txBuffer = cell(1, numNodes); if enableVisualization % Plot the BER. berFigure = figure("Name","BER of Each Bluetooth Node",'Tag','BluetoothBERPlot'); berAxes = axes(berFigure); % Add annotations to the figure. ylim(berAxes, [0 0.3]); xlabel(berAxes, 'Simulation Time (in Microseconds)'); ylabel(berAxes, 'BER'); title(berAxes, 'BER of Each Bluetooth Node'); % Plot the BER line for each Bluetooth node. [berPlots, legendStr] = deal(cell(1, numNodes)); for plotIdx = 1:numNodes hold on berPlots{plotIdx} = plot(berAxes, curTime, 0); if plotIdx == 1 legendStr{1} = ['\color[rgb]{' num2str(berPlots{plotIdx}.Color) '} Master']; else legendStr{plotIdx} = ['\color[rgb]{' num2str(berPlots{plotIdx}.Color) '} Slave-' num2str(plotIdx-1)]; end end % Add a legend to the figure. legend(berAxes, legendStr,'Location','northeastoutside','Box','on'); end % Run the simulation. while(curTime < simulationTimeInUS) if txFlag % When the channel is busy, update the elapsed time as 0. elapsedTime = 0; else % When the channel is free, update the elapsed time as a minimum of % all of the next invoke times. elapsedTime = min(nextInvokeTimes(nextInvokeTimes ~= -1)); end % Simulate the Bluetooth nodes. for nodeIdx = 1:numNodes % Push the data into the node. pushData(btNodes{nodeIdx}, aclPacketType, scoPacketType); % Run the Bluetooth node instance. nextInvokeTimes(nodeIdx) = runNode(btNodes{nodeIdx}, elapsedTime); if enableVisualization if ~isempty(findobj('Tag', 'BluetoothBERPlot')) % Update and plot the BER. berPlots{nodeIdx}.XData = [berPlots{nodeIdx}.XData curTime]; if isempty(btNodes{nodeIdx}.PHY.BER) ber = 0; else ber = btNodes{nodeIdx}.PHY.BER; end berPlots{nodeIdx}.YData = [berPlots{nodeIdx}.YData ber]; end if btNodes{nodeIdx}.VisualizeSpectrum % Plot the Bluetooth waveform. spectrumAnalyzer(btNodes{nodeIdx}.ChannelWaveform); end end end % Reset the transmission buffer index. txBufIdx = 0; % Reset the transmission flag to specify that the channel is free. txFlag = false; % Get the data from all of the nodes to be transmitted. for nodeIdx = 1:numNodes if (btNodes{nodeIdx}.TxBuffer.NumSamples > 0) txBufIdx = txBufIdx + 1; txBuffer{txBufIdx} = btNodes{nodeIdx}.TxBuffer; end end % Pass the transmitted data to the receiving buffers of all of the % nodes. if txBufIdx > 0 for nodeIdx = 1:numNodes btNodes{nodeIdx}.RxBuffer(1:txBufIdx) = txBuffer(1:txBufIdx); btNodes{nodeIdx}.RxBufferIdx = txBufIdx; end % Set the transmission flag to specify the channel is busy (at % least one node is transmitting the waveform). txFlag = true; end % Update the current simulation time. curTime = curTime + elapsedTime; end
Предыдущий спектр график анализатора показывает спектр формы волны Bluetooth, искаженной интерференцией WLAN (в частотном диапазоне), и прошел через канал AWGN. График правой стороны показывает наложение пакетов Bluetooth с вмешательством сигнал WLAN.
График "BER Каждого Узла Bluetooth" показывает BER каждого узла в Bluetooth piconet относительно времени симуляции.
Чтобы видеть основополосную статистику слоя для каждого узла Bluetooth, смотрите statisticsAtEachNode
переменная. Чтобы видеть статистику классификации каналов для каждой пары "Главный-подчиненный", смотрите classificationStats
переменная. Статистические данные классификации каналов допустимы когда sequenceType
установлен в 'Connection adaptive'
. Получите основополосный слой и статистику классификации каналов каждого узла Bluetooth в piconet.
% Get the baseband layer and channel classification statistics of each Bluetooth node in the piconet
[statisticsAtEachNode, classificationStats] = helperBluetoothFullDuplexStatistics(btNodes)
statisticsAtEachNode=2×18 table
TotalRxPackets TotalTxPackets TxACLPackets TxACLOneSlotPackets TxACLThreeSlotPackets TxACLFiveSlotPackets RetransmittedACLPackets TxSCOPackets RxACLPackets RxACLOneSlotPackets RxACLThreeSlotPackets RxACLFiveSlotPackets RxSCOPackets TotalRxFailedPackets ACKedACLPackets ACKedSCOPackets DroppedPackets DroppedLMPMessages
______________ ______________ ____________ ___________________ _____________________ ____________________ _______________________ ____________ ____________ ___________________ _____________________ ____________________ ____________ ____________________ _______________ _______________ ______________ __________________
Master 911 1601 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 195 {7x2 double} {7x2 double} 181 0
Slave1 1581 922 {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} {7x2 double} 321 {7x2 double} {7x2 double} 338 0
classificationStats=1×3 table
LTAddress ClassificationCount ChannelMap
_________ ___________________ _____________
1 1 {1x79 double}
Этот пример позволяет вам сконфигурировать и симулировать полнодуплексные данные и голосовое сообщение в Bluetooth piconet с интерференцией WLAN. Пример использует AFH, чтобы смягчить интерференцию WLAN путем классификации каналов как хорошие или плохие на основе значения PER. Эффективность полнодуплексной коммуникации анализируется путем визуализации удара интерференции WLAN на каждом узле Bluetooth.
Пример использует этот объект:
bluetoothFrequencyHop
: Выбирает индекс канала Bluetooth BR/EDR для скачкообразного движения частоты
Пример использует этих помощников:
helperBluetoothFullDuplexNode: Конфигурирует и симулирует узел Bluetooth
helperBluetoothBaseband: Конфигурирует и симулирует основополосный слой Bluetooth
helperBluetoothLogicalTransports: Конфигурирует логические транспорты между узлами Bluetooth
helperBluetoothSlotTimer: Управляет часами Bluetooth и синхронизацией пазов
helperBluetoothPHY: Конфигурирует и симулирует слой Bluetooth PHY
helperBluetoothChannel: Конфигурирует и симулирует беспроводной канал Bluetooth
helperBluetoothGenerateWLANWaveform: Генерирует форму волны WLAN, которая будет добавлена как интерференция к формам волны Bluetooth
helperBluetoothCreatePiconet: Создает Bluetooth piconet использование узлов Bluetooth
helperBluetoothFullDuplexStatistics: Возвращает статистику каждого узла Bluetooth в Bluetooth piconet
helperBluetoothQueue: Создайте объект для функциональности очереди Bluetooth
Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.2. https://www.bluetooth.com.
IEEE® Standard 802.15.2™. "Сосуществование Беспроводных Персональных Сетей области с Другими Беспроводными устройствами, Действующими в Нелицензированных Диапазонах частот". Методические рекомендации IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретные требования; Общество эпохи компьютеризации IEEE.