В этом примере показано, как смоделировать тесты приемника 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 необходимы, потому что требуемый сигнал часто не будет единственным сигналом, передающим в заданной частотной области значений.
Следующий блок суммирует пример потока.
Сгенерируйте тестовые пакеты и передайте через 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 моделируются следующим образом:
Для эффективности блокировки будет только один сигнал интерференции, то есть сигнал интерференции # 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 Core System Package [Low Energy Controller Volume].