Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

BLE と WLAN 信号干渉の共存モデル

この例では、Communications Toolbox™ Library for the Bluetooth Protocol および WLAN Toolbox™ を使用して、Bluetooth® Low Energy (BLE) と WLAN 干渉の共存をシミュレーションする方法を説明します。共存メカニズムは、BLE ネットワークに対する WLAN の干渉を最小限にするために使用されます。この例では、各 WLAN ネットワークの衝突確率と干渉レベルを使用して BLE 信号を破損させます。この例で生成されるシミュレーション結果から、WLAN チャネルの衝突確率と干渉レベルが高い場合、それぞれの BLE チャネルで達成される成功率が低くなることがわかります。

BLE-WLAN 共存メカニズム

同一の免許不要の周波数帯域で動作するワイヤレス ネットワークにはいくつかのタイプがあるため、2 つの異なるネットワークが互いに干渉する可能性があります。この干渉によって、両方のネットワークで送信エラーが発生することがあります。2 つの異なるワイヤレス ネットワークの共存を可能にするための標準化されたアルゴリズムはありません。ただし、IEEE® 802.15.2™ 標準 [ 1 ] では、無線パーソナル エリア ネットワーク (WPAN) と、免許不要の周波数帯域で動作する他の無線デバイスとの共存を可能にする、いくつかの推奨手法が指定されています。

この例では、BLE と WLAN 信号干渉の共存モデルについて説明します。WLAN 通信には 20 MHz 以上の帯域幅が必要ですが、BLE デバイスに必要な帯域幅は 2 MHz のみです。WLAN は搬送波感知多重アクセス/衝突回避方式 (CSMA/CA) と呼ばれるチャネル アクセス メカニズムを使用するのに対し、BLE デバイスは周波数ホッピングを使用します。BLE デバイスと WLAN デバイスの動作周波数がオーバーラップすると、干渉が派生します。干渉を最小限に抑えるために、共存メカニズムを使用します。

共存メカニズムは、大まかに次の 2 つのカテゴリに分類されます [ 1 ]。

  • 連携: このメカニズムには、BLE ネットワークと WLAN ネットワーク間の通信リンクが必要です。これらの 2 つのネットワークは相互に通信できるため、一方のネットワークがチャネルを使用している間、もう一方のネットワークは送信を一時停止します。このメカニズムは、WLAN デバイスと BLE デバイスが同じ物理デバイスに組み込まれている場合に使用されます。

  • 非連携: このメカニズムには、BLE ネットワークと WLAN ネットワーク間の通信リンクは必要ありません。これらの 2 つのネットワークは相互に通信できないため、独自の方法を使用してもう一方のネットワークの干渉を検出します。このメカニズムは、WLAN デバイスと BLE デバイスが同じ物理デバイスに組み込まれていない場合に使用されます。

この例では、BLE デバイスと WLAN の非連携共存メカニズムについて説明します。

BLE と WLAN の共存 - モデルの説明

この節では、この例で干渉を回避するために使用する BLE でのデータ通信、WLAN 干渉、および共存アルゴリズムについて説明します。

BLE での通信: BLE は、リンク層での 2 つの主要な役割であるマスターとスレーブを定義します。マスターはデータ通信を開始し、スレーブはマスターに応答します。この例では、1 つのマスターと複数の (5 個まで構成可能) スレーブ間での BLE パケット交換をモデル化します。BLE [ 2 ] では、接続イベント中にのみ通信が発生します。接続イベントは、マスターとスレーブ間でのデータ パケット交換の (接続間隔と呼ばれる一定の間隔での) 繰り返しシーケンスです。接続イベント内のすべてのパケットは同じデータ チャネルで送信されます。接続イベントが開始するたびに、マスターはそれぞれのスレーブとの通信を開始します。その後、スレーブはデータ パケットでマスターに応答します。送信するデータがない場合、スレーブは空のパケットで応答します。この例では、1 つの接続イベントに対して 1 つのみのトランザクションをモデル化します。新しい接続イベントは新しいデータ チャネルを使用します。適応できるチャネル ホッピングに基づいて、新しいチャネルが選択されます。新しいチャネルの選択時には良好なチャネルであるか不良なチャネルであるかを示すチャネル マップが使用され、チャネル ホッピングでの適応性が示されます。

