Main Content

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

BLE のブロック パフォーマンス、相互変調パフォーマンス、および搬送波対干渉比パフォーマンスのテスト

この例では、Communications Toolbox™ Library for the Bluetooth Protocol を使用して、Bluetooth RF-PHY テスト仕様 [ 1 ] に従い、ブロック パフォーマンス、相互変調パフォーマンス、および搬送波対干渉比 (C/I) パフォーマンスに固有の Bluetooth® Low Energy (BLE) RF-PHY 受信機テストをモデル化する方法を説明します。

背景

Bluetooth Special Interest Group (SIG) によって定義された Bluetooth RF-PHY テスト仕様 [ 1 ] には、送信機と受信機の両方に関する RF-PHY テストが含まれています。これらの RF-PHY テストの目的は、すべての BLE デバイス間の相互運用性を確認し、すべての BLE 製品について基本的なレベルのシステム パフォーマンスが保証されているかを確認することです。各テスト ケースには指定されたテスト手順と期待される結果があり、試験対象実装 (IUT) がこれらを満たさなければなりません。

はじめに

Bluetooth 受信機テストでは、送信される信号の強度が高く、定義されたパケット誤り率 (PER) で帯域内および帯域外の両方の干渉が存在する条件の範囲で、IUT がデータを受信できることを確認します。この例は、Bluetooth RF-PHY テスト仕様 [ 1 ] に従って行われる、ブロック パフォーマンス、相互変調パフォーマンス、および C/I パフォーマンスに関する 3 つの BLE RF-PHY 受信機テストを対象としています。

  • ブロック パフォーマンス: ブロック パフォーマンス テストでは、2400 MHz ~ 2483.5 MHz 帯域の範囲外で作用する帯域外の干渉信号が存在する場合の受信機のパフォーマンスを検証します。

  • 相互変調パフォーマンス: 相互変調パフォーマンス テストでは、周波数が近い、望ましくない信号が存在する場合の受信機のパフォーマンスを検証します。

  • C/I パフォーマンス: C/I パフォーマンス テストでは、隣接する同一チャネル干渉信号が存在する場合の受信機のパフォーマンスを検証します。

望ましくない信号は必ずしも特定の周波数範囲で送信される信号ではないため、上記のすべての RF-PHY テストを行う必要があります。

次のブロック線図に、フローの例をまとめています。

  1. テスト パケットを生成して、bleWaveformGenerator を使用してこれらのパケットを渡し、BLE テスト波形を生成します。

  2. 周波数アップコンバージョンを実行して、通過帯域信号を取得します。

  3. 送信された信号を目的の入力レベルにスケーリングします。

  4. パフォーマンス テストに応じて干渉信号を追加します。

  5. 受信機のノイズ フロアに基づいてホワイト ガウス ノイズを追加します。

  6. 受信機で、信号をダウン コンバートして、復調、復号化を行い、CRC チェックを実行します。

  7. CRC チェックに基づいて PER を測定し、基準 PER と比較します。

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

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

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

受信機のパフォーマンス テスト、PHY 伝送モード、および動作周波数に基づいて、rxPerformanceTestphyMode、および Fc パラメーターをそれぞれ変更できます。

rxPerformanceTest = 'Intermodulation'; % Select one from the set {'C/I', 'Blocking', 'Intermodulation'}
% Select PHY transmission mode as per Bluetooth RF-PHY Test Specifications
phyMode = 'LE1M'; % {LE1M, LE2M, LE500K, LE125K} for C/I
                                % {LE1M, LE2M} for blocking and intermodulation
% Select frequency of operation for IUT based on the performance test and
% generic access profile (GAP) role(s) as shown in the table below.
% --------------------------------------------------------------------------------
% Operating | Peripheral & Central Devices    | Broadcaster & Observer Devices   |
% Frequency |                                 |                                  |
% (MHz)     |---------------------------------|----------------------------------|
%           | C/I  | Blocking |Intermodulation| C/I  | Blocking | Intermodulation|
% ----------|------|----------|---------------|------|----------|----------------|
%   Lowest  | 2406 |    -     |    2402       | 2402 |    -     |    2402        |
%   Middle  | 2440 |    2426  |    2440       | 2426 |    2426  |    2426        |
%   Highest | 2476 |    -     |    2480       | 2480 |    -     |    2480        |
% --------------------------------------------------------------------------------
Fc = 2426e6; % Frequency of operation in Hz
payloadLength = 37; % Payload length in bytes, must be in the range [37,255]
sps = 40; % Number of samples per symbol

% Calculate sampling rate in Hz based on PHY transmission mode
Rsym = 1e6;
if strcmp(phyMode,'LE2M')
    Rsym = 2e6;
