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

В этом примере показано, как смоделировать полнодуплексную коммуникацию в Bluetooth® piconet имеющий интерференцию WLAN и поддерживающий функциональность адаптивного скачкообразного движения частоты (AFH), пользующуюся Библиотекой Communications Toolbox™ для Протокола Bluetooth. Узлы Bluetooth, действующие с физическим уровнем базовой скорости (BR) (PHY), связываются друг с другом одновременно путем передачи пакетов данных (по асинхронному с установлением соединения (ACL) логический транспорт) и речевых пакетов (по синхронному с установлением соединения (SCO) логический транспорт) как случайные биты. Поддерживаемые данные и речевые пакеты:

  • Пакетные типы данных: DM1, DH1, DM3, DH3, DM5 и DH5

  • Речевые пакетные типы: HV1, HV2 и HV3

Этот пример включает AFH путем классификации каналов как хорошие или плохие на основе пакетного коэффициента ошибок (PER) каждого канала. Можно добавить собственный алгоритм классификации, чтобы анализировать результаты симуляции. Результаты симуляции показывают график пакетного коэффициента ошибок (PER) для каждого узла 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.

% 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 объекта помощника. Можно установить EbNo значение для канала AWGN. Чтобы сгенерировать WLAN сигнализируют об интерференции, используют helperBluetoothGenerateWLANWaveform функцию помощника. Задайте источники интерференции WLAN при помощи WLANInterference параметр. Используйте одну из этих опций, чтобы задать источник интерференции WLAN.

  • 'Generated': Чтобы добавить сигнал WLAN Toolbox™, выберите эту опцию. Выполните шаги, которые, как показывают в дальнейшем исследовании, добавили сигнал из WLAN Toolbox™.

  • '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, когда хороший или плохой при помощи helperBluetoothChannelClassification возражают только когда SequenceType 'Connection adaptive'. Пример классифицирует каналы Bluetooth при помощи этих параметров.

  • PERThreshold: Порог PER

  • ClassificationInterval: Периодичность (в пазах) классификации каналов

  • RxStatusCount: Максимальное количество полученного пакетного состояния обеспечено для каждого канала

  • MinRxCountToClassify: Минимальное количество полученного пакетного состояния для каждого канала, чтобы классифицировать канал как хороший или плохой

  • PreferredMinimumGoodChannels: Предпочтительное количество хороших каналов, требуемых связываться между Ведущим устройством и Ведомыми устройствами

Можно добавить собственный алгоритм классификации путем настройки classifyChannels метода объекта helperBluetoothChannelClassification.

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 Piconet

Задайте общее количество узлов Bluetooth в piconet. Установите роль узлов как Ведущее устройство или Ведомое устройство. Чтобы создать Bluetooth piconet из сконфигурированных параметров, используйте helperBluetoothCreatePiconet функцию помощника.

% 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 piconet использование сконфигурированных параметров. Визуализируйте график PER каждого узла Bluetooth в piconet. Визуализируйте степень спектральная плотность форм волны 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 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×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 piconet с интерференцией WLAN. Пример использует AFH, чтобы смягчить интерференцию WLAN путем классификации каналов как хорошие или плохие на основе значения PER. Эффективность полнодуплексной коммуникации анализируется путем визуализации удара интерференции WLAN на каждом узле Bluetooth.

Дальнейшее исследование

Чтобы добавить сигнал WLAN использование функций WLAN Toolbox™, установите значение wlanInterference к 'Сгенерированному'. Используйте этот код, чтобы добавить сигнал WLAN.

Добавьте, что сигнал WLAN сгенерировал использование функций WLAN Toolbox™ как статическая интерференция сигнала к Bluetooth. Чтобы включить это, установите wlanInterference значение как 'Сгенерированное', добавляет ваш пользовательский код генерации сигнала в функции. Используйте этот отрывок примера кода в функциях использующего генерации сигнала WLAN WLAN Toolbox™.

% % 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: Выбирает индекс канала Bluetooth BR/EDR для скачкообразного движения частоты

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

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

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

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

Похожие темы