WLAN トラフィック: WLAN トラフィックは、指定された開始時間と終了時間に応じて、モデルへの追加またはモデルからの削除が動的に行われます。各 WLAN ネットワークは、個別の衝突確率で構成されます。さらに、各 WLAN ネットワークに対して、それぞれのチャネルで BLE 信号を破損させる WLAN 干渉のレベルが設定されます。送信が行われるたびに、0 ~ 1 の乱数が生成されます。生成された乱数が衝突確率より小さい場合、そのチャネルに WLAN 信号を追加することによって、送信する BLE 信号を破損させます。生成される WLAN トラフィックは、関数 wlanTraffic を使用して、IEEE® 802.11ax™ [ 3 ] または 802.11n [ 4 ] に合わせて変更できます。ただし、この例では 20 MHz の WLAN チャネルのみを使用します。

BLE と WLAN の共存: 選択した BLE チャネルが衝突確率に基づく WLAN 干渉によって大きな影響を受ける場合、送信される BLE 信号はそのチャネルの WLAN 信号の干渉を受けます。マスター デバイスは、そのチャネルでのパケットの失敗に基づき、定期的にスレーブ チャネルを '良好なチャネル' または '不良なチャネル' に分類します。チャネル分類情報は、チャネル マップと呼ばれるビットマップの形式で保存されます。このビットマップは、チャネルの分類 ('良好' または '不良' のいずれか) を定義する 1 と 0 の配列です。関数 classifyChannels は、BLE チャネルを分類して生成されるビットマップを保存します。マスターは、各スレーブについて異なるチャネル マップを保持します。更新されたチャネル マップはスレーブに送信されます。チャネル分類の周期性は、helperBLEChannelClassification オブジェクトのプロパティ ClassificationInterval を設定することによって構成されます。アイドル状態の BLE デバイスは、受信した信号のエネルギー検出 (ED) を実行して、すべての '不良なチャネル' についてチャネルが使用中になっている時間を計算します。良好なチャネルの現在の数が良好なチャネルの推奨数を下回る場合、不良なチャネルの分類が再度行われます。この分類は、BadChannelClassificationMethod プロパティが 'Using energy indications' に設定されている場合に、チャネルが使用中になっている時間に基づいて行われます。BadChannelClassificationMethod プロパティが 'Reset all bad channels' に設定されている場合、すべての不良なチャネルがリセットされて良好なチャネルになります。

サポート パッケージのインストールの確認

'Communications Toolbox Library for the Bluetooth Protocol' サポート パッケージがインストールされているかどうかを確認します。

commSupportPackageCheck('BLUETOOTH');

BLE 構成パラメーター

この節では、BLE のマスター デバイスと指定された数のスレーブ デバイスを BLE ネットワークに追加します。マスターは BLE ネットワーク内の各スレーブのチャネル マップを更新する役割を担うため、チャネル分類パラメーターは helperBLEChannelClassification を使用してマスター デバイスで構成されます。helperBLEDeviceModel オブジェクトを使用して、BLE と WLAN との共存をモデル化します。

% The number of BLE Slaves in connection with the Master
slavesCount = 1;

% Create the BLE Master device capable of connecting with "slavesCount"
% number of Slaves
master = helperBLEDeviceModel('Role','Master', ...
    'SlavesCount',slavesCount);

% Initialize the channel classification parameters to classify the BLE
% channels into good or bad channels. PERThreshold:                 Packet
% error rate (PER) threshold value ClassificationInterval:
% Periodicity of channel classification RxStatusCount:
% Maximum number of received packets status MinRxCountToClassify:
% Minimum number of received packets status BadChannelClassificationMethod:
% Method for bad channels classification PreferredMinimumGoodChannels:
% Preferred number of good channels
channelClassification = helperBLEChannelClassification(...
    'PERThreshold',40, ...
    'ClassificationInterval',150, ...
    'RxStatusCount',50, ...
    'MinRxCountToClassify',4, ...
    'BadChannelClassificationMethod','Reset all the bad channels', ...
    'PreferredMinimumGoodChannels',30);

