このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

Bluetooth Low Energy 送信機

この例では、Communications Toolbox™ Library for the Bluetooth Protocol を使用して、Bluetooth® Low Energy (BLE) 送信機を実装する方法を説明します。ADALM-PLUTO 無線機を使用するか、ベースバンド ファイル (*.bb) に書き込むことで、BLE 信号を送信できます。送信された BLE 信号は、次のいずれかの設定を使用して、対となる例の Bluetooth Low Energy 受信機により受信できます。(i) 2 つの MATLAB セッションを実行する同じホスト コンピューターに接続された 2 つの SDR プラットフォーム (ii) 個別の MATLAB セッションを実行する 2 台のコンピューターに接続された 2 つの SDR プラットフォーム。

ADALM-PLUTO 無線機のサポート パッケージと連携するようにホスト コンピューターを構成する方法の詳細については、Guided Host-Radio Hardware Setup (Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio)のドキュメンテーションを参照してください。

必要なソフトウェアとハードウェア

この例を実行するには、次のソフトウェアが必要です。

  • Communications Toolbox Library for the Bluetooth Protocol

信号をリアルタイムで送信するには、ADALM-PLUTO 無線機と、対応するサポート パッケージ アドオンも必要です。

Communications Toolbox でサポートされる SDR プラットフォームのすべてのリストについては、ソフトウェア無線機 (SDR) 情報ページのサポートされているハードウェアの節を参照してください。

背景

Bluetooth Special Interest Group (SIG) は、低電力短距離通信のために BLE を導入しました。Bluetooth 規格 [1] では、PHY 層と MAC 層の両方が含まれるリンク層が指定されています。BLE の用途には、携帯電話間でのイメージおよびビデオ ファイルの転送、ホーム オートメーション、モノのインターネット (IoT) などがあります。

BLE の仕様:

  • 送信周波数範囲: 2.4 ~ 2.4835 GHz

  • RF チャネル: 40

  • シンボル レート: 1 Msym/秒、2 Msym/秒

  • 変調: ガウス最小シフト キーイング (GMSK)

  • PHY 伝送モード : (i) LE1M - データ転送速度が 1 Mbps の符号化されない PHY (ii) LE2M - データ転送速度が 2 Mbps の符号化されない PHY (iii) LE500K - データ転送速度が 500 Kbps の符号化された PHY (iv) LE125K - データ転送速度が 125 Kbps の符号化された PHY

Bluetooth 規格 [1] では、以下のフィールドを使用して、BLE の 4 つすべての PHY 伝送モードの無線インターフェイス パケット形式が指定されています。

  • プリアンブル: プリアンブルは PHY 伝送モードに応じて異なります。LE1M モードでは、0 と 1 が交互に並んだ 8 ビット シーケンスの '01010101' が使用されます。LE2M では、0 と 1 が交互に並んだ 16 ビット シーケンスの '0101...' が使用されます。LE500K および LE125K モードでは、'00111100' を 10 回繰り返すことで得られる 0 と 1 の 80 ビット シーケンスが使用されます。

  • アクセス アドレス: 32 ビット シーケンスを使用して、2 台の BLE デバイス間で共有される接続アドレスを指定します。

  • 符号化インジケーター: 符号化モードを区別するために使用される 2 ビット シーケンス (LE125K および LE500K)。

  • ペイロード: プロトコル データ ユニット (PDU) と巡回冗長検査 (CRC) の両方を含む入力メッセージ ビット。最大メッセージ サイズは 2080 ビットです。

  • 終了フィールド: 前方誤り訂正の符号化で使用される、2 つの 0 の 3 ビット ベクトル。終了フィールドは、符号化されるモード (LE500K および LE125K) にのみ存在します。

符号化されない PHY (LE1M および LE2M) モードのパケット形式を次の図に示します。

符号化された PHY (LE500K および LE125K) モードのパケット形式を次の図に示します。

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

% Check if the 'Communications Toolbox Library for the Bluetooth Protocol'
% support package is installed or not.
commSupportPackageCheck('BLUETOOTH');

構造例

BLE 送信機の一般的な構造の例を次のように説明します。

  1. リンク層 PDU の生成

  2. ベースバンド IQ 波形の生成

  3. 送信機の処理

リンク層 PDU の生成

リンク層 PDU には、アドバタイジング チャネル PDU またはデータ チャネル PDU を使用できます。関数 bleLLAdvertisingChannelPDUConfig および bleLLAdvertisingChannelPDU をそれぞれ使用して、アドバタイジング チャネル PDU を構成および生成できます。関数 bleLLDataChannelPDUConfig および bleLLDataChannelPDU をそれぞれ使用して、データ チャネル PDU を構成および生成できます。

