В этом примере показано, как выполнять тесты радиопередатчика физического уровня (PHY) с улучшенной скоростью передачи данных (EDR) Bluetooth ®, специфичные для точности модуляции и стабильности несущей частоты, с использованием библиотеки Toolbox™ связи для протокола Bluetooth. При тестовых измерениях вычисляются начальное смещение частоты, среднеквадратичное значение дифференциального вектора ошибок (DEVM) и пиковые значения DEVM. В этом примере также проверяется, находятся ли эти значения тестовых измерений в пределах, определенных спецификациями тестирования Bluetooth RF-PHY [1].
Спецификации тестирования RF-PHY Bluetooth [1], определенные Группой специальных интересов Bluetooth (SIG), включают тесты RF-PHY для передатчика и приемника. Цели этих тестов RF-PHY заключаются в следующем:
Обеспечьте совместимость между всеми устройствами Bluetooth.
Обеспечьте базовый уровень производительности системы для всех продуктов Bluetooth.
Каждый тестовый случай имеет конкретную тестовую процедуру и ожидаемый результат, который должен быть достигнут посредством тестируемой реализации (IUT).
Основная цель тестовых измерений датчика состоит в том, чтобы гарантировать, что характеристики датчика находятся в пределах, определенных спецификациями тестирования Bluetooth RF-PHY [1]. Этот пример включает в себя тесты передатчика, относящиеся к точности модуляции EDR и стабильности несущей частоты. В этой таблице показаны различные тесты передатчика RF-PHY, выполненные в этом примере.

Эта блок-схема суммирует процедуру тестирования для тестов передатчика, относящихся к точности модуляции EDR и стабильности несущей частоты форм сигналов Bluetooth EDR.

Создание пакетов DH или EV с использованием псевдослучайных последовательностей этих длин.

Передача битов полезной нагрузки через bluetoothWaveformGenerator функция для генерации тестовых сигналов Bluetooth EDR.
Добавление смещения и дрейфа несущей частоты.
Добавить дополнительный белый гауссов шум (AWGN).
Оцените начальный сдвиг частоты, используя часть основной скорости (BR) сигнала.
Скомпенсировать EDR часть с помощью оцененного начального сдвига частоты.
Выполните фильтрацию квадратного корня по косинусу с использованием фильтра, коэффициенты которого формируются на основе спецификаций теста RF-PHY Bluetooth [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
Используйте предыдущие сконфигурированные параметры для генерации параметров теста. Чтобы получить все параметры теста, используйте функцию helperEDRModulationStartConfig.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
Используйте вспомогательную функцию helperEDRModulationStartVerdict.m для проверки того, находятся ли измерения в заданных пределах, и отображения вердикта.
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);

Этот пример демонстрирует тестовые измерения передатчика EDR Bluetooth, специфичные для точности модуляции и стабильности несущей частоты. Результаты моделирования подтверждают, что эти вычисленные значения измерений теста находятся в пределах, определенных спецификациями тестирования RF-PHY Bluetooth [1].
В примере используются следующие помощники:
helperEDRModulationStartConfig.m: Настройка параметров теста Bluetooth
helperExitureFreqOffset.m: Оценка начального смещения частоты
helperEDRModulationStartMeasurements.m: Вычисление всех измерений DEVM, необходимых для тестирования
helperEDRModulationStartVerdict.m: Проверка результатов испытаний и отображение результатов
1 - Bluetooth Special Interest Group (SIG). «Спецификация тестирования Bluetooth RF-PHY», версия 1.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/