% Assign channel classification parameters to the Master device
master.ChannelClassification = channelClassification;

% Initialize "slavesCount" number of Slaves
slaves(1, slavesCount) = helperBLEDeviceModel;

% Create "slavesCount" number of Slave devices
for idx = 1:slavesCount
    slaves(idx) = helperBLEDeviceModel('Role','Slave');
end

% Create "slavesCount" connections between the "Master" and "Slaves". This
% function creates a Link Layer connection by sharing the common connection
% parameters such as connection interval, access address for each
% Master-Slave connection pair.
[master, slaves] = helperBLECreateLLConnection(master, slaves);

WLAN トラフィックのモデル化

この節では、指定された構成を使用して WLAN トラフィックをモデル化します。

コンフィギュレーション パラメーター

各 WLAN ネットワークの構成パラメーターには、指定された WLAN チャネルでの衝突確率、干渉レベル、干渉開始時間、および干渉終了時間が含まれます。helperBLEWLANSignalTrafficConfig オブジェクトを使用して、WLAN トラフィックをモデル化します。

% Set number of WLAN networks interfering with the BLE network
wlanNetworksCount = 6;

% Set of WLAN channels (in the range [1, 14]) used by each WLAN network
wlanChannels = [1, 5, 6, 12, 9, 8];
% Probability of collisions of each WLAN network with BLE network
collisionProbabilities = [0.75, 0.68, 0.76, 0.80, 0.78, 0.64];
% Start and end times (in milliseconds) of transmission in each WLAN
% network
wlanInterferencePeriod = [0, inf; ...
    0, inf; ...
    0, 2100; ...
    0, inf; ...
    200, 2800; ...
    150, inf];

% Ratio of WLAN signal power level relative to BLE signal power level
wlanInterferenceLevel = [1.20, 0.90, 0.85, 0.95, 0.70, 1.15];

WLAN トラフィックのモデル化

この節では、指定された構成の WLAN トラフィックを追加して各スレーブに対する干渉を構成します。関数 wlanTraffic を使用して、指定されたすべての WLAN チャネルに WLAN トラフィック (非 HT 波形) が追加されます。

% Create a configuration object for WLAN traffic
wlanTrafficConfig = helperBLEWLANSignalTrafficConfig();

% Configure WLAN traffic with the specified WLAN network parameters
wlanTraffic(wlanTrafficConfig, wlanNetworksCount, wlanChannels, collisionProbabilities, ...
    wlanInterferencePeriod, wlanInterferenceLevel);

共存のシミュレーション

この節では、WLAN 信号による干渉中のマスター デバイスとスレーブ デバイス間の通信について説明します。

シミュレーション パラメーターの初期化

BLE と WLAN 信号干渉の共存に必要なシミュレーション パラメーターは、次のコードで初期化されます。

% Initialize simulation parameters

% Reset the random number generator seed
sprev = rng('default');

% To enable the visualization of BLE coexistence with WLAN, set the
% "enableVisualization" to true. To disable the visualization of BLE
% coexistence with WLAN set the "enableVisualization" to false.
enableVisualization = true;

% To enable the visualization of channel hopping sequence, set the
% "enableHoppingVisualization" to true. To disable the visualization of
% channel hopping sequence, set the "enableHoppingVisualization" to false.
% If the "enableVisualization" is set to false, then
% "enableHoppingVisualization" is not considered.
enableHoppingVisualization = true;

% Total simulation time in milliseconds
simulationTime = 4000;

% One step time is considered as 0.025 milliseconds. All the timing
% parameters (connection interval, scan interval, advertising interval,
% etc.) in BLE specification are multiple of 0.625 milliseconds. The
% minimum packet size used in this example is 9 octets (72 bits). The
% packet transmission time in different PHY modes are: 0.072 milliseconds
% (in LE1M), 0.036 milliseconds (in LE2M), 0.144 milliseconds (in LE500K)
% and 0.288 milliseconds (in LE125K). Therefore, the step time is
% considered as 0.025 milliseconds (0.625 is multiple of 0.025) to achieve
% a trade-off between the simulation time and accuracy.
timeStep = 0.025;

