Блокирование BLE, межмодуляция и поставщик услуг к интерференционным тестам производительности

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

Фон

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

Введение

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

  • Блокирование Производительности: блокирующийся тест производительности проверяет производительность получателя в присутствии внеполосных вмешивающихся сигналов т.е. действующий вне полосы на 2 400 МГц - 2 483,5 МГц.

  • Производительность межмодуляции: тест производительности межмодуляции проверяет производительность получателя при наличии нежелательных сигналов поблизости в частоте.

  • Производительность C/I: тест производительности C/I проверяет производительность получателя при наличии смежного и co-канала, вмешивающегося сигналы.

Все вышеупомянутые тесты 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        |
% --------------------------------------------------------------------------------
ФК = 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
Фс = 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);

Протестируйте симуляцию

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

  • Для Блокирования производительности будет только один интерференционный т.е. интерференционный сигнал № 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); % 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

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

Этот раздел генерирует ссылочные значения PER для каждого режима передачи PHY на основе длины полезной нагрузки, как задано в разделе 6.4 из Тестовых Спецификаций RF-PHY Bluetooth [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 [низкий энергетический контроллер объем].

Для просмотра документации необходимо авторизоваться на сайте