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

Формирование тестовых пакетов и прохождение через bleWaveformGenerator для формирования тестового сигнала BLE.
Выполните преобразование частоты с повышением частоты для получения сигнала полосы пропускания.
Масштабируйте передаваемый сигнал до требуемого входного уровня.
Добавьте сигнал (ы) помехи в зависимости от теста рабочих характеристик.
Добавьте белый гауссовый шум на основе уровня шума приемника.
В приемнике преобразуйте сигнал с понижением частоты, а затем демодулируйте, декодируйте и выполняйте проверку CRC.
Измерьте 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 моделируются следующим образом:
Для функционирования блокировки будет только один сигнал помех, т.е. сигнал помех No 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

В этом разделе генерируются опорные значения 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.
В этом примере используются следующие вспомогательные функции:
helperBLETestWaveform.m: Генерирует тестовый сигнал BLE
helperBLETestParamGenerate.m: Генерирует тестовые параметры BLE, специфичные для блокировки, интермодуляции и C/I
helperBLETestPacketValidate.m: Проверяет правильность тестовых пакетов BLE
Спецификация тестирования Bluetooth RF-PHY.
Том 6 спецификации ядра Bluetooth, версия 5.0 Пакет основной системы [Low Energy Controller Volume].