% Parameters for generating BLE transmission mode
phyMode = 'LE1M';   % Mode can be 'LE2M' | 'LE1M' | 'LE500K' | 'LE125K'
EbNo = 16;          % Eb/No value in dB

% Initialize PHY parameters sps:              Samples per symbol bleSNR:
% BLE signal to noise ratio initImpairments:  System object for BLE PHY
% impairments
[sps, bleSNR, initImpairments] = helperBLEInitPHYParameters(EbNo, phyMode);

% Create structure for an empty packet to initialize the output of Master
% and Slaves LLPDU:        Generated Link Layer Protocol Data Unit (PDU)
% appended with
%               Cyclic Redundancy Check (CRC)
% RateIndex:    String representing the rate at which the packet will be
%               transmitted. It contains one of 'LE2M' | 'LE1M' | 'LE500K'
%               | 'LE125K'
% AccessAddress:Unique address for each Master-Slave connection pair
% ChannelIndex: Channel on which the packet is transmitted
emptyPacket = struct('LLPDU',[], ...
    'AccessAddress','', ...
    'RateIndex','', ...
    'ChannelIndex',-1);

% Initialize the Slave output
slaveOutput = emptyPacket;

% Preallocate the buffers to store the Slave outputs
slaveOutputs = cell(1, slavesCount);

シミュレーション

この節では、指定された時間内の BLE のマスター デバイスとスレーブ デバイス間のパケット交換をシミュレートします。

  • マスター (送信または受信): 各接続イベントで、BLE マスターは、データ チャネルでリンク層パケットに対して生成される BLE 波形を送信して、それぞれのスレーブとの通信を開始します。WLAN 信号は、それぞれの BLE チャネルで生成される BLE 波形に干渉します。送信後、マスターはスレーブからの応答を待機します。

  • スレーブ (送信または受信): 各接続イベントで、BLE スレーブは、データ チャネルでマスターからの干渉を受けた波形を受信します。その後、スレーブは、BLE 波形の生成後にリンク層パケットを送信することによって、同じデータ チャネルでマスターに応答します。生成される BLE 波形は、それぞれの BLE チャネルで WLAN 信号の干渉を受けます。

WLAN 干渉を追加する前に、送信された BLE 信号が次の RF 損失を使用して渡されます。

  • DC オフセット

  • 搬送周波数オフセット

  • 搬送波位相オフセット

  • タイミングのずれ

関数 helperBLEImpairments を使用して、RF 損失を構成します。

helperBLEDeviceModel の関数 run は、BLE のマスター デバイスとスレーブ デバイス間の通信に使用されます。関数 addInterference は、WLAN 信号を追加して BLE 信号を破損させます。干渉を受けた BLE 波形にホワイト ガウス ノイズ (WGN) が追加されます。helperBLEVisualizeCoexistence は、BLE と WLAN 信号の共存のシミュレーションを可視化します。

% Initialize figures for visualization of coexistence model for each Slave.
% This visualization shows the WLAN channels along with their collision
% probabilities and also shows the channel hopping for the communication
% between BLE Master and Slave devices. It also shows the status (good or
% bad) of each BLE channel along with the success rate in the respective
% channel.
coexistenceModel = ...
    helperBLEVisualizeCoexistence(...
    'Action','Initialize', ...
    'SlaveCount',slavesCount, ...
    'WLANChannelList',wlanChannels, ...
    'PERThreshold',master.ChannelClassification.PERThreshold, ...
    'ClassificationInterval',master.ChannelClassification.ClassificationInterval, ...
    'ChannelBusyCountThreshold',master.ChannelClassification.ChannelBusyCountThreshold, ...
    'PreferredMinimumGoodChannels',master.ChannelClassification.PreferredMinimumGoodChannels, ...
    'ConnectionInterval',master.LLConnectionConfigs(1).ConnectionInterval, ...
    'Stoptime',simulationTime, ...
    'PHYMode',phyMode, ...
    'EnableVisualization',enableVisualization, ...
    'EnableHoppingVisualization',enableHoppingVisualization);