% Configure an advertising channel PDU
cfgLLAdv = bleLLAdvertisingChannelPDUConfig;
cfgLLAdv.PDUType         = 'Advertising indication';
cfgLLAdv.AdvertisingData = '0123456789ABCDEF';
cfgLLAdv.AdvertiserAddress = '1234567890AB';

% Generate an advertising channel PDU
messageBits = bleLLAdvertisingChannelPDU(cfgLLAdv);

ベースバンド IQ 波形の生成

関数 bleWaveformGenerator を使用して、規格に準拠した波形を生成できます。

phyMode = 'LE1M'; % Select one mode from the set {'LE1M','LE2M','LE500K','LE125K'}
sps = 8;          % Samples per symbol
channelIdx = 37;  % Channel index value in the range [0,39]
accessAddLen = 32;% Length of access address
accessAddHex = '8E89BED6';  % Access address value in hexadecimal
accessAddBin = de2bi(hex2dec(accessAddHex),accessAddLen)'; % Access address in binary

% Symbol rate based on |'Mode'|
symbolRate = 1e6;
if strcmp(phyMode,'LE2M')
    symbolRate = 2e6;
end

% Generate BLE waveform
txWaveform = bleWaveformGenerator(messageBits,...
    'Mode',            phyMode,...
    'SamplesPerSymbol',sps,...
    'ChannelIndex',    channelIdx,...
    'AccessAddress',   accessAddBin);

% Setup spectrum viewer
spectrumScope = dsp.SpectrumAnalyzer( ...
    'SampleRate',       symbolRate*sps,...
    'SpectrumType',     'Power density', ...
    'SpectralAverages', 10, ...
    'YLimits',          [-130 0], ...
    'Title',            'Baseband BLE Signal Spectrum', ...
    'YLabel',           'Power spectral density');

% Show power spectral density of the BLE signal
spectrumScope(txWaveform);

送信機の処理

信号シンクを 'File' または 'ADALM-PLUTO' として指定します。

  • File: comm.BasebandFileWriter を使用してベースバンド ファイルを作成します。

  • ADALM-PLUTO: sdrtx (Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio) System object を使用して SDR ハードウェアからライブ信号を送信します。

% Initialize the parameters required for signal source
txCenterFrequency       = 2.402e9;  % Varies based on channel index value
txFrameLength           = length(txWaveform);
txNumberOfFrames        = 1e4;
txFrontEndSampleRate    = symbolRate*sps;

% The default signal source is 'File'
signalSink = 'File';

if strcmp(signalSink,'File')

    sigSink = comm.BasebandFileWriter('CenterFrequency',txCenterFrequency,...
        'Filename','bleCaptures.bb',...
        'SampleRate',txFrontEndSampleRate);
    sigSink(txWaveform); % Writing to a baseband file 'bleCaptures.bb'

elseif strcmp(signalSink,'ADALM-PLUTO')

    % First check if the HSP exists
    if isempty(which('plutoradio.internal.getRootDir'))
        error(message('comm_demos:common:NoSupportPackage', ...
                      'Communications Toolbox Support Package for ADALM-PLUTO Radio',...
                      ['<a href="https://www.mathworks.com/hardware-support/' ...
                      'adalm-pluto-radio.html">ADALM-PLUTO Radio Support From Communications Toolbox</a>']));
    end
    connectedRadios = findPlutoRadio; % Discover ADALM-PLUTO radio(s) connected to your computer
    radioID = connectedRadios(1).RadioID;
    sigSink = sdrtx( 'Pluto',...
        'RadioID',           radioID,...
        'CenterFrequency',   txCenterFrequency,...
        'Gain',              0,...
        'SamplesPerFrame',   txFrameLength,...
        'BasebandSampleRate',txFrontEndSampleRate);
    % The transfer of baseband data to the SDR hardware is enclosed in a
    % try/catch block. This means that if an error occurs during the
    % transmission, the hardware resources used by the SDR System
    % object(TM) are released.
    currentFrame = 1;
    try
        while currentFrame <= txNumberOfFrames
            % Data transmission
            sigSink(txWaveform);
            % Update the counter
            currentFrame = currentFrame + 1;
        end
    catch ME
        release(sigSink);
        rethrow(ME)
    end
else
    error('Invalid signal sink. Valid entries are File and ADALM-PLUTO.');
end

% Release the signal sink
release(sigSink)

その他の調査

対となる例の Bluetooth Low Energy 受信機を使用して、この例で送信された波形を復号化できます。この例を使用して、両方の例でチャネル インデックス、アクセス アドレス、および中心周波数の値を変更してデータ チャネル PDU を送信することもできます。

トラブルシューティング

SDR ハードウェアおよび Communications Toolbox Support Package for ADALM-PLUTO Radio のトラブルシューティングに関する一般的なヒントは、Common Problems and Fixes (Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio)にあります。

参考文献

  1. Volume 6 of the Bluetooth Core Specification, Version 5.0 Core System Package [Low Energy Controller Volume]。