end
Fs = Rsym*sps;

ベースバンド波形の生成

関数 helperBLETestWaveform.m は、Bluetooth 仕様 [ 2 ] に従って BLE テスト パケット波形を生成するように構成できます。この例では、ペイロード タイプ パラメーターを変更することによって、望ましいベースバンド波形と干渉ベースバンド波形を生成できます。

% Generate a wanted signal which is always a modulated carrier with a PRBS9
% payload
payloadTypeWanted = 0; % Payload type for PRBS9 sequence
wantedWaveform =  helperBLETestWaveform(payloadTypeWanted,payloadLength,sps,phyMode);

% Generate an interference signal #1 which is a modulated carrier with a
% PRBS15 payload
payloadTypeInterference = 3; % Payload type for PRBS15 sequence
interferenceWaveform1 =  helperBLETestWaveform(payloadTypeInterference,payloadLength,sps,phyMode);

周波数アップコンバージョン

周波数アップコンバージョンを適用して、指定した動作周波数のパスバンド信号を取得します。

% Interpolation factor for upconversion to cover BLE RF frequency band
% (2400e6 to 2485e6)
interpFactor = ceil(2*2485e6/Fs);

% Create a digital upconverter System object
upConv = dsp.DigitalUpConverter(...
              'InterpolationFactor',interpFactor,...
              'SampleRate',Fs,...
              'Bandwidth',2e6,...
              'StopbandAttenuation',44,...
              'PassbandRipple',0.5,...
              'CenterFrequency',Fc);

% Upconvert the baseband waveform to passband
wantedWaveformUp = upConv([wantedWaveform;zeros(8*sps,1)]);

テスト パラメーターの生成

テスト パラメーターは、パフォーマンス テスト、動作周波数、および PHY 伝送モードに基づいて生成されます。関数 helperBLETestParamGenerate.m を使用して、選択した受信機パフォーマンス テストのためのすべての干渉周波数と対応するスケーリング係数 (アルファ、ベータ、ガンマ) を生成します。

[alpha,beta,gamma,interferenceFreq1,interferenceFreq2] = ...
                helperBLETestParamGenerate(rxPerformanceTest,Fc,phyMode);

シミュレーションに使用されるパケット数に基づいて、テスト パラメーターを繰り返します。

pktCnt = 10; % Number of packets
maxInterferenceParams = min(length(interferenceFreq1),pktCnt); % Maximum number of interference parameters used for simulation

% Repeat all the interference parameters such that PER can be averaged over
% the entire range of interference frequencies for selected receiver
% performance test.
repFact = ceil(pktCnt/maxInterferenceParams); % Repetition factor
betaRep = repmat(beta,repFact,1);
gammaRep = repmat(gamma,repFact,1);
interferenceFreq1Rep = repmat(interferenceFreq1,repFact,1);
interferenceFreq2Rep = repmat(interferenceFreq2,repFact,1);

テストのシミュレーション