coexistenceModel.initializeVisualization();
viewModel(coexistenceModel);
master.CoexistenceVisualization = coexistenceModel;

% Run simulation
for simulationTimer = 0:timeStep:simulationTime
    % Stop the simulation, if all the Slaves are disconnected from the
    % Master due to interference. If the PER of the BLE channels in which
    % they are communicating with each other is high, then the Master and
    % the Slave are disconnected. The PER of the channel is high because of
    % the high collision probability in the respective channel.
    if numel(master.ActiveConnectionIdxs(master.ActiveConnectionIdxs ~= -1)) == 0
        fprintf('Simulation terminated as all Slaves are disconnected from the Master device.\n')
        break;
    end

    % Update WLAN traffic in visualization
    helperBLEUpdateWLANTraffic(slavesCount, wlanChannels, wlanTrafficConfig, simulationTimer, master);

    % MASTER: Transmitting or Receiving mode
    if (master.ActiveChannel == slaveOutput.ChannelIndex) && ...
            ~isempty(slaveOutput.LLPDU)
        masterOutput = run(master, slaveOutput);
    else
        masterOutput = run(master, emptyPacket);
    end

    if ~(isempty(masterOutput.LLPDU))
        % Generate PHY waveform
        masterOutput.RateIndex = phyMode;
        masterWaveformTx = helperBLEPHYTx(masterOutput, sps);

        % Add impairments
        masterWaveformTx = helperBLEImpairments(initImpairments, masterWaveformTx, sps);

        % Add WLAN interference
        masterWaveformTx = addInterference(wlanTrafficConfig, ...
            masterOutput.ChannelIndex, simulationTimer, masterWaveformTx);

        % Pass the transmitted waveform through AWGN channel
        masterWaveformRx = awgn(masterWaveformTx, bleSNR);

        % Decode PHY waveform after adding impairments and interference
        [decodedMasterPacket, decodedMasterAccessAddress] = helperBLEPHYRx(masterWaveformRx, ...
            phyMode, sps, masterOutput.AccessAddress, masterOutput.ChannelIndex);

        masterOutput.LLPDU = decodedMasterPacket;
        % Access address becomes empty when the BLE PHY receiver fails to
        % detect a valid BLE packet due to high interference level or
        % impairments or noise level.
        if ~isempty(decodedMasterAccessAddress)
            masterOutput.AccessAddress = dec2hex(bi2de(decodedMasterAccessAddress'), 8);
        end
    end

    % Update current simulation time
    master.CoexistenceVisualization.CurrentTime = simulationTimer;
    master.CoexistenceVisualization.Action = 'Simulation Progress';

    % SLAVE: Transmitting or Receiving mode
    for idx = 1:slavesCount
        % Pass the "MasterOutput" to the Slave listening in the same
        % frequency
        if (slaves(idx).ActiveChannel == masterOutput.ChannelIndex) && ...
                ~isempty(masterOutput.LLPDU)
            slaveOutputs{idx} = run(slaves(idx), masterOutput);
            % Pass an empty packet to all other Slaves
        else
            slaveOutputs{idx} = run(slaves(idx), emptyPacket);
        end

        % Update simulation progress for each Slave
        master.CoexistenceVisualization.SlaveNumber = idx;
        viewModel(master.CoexistenceVisualization)
    end

    slaveOutput = emptyPacket;

    % Get the active Slave output (At any time instance only one Slave is
    % active)
    for idx = 1:slavesCount
        if ~isempty(slaveOutputs{idx}.LLPDU)
            slaveOutput = slaveOutputs{idx};
            break
        end
    end

    if ~(isempty(slaveOutput.LLPDU))
        % Generate PHY waveform
        slaveOutput.RateIndex = phyMode;
        slaveWaveformTx = helperBLEPHYTx(slaveOutput, sps);

        % Add BLE impairments
        slaveWaveformTx = helperBLEImpairments(initImpairments, slaveWaveformTx, sps);

        % Add WLAN interference
        slaveWaveformTx = addInterference(wlanTrafficConfig, ...
            slaveOutput.ChannelIndex, simulationTimer, slaveWaveformTx);

        % Pass the transmitted waveform through AWGN channel
        slaveWaveformRx = awgn(slaveWaveformTx, bleSNR);

        % Decode PHY waveform after adding impairments and interference
        [decodedSlavePacket, decodedSlaveAccessAddress] = helperBLEPHYRx(slaveWaveformRx, ...
            phyMode, sps, slaveOutput.AccessAddress, slaveOutput.ChannelIndex);

        slaveOutput.LLPDU = decodedSlavePacket;
        % Access address becomes empty when the BLE PHY receiver fails to
        % detect a valid BLE packet due to high interference level or
        % impairments or noise level.
        if ~isempty(decodedSlaveAccessAddress)
            slaveOutput.AccessAddress = dec2hex(bi2de(decodedSlaveAccessAddress'), 8);
        end
    end
end

% Update the simulation progress for each Slave
for idx = 1:slavesCount
    master.CoexistenceVisualization.SlaveNumber = idx;
    master.CoexistenceVisualization.Action = 'Simulation Progress';
    viewModel(master.CoexistenceVisualization)
end

% Log the statistics of this example to
% |bleCoexistenceWithWLANSignalStatistics.mat| file
helperBLELogCoexistenceStats(master, slaves, ...
    'bleCoexistenceWithWLANSignalStatistics.mat');

% Restore the previous setting of random number generation
rng(sprev)

シミュレーション結果

この例のシミュレーションでは、次のものが生成されます。

  1. マスターとスレーブの各接続の実行時プロット。これは、各チャネルのステータス (良好または不良) と、累積された最新の成功率を示します。

  2. 詳細な統計を含む MAT ファイル bleCoexistenceWithWLANSignalStatistics.mat が取得されます。これらの統計には、受信したパケット数、各チャネルでの破損したパケット数、各分類間隔でのチャネルのステータス (良好または不良) などが含まれます。

その他の調査

次の方法で、この例をさらに調査できます。

  • 関数 wlanTraffic で、非 HT 直接シーケンス スペクトル拡散 (DSSS)、高スループット (HT) など、WLAN 形式のその他のバリアントを使用する

  • BLE 信号のさまざまな段階に存在する干渉を変化させて、関数 addInterference で BLE 信号を破損させる

BLE ネットワークに対する WLAN 干渉の統計的モデル化を調査することもできます。

この例では、BLE と WLAN 信号干渉の共存を解析できます。各 WLAN ネットワークの衝突確率と干渉レベルを使用して BLE 信号を破損させます。BLE のマスター デバイスとスレーブ デバイスは、良好なチャネルを使用して相互に通信し、パケット損失を回避します。各 BLE チャネルで成功率が計算されます。この例から、WLAN チャネルの衝突確率と干渉レベルが高い場合、それぞれの BLE チャネルで達成される成功率が低くなることがわかります。そのため、BLE のマスター デバイスとスレーブ デバイス間の通信にはこのようなチャネルが使用されません。

付録

この例で使用している機能は次のとおりです。

この例で使用している補助関数は次のとおりです。

参考文献

  1. IEEE® Standard 802.15.2™. "Coexistence of Wireless Personal Area Networks with Other Wireless Devices Operating in Unlicensed Frequency Bands". IEEE Recommended Practice for Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements; IEEE Computer Society

  2. Bluetooth Special Interest Group (SIG). "Bluetooth Core Specification". Version 5.0. https://www.bluetooth.com/

  3. IEEE P802.11ax™/D3.1. "Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications - Amendment 6: Enhancements for High Efficiency WLAN". Draft Standard for Information technology - Telecommunications and information exchange between systems Local and metropolitan area networks - Specific requirements; LAN/MAN Standards Committee of the IEEE Computer Society

  4. IEEE Std 802.11™. "Wireless LAN Medium Access Control (MAC) and Physical Layer (PHY) Specifications". IEEE Standard for Information technology - Telecommunications and information exchange between systems - Local and metropolitan area networks - Specific requirements; LAN/MAN Standards Committee of the IEEE Computer Society

関連するトピック