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

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

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

Сконфигурируйте Bluetooth Piconet

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

Сконфигурируйте беспроводной канал и интерференцию WLAN

Сконфигурируйте беспроводной канал при помощи 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. Установите роль узлов как Ведущее устройство или Ведомое устройство. Чтобы создать 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 для скачкообразного движения частоты

Пример использует этих помощников:

Выбранная библиография

  1. Специальная группа (SIG) Bluetooth. "Спецификация Ядра Bluetooth". Версия 5.2. https://www.bluetooth.com.

  2. IEEE® Standard 802.15.2™. "Сосуществование Беспроводных Персональных Сетей области с Другими Беспроводными устройствами, Действующими в Нелицензированных Диапазонах частот". Методические рекомендации IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретные требования; Общество эпохи компьютеризации IEEE.

Похожие темы