この例では、3 つすべての BLE RF-PHY パフォーマンス テストのシミュレーションを次のように行います。

  • ブロック パフォーマンスについては、1 つのみの干渉信号 (干渉信号 #2) を使用します。そのため、干渉信号 #1 のスケーリング係数 (ベータ) はゼロになります。

  • 相互変調パフォーマンスについては、2 つの干渉信号を使用します。

  • C/I パフォーマンスについては、1 つのみの干渉信号 (干渉信号 #1) を使用します。そのため、干渉信号 #2 のスケーリング係数 (ガンマ) はゼロになります。

% Upconvert and store the interference waveform #1 based on buffer
% size, so that the stored interference waveforms can be reused if
% the packet count exceeds the buffer size.
interferenceWaveform1Up = zeros(length(wantedWaveformUp),maxInterferenceParams);
if any(strcmp(rxPerformanceTest,{'C/I','Intermodulation'}))
    for i=1:maxInterferenceParams
        release(upConv)
        upConv.CenterFrequency = interferenceFreq1Rep(i);
        interferenceWaveform1Up(:,i) = upConv([interferenceWaveform1;zeros(8*sps,1)]);
    end
end

% Initialize a variable for reusing the interference waveform #1
j = rem(1:pktCnt,maxInterferenceParams);
j(j == 0) = maxInterferenceParams;

% Create a digital down converter System object
downConv = dsp.DigitalDownConverter(...
              'DecimationFactor',interpFactor,...
              'SampleRate',Fs*interpFactor,...
              'Bandwidth',2e6,...
              'StopbandAttenuation',44,...
              'PassbandRipple',0.5,...
              'CenterFrequency',Fc);

% Create automatic gain control System object
agc = comm.AGC('DesiredOutputPower',1);

% Create a thermal noise System object
NF = 12; % Noise figure (dB)
thNoise = comm.ThermalNoise('NoiseMethod','Noise figure',...
                            'SampleRate',interpFactor*Fs,...
                            'NoiseFigure',NF);

% Time vector to generate sinusoidal unmodulated interference signal i.e.
% interference signal #2.
t = (0:(length(wantedWaveformUp)-1)).'/(interpFactor*Fs);
pktLost = 0; % Initialize counter
for i=1:pktCnt

    % Generate an interference waveform #2 which is a sinusoidal
    % unmodulated signal. The sqrt(2) factor ensures that the power of the
    % sinusoidal signal is normalized.
    interferenceWaveform2 = sqrt(2)*sin(2*pi*interferenceFreq2Rep(i)*t);

    % Add the interference signals to wanted signal
    rxWaveform = alpha*wantedWaveformUp + betaRep(i)*interferenceWaveform1Up(:,j(i)) + gammaRep(i)*interferenceWaveform2;
    chanOut = thNoise(complex(rxWaveform)); % Add thermal noise to the signal
    downConvOut = downConv(real(chanOut)); % Perform frequency down conversion
    agcOut = agc(downConvOut); % Apply AGC
    [payload,accessAddr] = bleIdealReceiver(agcOut,'Mode',phyMode,...
                                            'SamplesPerSymbol',sps); % Extract message information
    [crcFail,pdu] = helperBLETestPacketValidate(payload,accessAddr); % Validate the BLE test packet
    pktLost = pktLost + crcFail;
end

% Determine the PER
per = pktLost/pktCnt;

スペクトルの可視化

スペクトル アナライザーを作成および構成し、受信機のパフォーマンス テストに基づいて最後に送信された望ましい信号と干渉信号のスペクトルを表示します。

% Setup spectrum viewer
spectrumScope = dsp.SpectrumAnalyzer( ...
                    'SampleRate',            interpFactor*Fs,...
                    'SpectralAverages',      10,...
                    'YLimits',               [-160 0], ...
                    'Title',                 'Spectrum of Wanted and Interference Signals',...
                    'SpectrumUnits',         'dBm',...
                    'NumInputPorts' ,        2,...
                    'ChannelNames',          {'Wanted Signal','Interference Signal'},...
                    'ShowLegend',            true,...
                    'FrequencySpan',         'Start and stop frequencies',...
                    'StartFrequency',        2400e6,...
                    'StopFrequency',         2485e6,...
                    'RBWSource',             'Property',...
                    'RBW',                   1e5,...
                    'PlotAsTwoSidedSpectrum',false);

if strcmp(rxPerformanceTest,'C/I')
    spectrumScope(alpha*wantedWaveformUp,betaRep(end)*interferenceWaveform1Up(:,end))
elseif strcmp(rxPerformanceTest,'Blocking')
    spectrumScope.StartFrequency = 30e6;
    spectrumScope(alpha*wantedWaveformUp,gammaRep(end)*interferenceWaveform2)
else
    spectrumScope.NumInputPorts = 3;
    spectrumScope.ChannelNames = {'Wanted Signal','Interference Signal #1','Interference Signal #2'};
    spectrumScope(alpha*wantedWaveformUp,betaRep(end)*interferenceWaveform1Up(:,end),gammaRep(end)*interferenceWaveform2)
end

基準結果

この節では、Bluetooth RF-PHY テスト仕様 [1] の 6.4 節で指定されているペイロード長に基づいて、各 PHY 伝送モードの基準 PER の値を生成します。

berTable = [0.1 0.064 0.034 0.017]*0.01;
if(payloadLength <= 37)
    refBER = berTable(1);
elseif(payloadLength <= 63)
    refBER = berTable(2);
elseif(payloadLength <= 127)
    refBER = berTable(3);
else
    refBER = berTable(4);
end
accessAddLen = 4; % Access address length in bytes
crcLengthBytes = 3; % CRC length in bytes
pduHeaderLen = 2; % Header length in bytes
refPER = 1-(1-refBER)^((payloadLength+accessAddLen+pduHeaderLen+crcLengthBytes)*8);
fprintf('Measured PER and reference PER for payload length of %d bytes are %f, %f respectively.\n',payloadLength,per,refPER);
Measured PER and reference PER for payload length of 37 bytes are 0.000000, 0.308010 respectively.
if per <= refPER
    fprintf('%s performance test passed.\n',rxPerformanceTest);
else
    fprintf('%s performance test failed.\n',rxPerformanceTest);
end
Intermodulation performance test passed.

付録

この例では、以下の補助関数を使用します。

参考文献

  1. Bluetooth RF-PHY Test Specification.

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