Этот пример показывает, как выполнить тесты передатчика физического слоя (RF) с улучшенной скоростью передачи данных (EDR) Bluetooth ® (PHY), характерные для точности модуляции и стабильности несущей частоты, используя библиотеку Communications Toolbox™ для протокола Bluetooth. Тестовые измерения вычисляют начальное смещение частоты, среднеквадратичный вектор дифференциальной ошибки (RMS) величины (DEVM) и пиковые значения DEVM. Этот пример также проверяет, находятся ли эти значения тестовых измерений в пределах, заданных спецификациями тестирования Bluetooth RF-PHY [1].
Спецификации теста Bluetooth RF-PHY [1], определенные Bluetooth Special Interest Group (SIG), включают тесты RF-PHY для передатчика и приемника. Цели этих тестов RF-PHY состоят в том, чтобы:
Обеспечьте совместимость между всеми устройствами Bluetooth.
Обеспечьте базовый уровень производительности системы для всех продуктов Bluetooth.
Каждый тест имеет определенную процедуру тестирования и ожидаемый результат, который должен быть достигнут тестируемой реализацией (IUT).
Основная цель тестовых измерений датчика состоит в том, чтобы убедиться, что характеристики датчика находятся в пределах, заданных спецификациями тестирования Bluetooth RF-PHY [1]. Этот пример включает тесты передатчика, имеющие отношение к точности модуляции EDR и устойчивости несущей частоты. Эта таблица показывает различные тесты передатчика RF-PHY, выполненные в этом примере.
Этот блок суммирует процедуру тестирования для тестов передатчика, имеющих отношение к точности модуляции EDR и устойчивости несущей сигналов EDR Bluetooth.
Сгенерируйте DH или EV пакеты с помощью псевдослучайных последовательностей этих длин.
Передайте биты полезной нагрузки через bluetoothWaveformGenerator
функция для генерации тестовых сигналов Bluetooth EDR.
Добавьте смещение частоты несущей и дрейф.
Добавьте добавку белого Гауссова шума (AWGN).
Оцените начальное смещение частоты, используя фрагмент основной скорости (BR) формы волны.
Компенсируйте фрагмент EDR предполагаемым начальным смещением частоты.
Выполните фильтр квадратного корня приподнятого косинуса с помощью фильтра, коэффициенты которого сгенерированы на основе спецификаций тестирования Bluetooth RF-PHY [1].
Разделите фрагмент EDR на блоки длины 50 микросекунд каждый.
Для каждого блока задержьте компенсированную последовательность на 1 микросекунду и дифференцируйте задержку с фактической компенсированной последовательностью, чтобы получить последовательность ошибок.
Вычислите RMS DEVM и пик DEVM на основе последовательности ошибок и компенсированной последовательности.
Получите вердикт теста и отобразите результаты.
% Check if the 'Communications Toolbox Library for the Bluetooth Protocol' % support package is installed or not. commSupportPackageCheck('BLUETOOTH');
Чтобы задать режим передачи PHY, тип пакета, начальное смещение частоты, максимальный дрейф частоты и выборки на символ, установите phyMode
, packetType
, initialFreqOffset
, maxFreqDrift
, и sps
соответственно.
phyMode = 'EDR2M'; % PHY transmission mode packetType = 'DH1'; % EDR packet type initialFreqOffset = 40000; % Initial frequency offset (Hz) maxFreqDrift = 0; % Maximum frequency drift (Hz), must be in the range [-10e3, 10e3] sps = 8; % Samples per symbol
Используйте предыдущие сконфигурированные параметры, чтобы сгенерировать тестовые параметры. Чтобы получить все тестовые параметры, используйте функцию helperEDRModulationTestConfig.m helper. Чтобы добавить смещение частоты и тепловой шум, создайте и сконфигурируйте comm.PhaseFrequencyOffset
и comm.ThermalNoise
Системные объекты, соответственно.
[edrTestParams,waveformConfig,filtCoeff] = helperEDRModulationTestConfig(phyMode,packetType,sps); % Create frequency offset System object frequencyDelay = comm.PhaseFrequencyOffset('SampleRate',edrTestParams.sampleRate); % Create thermal noise System object NF = 12; % Noise figure (dB) thNoise = comm.ThermalNoise('NoiseMethod','Noise figure', ... 'SampleRate',edrTestParams.sampleRate, ... 'NoiseFigure',NF);
Используя предыдущую процедуру тестирования передатчика RF-PHY, моделируйте тесты передатчика.
% Initialize variables symDEVM = zeros(1,edrTestParams.requiredBlocks*edrTestParams.blockLength); [blockRMSDEVM,estimatedBlockFreqDrifts] = deal(zeros(1,edrTestParams.requiredBlocks)); estimatedInitFreqOff = zeros(1,edrTestParams.NumPackets); blockCount = 0; % Generate 200 blocks of data as specified in Bluetooth RF-PHY Test Specifications for packetCount = 1:edrTestParams.NumPackets % Generate random bits payload = edrTestParams.pnSeq(); % Generate Bluetooth EDR waveform txWaveform = bluetoothWaveformGenerator(payload,waveformConfig); % Generate ideal EDR symbols from waveform packetDuration = helperBluetoothPacketDuration(packetType,phyMode,edrTestParams.numBytes); txWaveform1 = txWaveform(1:(packetDuration+edrTestParams.span)*sps); idealTxEDRWaveform = txWaveform1((edrTestParams.startIndex)*sps+1:end); % Perform matched filtering rxFilt = upfirdn(idealTxEDRWaveform,filtCoeff,1,sps); % Remove delay and normalize filtered signal idealEDRSymbols = rxFilt(edrTestParams.span+1:end,1)/sqrt(sps); % Add frequency offset driftRate = maxFreqDrift/((packetDuration+edrTestParams.span)*sps); % Drift rate freqDrift = driftRate*(0:1:((packetDuration+edrTestParams.span)*sps-1))';% Frequency drift for the packet frequencyDelay.FrequencyOffset = freqDrift + initialFreqOffset; % Frequency offset, includes initial frequency offset and drift transWaveformCFO = frequencyDelay(txWaveform(1:(packetDuration+edrTestParams.span)*sps)); % Add thermal noise noisyWaveform = thNoise(transWaveformCFO); % Compute initial frequency offset specified in Bluetooth RF-PHY Test Specifications estimatedInitFreqOff(packetCount) = helperEstimateInitialFreqOffset(noisyWaveform,sps); % Compensate initial frequency offset in the received waveform pfOffset = comm.PhaseFrequencyOffset('SampleRate',edrTestParams.sampleRate,'FrequencyOffset',-estimatedInitFreqOff(packetCount)); freqTimeSyncRcv = pfOffset(noisyWaveform); % Remove access code, packet header, and guard time from packet rxEDRWaveform = freqTimeSyncRcv((edrTestParams.startIndex)*sps+1:end); % Perform matched filtering rxFilt = upfirdn(rxEDRWaveform,filtCoeff,1,sps); receivedEDRSymbols = rxFilt(edrTestParams.span+1:end,1)/sqrt(sps); % Compute DEVM values [rmsDEVM,rmsDEVMSymbol,samplingFreq] = ... helperEDRModulationTestMeasurements(receivedEDRSymbols,idealEDRSymbols,edrTestParams); % Accumulate measured values for 200 blocks as specified in Bluetooth RF-PHY Test Specifications blockCount = blockCount + edrTestParams.numDEVMBlocks; symDEVM(((packetCount-1)*edrTestParams.numDEVMBlocks*edrTestParams.blockLength)+1:(packetCount)*edrTestParams.numDEVMBlocks ... *edrTestParams.blockLength) = rmsDEVMSymbol(1:edrTestParams.numDEVMBlocks*edrTestParams.blockLength); blockRMSDEVM(((packetCount-1)*edrTestParams.numDEVMBlocks)+1:((packetCount)*edrTestParams.numDEVMBlocks)) = ... rmsDEVM(1:edrTestParams.numDEVMBlocks); estimatedBlockFreqDrifts(((packetCount-1)*edrTestParams.numDEVMBlocks)+1:((packetCount)*edrTestParams.numDEVMBlocks)) = ... samplingFreq(1:edrTestParams.numDEVMBlocks); end
Используйте функцию helperEDRModulationTestVerdict.m helper, чтобы проверить, находятся ли измерения в заданных пределах, и отобразить вердикт.
helperEDRModulationTestVerdict(phyMode, ...
edrTestParams,estimatedInitFreqOff,symDEVM,blockRMSDEVM,estimatedBlockFreqDrifts)
Modulation Accuracy Test Results:
Expected peak DEVM for all pi/4-DQPSK symbols is less than or equal to 0.35 Result: Pass Percentage of pi/4-DQPSK symbols with DEVM less than or equal to 0.3 is 100 Expected percentage of pi/4-DQPSK symbols with DEVM less than or equal to 0.3 is 99 % Result: Pass
Expected RMS DEVM for all pi/4-DQPSK blocks is less than or equal to 0.2 Result: Pass Carrier Frequency Stability Test Results: Expected initial frequency offset range: [-75 kHz, 75 kHz] Do estimated initial frequency offsets for all the packets fall under expected values? Result: Yes Expected sampling frequencies range: [-10 kHz, 10 kHz] Do estimated sampling frequencies for all the blocks fall under expected values? Result: Yes
% Plot the constellation diagram if strcmp(phyMode,'EDR2M') refSymbols = dpskmod(0:edrTestParams.M-1,edrTestParams.M,pi/4,'gray'); % Perform pi/4-DQPSK modulation else refSymbols = dpskmod(0:edrTestParams.M-1,edrTestParams.M,0,'gray'); % Perform 8-DPSK modulation end constDiag = comm.ConstellationDiagram('ReferenceConstellation',refSymbols, ... 'Title','Received EDR Constellation'); constDiag(receivedEDRSymbols); release(constDiag);
Этот пример демонстрирует тестовые измерения передатчика Bluetooth EDR, характерные для точности модуляции и устойчивости несущей частоты. Результаты симуляции проверяют, что эти вычисленные значения тестовых измерений находятся в пределах, заданных спецификациями тестирования Bluetooth RF-PHY [1].
В примере используются следующие помощники:
helperEDRModulationTestConfig.m: настройте параметры тестирования Bluetooth
helperEstimateInitialFreqOffset.m: Оценка начального смещения частоты
helperEDRModulationTestMeasurements.m: Вычислите все измерения DEVM, необходимые для тестирования
helperEDRModulationTestVerdict.m: Проверьте результаты тестовых измерений и отображения
1 - Bluetooth Special Interest Group (SIG). «Bluetooth RF-PHY Test Спецификации», v1.2/2.0/2.0, EDR/2.1/2.1, EDR/3.0/3.0, HS (), RF.TS/3.0.H.1, раздел 4.5. 2009. https://www.bluetooth.com/
2 - Bluetooth Special Interest Group (SIG). «Основной системный пакет [том контроллера BR/EDR]». Спецификация ядра Bluetooth. Версия 5.2, том 2. https://www.bluetooth.com/