Блокировка BLE, интермодуляция и тесты интерференции Эффективности несущей

В этом примере показано, как смоделировать тесты приемника Bluetooth ® с низкой энергией (BLE) RF-PHY, характерные для блокировки, интермодуляции и эффективности несущей для помех (C/I), согласно спецификациям тестирования Bluetooth RF-PHY [1], используя библиотеку Communications Toolbox™ для протокола Bluetooth.

Фон

Спецификации теста Bluetooth RF-PHY [1], определенные специальной группой интереса Bluetooth (SIG), включают тесты RF-PHY как для передатчика, так и для приемника. Цели этих тестов RF-PHY состоят в том, чтобы гарантировать совместимость между всеми устройствами BLE и проверить, что базовый уровень производительности системы гарантирован для всех продуктов BLE. Каждый тест имеет определенную процедуру тестирования и ожидаемый результат, который должен быть удовлетворен тестируемой реализацией (IUT).

Введение

Тесты приемника Bluetooth спроектированы, чтобы гарантировать, что IUT может принимать данные в области значений условий, где переданный сигнал имеет высокую степень, и в присутствии как внутриполосных, так и внеполосных помех с определенной частотой ошибок пакета (PER). Этот пример охватывает три теста приемника BLE RF-PHY на блокировку, интермодуляцию и эффективность C/I согласно спецификациям тестирования Bluetooth RF-PHY [1].

  • Блокировка Эффективности: Тест эффективности блокировки проверяет эффективности приемника в присутствии внеполосных интерферирующих сигналов, т.е. работающих вне полосы 2400 МГц - 2483,5 МГц.

  • Интермодуляция Эффективности: Тест эффективности интермодуляции проверяет эффективность приемника в присутствии нежелательных сигналов рядом по частоте.

  • C/I Эффективности: Тест эффективности C/I проверяет эффективность приемника в присутствии соседних и сопутствующих сигналов помех.

Все вышеуказанные тесты RF-PHY необходимы, потому что требуемый сигнал часто не будет единственным сигналом, передающим в заданной частотной области значений.

Следующий блок суммирует пример потока.

  1. Сгенерируйте тестовые пакеты и передайте через bleWaveformGenerator, чтобы сгенерировать тестовую форму BLE.

  2. Выполните преобразование частоты вверх, чтобы получить сигнал полосы пропускания.

  3. Масштабируйте переданный сигнал до желаемого входного уровня.

  4. Добавьте сигнал (ы) помехи в зависимости от теста эффективности.

  5. Добавьте белый гауссов шум на основе уровня шума приемника.

  6. В приемнике преобразуйте сигнал вниз, а затем демодулируйте, декодируйте и выполните проверку CRC.

  7. Измерьте PER на основе проверки CRC и затем сравните его со ссылкой PER.

Проверка на установку пакета поддержки

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

Инициализируйте параметры симуляции

Можно изменить rxPerformanceTest, phyMode и Fc параметры, основанные на тесте эффективности приемника, режиме передачи PHY и частоте операции, соответственно.

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 может быть сконфигурирована для генерации тестового сигнала пакета BLE в соответствии со спецификациями Bluetooth [2]. В этом примере желаемые и интерференционные формы основной полосы сигналов могут быть сгенерированы путем изменения параметра типа полезной нагрузки.

% 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);

Симуляция теста

В этом примере все три теста эффективности BLE RF-PHY моделируются следующим образом:

  • Для эффективности блокировки будет только один сигнал интерференции, то есть сигнал интерференции # 2. Таким образом, коэффициент масштабирования (бета) для интерференционного сигнала # 1 равен нулю.

  • Для эффективности интермодуляции будет два сигнала интерференции.

  • Для эффективности C/I будет только один сигнал интерференции, то есть сигнал интерференции # 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,'WhitenStatus','Off'); % 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

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes with title Spectrum of Wanted and Interference Signals contains 3 objects of type line. These objects represent Wanted Signal, Interference Signal #1, Interference Signal #2.

Ссылочные результаты

Этот раздел генерирует ссылочные значения PER для каждого режима передачи PHY на основе длины полезной нагрузки, указанной в разделе 6.4 Спецификаций тестирования Bluetooth RF-PHY [1].

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.

  2. Том 6 спецификации ядра Bluetooth версии 5.0 Core System Package [Low Energy Controller Volume].

Похожие темы