exponenta event banner

Полнодуплексная передача данных и речи Bluetooth в MATLAB

В этом примере показано, как моделировать полнодуплексную связь в пикосети 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

Технология 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.

Bluetooth Piconet

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'};

Радиоканал и помехи WLAN

Настройте беспроводной канал с помощью объекта 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 в пикосети. Установите роль узлов «Ведущий» или «Ведомый». Чтобы создать пикосеть 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.

release(spectrumAnalyzer);

Figure Bluetooth Full Duplex Communication contains 2 axes and other objects of type uiflowcontainer, uimenu, uitoolbar. Axes 1 contains an object of type line. This object represents Channel 1. Axes 2 contains an object of type image.

Предыдущий график анализатора спектра показывает спектр сигнала 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 для скачкообразной перестройки частоты

В примере используются следующие помощники:

Избранная библиография

  1. Группа специальных интересов Bluetooth (SIG). «Спецификация ядра Bluetooth». Версия 5.2. https://www.bluetooth.com.

  2. Стандартные 802.15.2™ IEEE ®. «Сосуществование беспроводных персональных сетей с другими беспроводными устройствами, работающими в нелицензированных диапазонах частот». IEEE Рекомендуемая практика в области информационных технологий - Телекоммуникации и обмен информацией между системами - Локальные и городские сети - Особые требования; Компьютерное общество IEEE.

Связанные темы