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

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

  • Типы пакета данных: 1 немецкая марка, DH1, 3 немецких марки, DH3, 5 немецких марок, и DH5

  • Типы голосовых пакетов: HV1, HV2 и HV3

Этот пример включает AFH путем классификации каналов как хороших или плохих на основе частоты ошибок пакета (PER) каждого канала. Можно добавить свой собственный алгоритм классификации, чтобы проанализировать результаты симуляции. На результаты симуляции показан график частоты ошибок пакета (PER) для каждого узла Bluetooth. Спектральная плотность степени сигналов Bluetooth с интерференцией WLAN визуализируется с помощью анализатора спектра.

Спецификации Bluetooth

Технология Bluetooth работает в промышленных научных и медицинских полосах с частотой 2,4 ГГц и разделяет ее с другими беспроводными технологиями, такими как ZigBee и WLAN. Спецификация ядра Bluetooth [1], определенная Специальной процентной группой (SIG), задает два режима PHY: обязательный BR и опциональный повышенный уровень передачи данных (EDR). Радио Bluetooth BR/EDR реализует метод 1600 скачков частоты/с с расширением спектра (FHSS). Радио переходит псевдослучайным способом на 79 назначенных каналах Bluetooth. Каждый канал Bluetooth имеет полосу пропускания 1 МГц. Каждый канал центрирован на (2402 + k) МГц, где k = 0, 1,... 78. Метод модуляции полезной нагрузки для режима BR и EDR является Гауссовой манипуляцией со сдвигом частоты (GFSK) и дифференциальной фазы манипуляцией со сдвигом (DPSK), соответственно. Скорость передачи данных составляет 1 MSymbols/s. Радио Bluetooth BR/EDR использует схему дуплекса с разделением по времени (TDD), в которой передача данных происходит в одном направлении за один раз. Коробка передач чередуется в двух направлениях, один за другим.

Радиоприемники Bluetooth и WLAN часто работают в одном и том же физическом сценарии и в одном и том же устройстве. Поэтому передачи Bluetooth и WLAN могут мешать друг другу, что влияет на эффективность и надежность обеих сетей. Чтобы уменьшить это вмешательство, целевая группа [2] IEEE 802.15.2 рекомендует использовать метод AFH. Чтобы изучить AFH и сосуществование Bluetooth с WLAN, см. «Сосуществование Bluetooth-WLAN».

Дополнительные сведения о радио Bluetooth BR/EDR и стеке протоколов см. в разделе Стек протоколов Bluetooth. Для получения дополнительной информации о структурах пакета Bluetooth BR/EDR, смотрите Bluetooth Packet Structure.

Логические транспорты

Система Bluetooth поддерживает соединения «точка-точка» или «точка-много точек», называемые пикосетями. Каждая пикосеть состоит из узла в роли Master, с другими узлами в роли Slave. Master и Slave обмениваются данными через несколько логических переносов. Эти логические транспорты:

  • SCO: Основные и ведомые пакеты 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

The NumSlaves параметр задает количество рабов в пиконете Bluetooth. The LinkTraffic параметр задает тип трафика через логические транспорты Bluetooth между мастером и соответствующим ведомым сервером. Эта таблица отображает LinkTraffic к различным логическим транспортам.

Если Мастер общается с несколькими подчиненными, LinkTraffic должен быть вектором.

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

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

  • 'BasebandFile': Добавление сигнала WLAN из файла основной полосы частот (.bb), выберите эту опцию. Имя файла можно задать с помощью WLANBBFilename входной параметр. Если вы не задаете .bb файл, в примере используется значение по умолчанию .bb файл, 'WLANNonHTDSSS.bb', для добавления сигнала WLAN.

The '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. СЭР = [-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

Укажите общее количество узлов Bluetooth в пиконете. Установите роль узлов как Master или Slave. Чтобы создать пикосеть 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 с помощью функций WLAN Toolbox™, установите значение wlanInterference на 'Generated'. Используйте этот код для добавления сигнала WLAN.

Добавьте сигнал WLAN, сгенерированный с помощью функций WLAN Toolbox™ в качестве статической интерференции сигнала к Bluetooth. Чтобы включить это, установите wlanInterference значение как 'Generated', добавьте пользовательский код генерации сигнала в функцию. Используйте этот пример фрагмента кода в генерации сигнала 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: Выбирает индекс канала BR/EDR Bluetooth для скачкообразного изменения частоты

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

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

  1. Bluetooth Special Interest Group (SIG). Bluetooth Core Спецификации. Версия 5.2. https://www.bluetooth.com.

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

Похожие темы