В этом примере показано, как выполнить физический уровень радиочастоты (RF) расширенной скорости передачи данных (EDR) Bluetooth® (PHY), передатчик тестирует характерный для устойчивости точности и несущей частоты модуляции, пользующейся Библиотекой Communications Toolbox™ для Протокола Bluetooth. Тестовые измерения вычисляют начальное смещение частоты, среднеквадратичную (RMS) дифференциальную величину вектора ошибок (DEVM) и пиковые значения DEVM. Этот пример также проверяет, являются ли эти тестовые значения измерения в пределах, заданных Тестовыми Техническими требованиями RF-PHY Bluetooth [1].
Тестовые Технические требования RF-PHY Bluetooth [1] заданный Специальной группой (SIG) Bluetooth включают тесты RF-PHY для передатчика и приемника. Цели этих тестов RF-PHY к:
Обеспечьте функциональную совместимость между всеми bluetooth-устройствами.
Обеспечьте базовый уровень производительности системы для всех продуктов Bluetooth.
Каждый тест имеет определенную процедуру тестирования и ожидаемый результат, который должен быть достигнут реализацией под тестом (IUT).
Главная цель тестовых измерений передатчика состоит в том, чтобы гарантировать, что характеристики передатчика в пределах, заданных Тестовыми Техническими требованиями RF-PHY Bluetooth [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
Используйте предыдущие сконфигурированные параметры, чтобы сгенерировать тестовые параметры. Чтобы получить все тестовые параметры, используйте helperEDRModulationTestConfig.m функцию помощника. Чтобы добавить смещение частоты и тепловой шум, создайте и сконфигурируйте 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 функцию помощника, чтобы проверить, являются ли измерения в заданных пределах и отображают вердикт.
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].
Пример использует этих помощников:
helperEDRModulationTestConfig.m: Сконфигурируйте тестовые параметры Bluetooth
helperEstimateInitialFreqOffset.m: Оцените начальное смещение частоты
helperEDRModulationTestMeasurements.m: Вычислите все измерения DEVM, требуемые для теста
helperEDRModulationTestVerdict.m: Подтвердите тестовые измерения и отобразите результат
1 - Специальная группа (SIG) Bluetooth. “Bluetooth Тестовая Спецификация RF-PHY”, 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 - Специальная группа (SIG) Bluetooth. "Базовый Системный пакет [диспетчер BR/EDR Вольюм]". Спецификация Ядра Bluetooth. Версия 5.2, Вольюм 2. https://www.bluetooth.com /