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

Bluetooth Low Energy 受信機

この例では、Communications Toolbox™ Library for the Bluetooth Protocol を使用して、Bluetooth® Low Energy (BLE) 受信機を実装する方法を説明します。取得した信号か、ADALM-PLUTO 無線機を使用してリアルタイムに受信した信号のいずれかを使用できます。受信に適した信号は、次のいずれかの設定を使用して、対となる例の 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. 受信機パラメーターの初期化

  2. 信号ソース

  3. BLE パケットの取得

  4. 受信機の処理

受信機パラメーターの初期化

helperBLEReceiverConfig.m スクリプトが受信機パラメーターを初期化します。phyMode パラメーターを変更して、PHY 伝送モードに基づいて受信した BLE 波形を復号化することができます。phyMode は、{'LE1M','LE2M','LE500K','LE125K'} のいずれかにできます。

phyMode = 'LE1M';
bleParam = helperBLEReceiverConfig(phyMode);

信号ソース

信号ソースを 'File' または 'ADALM-PLUTO' として指定します。

  • File: comm.BasebandFileReader を使用して、以前に取得された無線信号を含むファイルを読み取ります。

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

ADALM-PLUTO を信号ソースとして割り当てる場合、例は、無線アドレス 'usb:0' の ADALM-PLUTO 無線機をコンピューターで検索し、信号ソースとして使用します。

signalSource = 'File'; % The default signal source is 'File'
if strcmp(signalSource,'File')
    switch bleParam.Mode
        case 'LE1M'
            bbFileName = 'bleCapturesLE1M.bb';
        case 'LE2M'
            bbFileName = 'bleCapturesLE2M.bb';
        case 'LE500K'
            bbFileName = 'bleCapturesLE500K.bb';
        case 'LE125K'
            bbFileName = 'bleCapturesLE125K.bb';
        otherwise
            error('Invalid PHY transmission mode. Valid entries are LE1M, LE2M, LE500K and LE125K.');
    end
    sigSrc = comm.BasebandFileReader(bbFileName);
    bbSampleRate = sigSrc.SampleRate;
    sigSrc.SamplesPerFrame = 1e7;
    bleParam.SamplesPerSymbol = bbSampleRate/bleParam.SymbolRate;

elseif strcmp(signalSource,'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

    bbSampleRate = bleParam.SymbolRate * bleParam.SamplesPerSymbol;
    sigSrc = sdrrx('Pluto',...
        'RadioID',             'usb:0',...
        'CenterFrequency',     2.402e9,...
        'BasebandSampleRate',  bbSampleRate,...
        'SamplesPerFrame',     1e7,...
        'GainSource',         'Manual',...
        'Gain',                25,...
        'OutputDataType',     'double');
else
    error('Invalid signal source. Valid entries are File and ADALM-PLUTO.');
end

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

BLE パケットの取得

% The transmitted waveform is captured as a burst
dataCaptures = sigSrc();

% Show power spectral density of the received waveform
spectrumScope(dataCaptures);

受信機の処理

信号ソースから受信したベースバンド サンプルが処理され、PDU ヘッダー情報と生のメッセージ ビットが復号化されます。次の図は、受信機の処理を示しています。

  1. 自動ゲイン制御 (AGC) の実行

  2. DC オフセットの削除

  3. 搬送周波数オフセットの推定と補正

  4. ガウス パルスによる整合フィルター処理の実行

  5. タイミング同期

  6. GMSK 復調

  7. LE 符号化された PHY (LE500K および LE125K) のための FEC 復号化とパターン デマッピング

  8. データの白色化の解除

  9. 復号化された PDU に対する CRC チェックの実行

  10. パケット誤り率 (PER) の計算

% Initialize System objects for receiver processing
agc = comm.AGC('MaxPowerGain',20,'DesiredOutputPower',2);

freqCompensator = comm.CoarseFrequencyCompensator('Modulation', 'OQPSK',...
                'SampleRate',bbSampleRate,...
                'SamplesPerSymbol',2*bleParam.SamplesPerSymbol,...
                'FrequencyResolution',100);

prbDet = comm.PreambleDetector(bleParam.RefSeq,'Detections','First');

% Initialize counter variables
pktCnt = 0;
crcCnt = 0;
displayFlag = false; % true if the received data is to be printed

% Loop to decode the captured BLE samples
while length(dataCaptures) > bleParam.MinimumPacketLen

    % Consider two frames from the captured signal for each iteration
    startIndex = 1;
    endIndex = min(length(dataCaptures),2*bleParam.FrameLength);
    rcvSig = dataCaptures(startIndex:endIndex);

    rcvAGC = agc(rcvSig); % Perform AGC
    rcvDCFree = rcvAGC - mean(rcvAGC); % Remove the DC offset
    rcvFreqComp = freqCompensator(rcvDCFree); % Estimate and compensate for the carrier frequency offset
    rcvFilt = conv(rcvFreqComp,bleParam.h,'same'); % Perform gaussian matched filtering

    % Perform frame timing synchronization
    [~, dtMt] = prbDet(rcvFilt);
    release(prbDet)
    prbDet.Threshold = max(dtMt);
    prbIdx = prbDet(rcvFilt);

    % Extract message information
    [cfgLLAdv,pktCnt,crcCnt,remStartIdx] = helperBLEPhyBitRecover(rcvFilt,...
                                prbIdx,pktCnt,crcCnt,bleParam);

    % Remaining signal in the burst captures
    dataCaptures = dataCaptures(1+remStartIdx:end);

    % Display the decoded information
    if displayFlag && ~isempty(cfgLLAdv)
        fprintf('Advertising PDU Type: %s\n', cfgLLAdv.PDUType);
        fprintf('Advertising Address: %s\n', cfgLLAdv.AdvertiserAddress);
    end

    % Release System objects
    release(freqCompensator)
    release(prbDet)
end

% Release the signal source
release(sigSrc)

% Determine the PER
if pktCnt
    per = 1-(crcCnt/pktCnt);
    fprintf('Packet error rate for %s mode is %f.\n',bleParam.Mode,per);
else
    fprintf('\n No BLE packets were detected.\n')
end
Packet error rate for LE1M mode is 0.000000.

その他の調査

対となる例の Bluetooth Low Energy 送信機を使用して、この例で復号化できる規格に準拠した BLE 波形を送信できます。この例を使用して、両方の例でチャネル インデックス、アクセス アドレス、および中心周波数の値を変更してデータ チャネル 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]。