В этом примере показано, как смоделировать 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 необходимы, потому что требуемый сигнал часто не будет единственной передачей сигнала в данном частотном диапазоне.
Следующая блок-схема обобщает поток в качестве примера.
Сгенерируйте тестовые пакеты и пройдите через 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 | % -------------------------------------------------------------------------------- ФК = 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.
Этот пример использует следующие функции помощника:
Bluetooth тестовая спецификация RF-PHY.
Объем 6 из спецификации ядра Bluetooth, системный пакет ядра версии 5.0 [низкий энергетический контроллер объем].