В этом примере показано, как реализовать практический приемник IEEE® 802.15.4™ PHY, декодирующий формы волны OQPSK, которые, возможно, были получены от беспроводных радио, пользуясь Библиотекой Communications Toolbox™ для для ZigBee и UWB. Этот практический приемник декодировал стандартно-совместимые формы волны, полученные от коммерческих радио ZigBee, разрешающих домашнюю автоматизацию в полосе на 2,4 ГГц, с помощью USRP® B200-мини-радио и Пакет поддержки Communications Toolbox для радио USRP®.
Стандарт IEEE 802.15.4 задает слои MAC и PHY Беспроводных Персональных Сетей области С низкой ставкой (LR-WPANs) [1]. Слои IEEE 802.15.4 MAC и PHY обеспечивают базис других стандартов более высокого слоя, таких как ZigBee, WirelessHart®, 6LoWPAN и MiWi. Такие стандарты находят применение в домашней автоматизации и организации сети датчика и очень относятся к тренду Интернета вещей (IoT).
В целом, приемник выполняет следующие операции:
Согласованная фильтрация
Крупная компенсация частоты
Прекрасная компенсация частоты
Синхронизация восстановления
Обнаружение преамбулы
Разрешение неоднозначности фазы
Despreading
Между этими шагами сигнал визуализируется, чтобы проиллюстрировать ухудшения сигнала и коррекции.
load lrwpanPHYCaptures % load OQPSK signals captured in the 2.4 GHz band spc = 12; % 12 samples per chip; the frame was captured at 12 x chiprate = 12 MHz
Согласованный фильтр улучшает ОСШ сигнала. OQPSK PHY на 2,4 ГГц использует импульсы полусинусоиды, поэтому следующая операция согласованной фильтрации необходима.
% Matched filter for captured OQPSK signal: halfSinePulse = sin(0:pi/spc:(spc)*pi/spc); decimationFactor = 3; % reduce spc to 4, for faster processing matchedFilter = dsp.FIRDecimator(decimationFactor, halfSinePulse); filteredOQPSK = matchedFilter(capturedFrame1); % matched filter output
Декодирование сигнала при присутствии смещений частоты является проблемой для любого беспроводного приемника. Частота возмещает до 30 кГц, были измерены для сигналов, переданных от коммерческих радио ZigBee, и получил использование USRP® B200-мини-радио.
Схемы созвездия могут проиллюстрировать качество полученного сигнала, но сначала важно отметить, что траектория идеального сигнала OQPSK следует за кругом.
% Plot constellation of ideal OQPSK signal msgLen = 8*120; % length in bits message = randi([0 1], msgLen, 1); % transmitted message idealOQPSK = lrwpan.PHYGeneratorOQPSK(message, spc, '2450 MHz'); constellation = comm.ConstellationDiagram('Name', 'Ideal OQPSK Signal', 'ShowTrajectory', true); constellation.Position = [constellation.Position(1:2) 300 300]; constellation(idealOQPSK);
Вышеупомянутое созвездие также содержит один радиус, соответствующий системе координат, запускаются, и один радиус, соответствующий концу системы координат. В то же время частота возмещает циркулярный, вращают созвездия, приводящие к кольцевым созвездиям также. Поэтому это более значимо, чтобы наблюдать созвездие эквивалентного QPSK сигнала, который получен путем задержки синфазного компонента сигнала OQPSK наполовину символ. Когда фильтрация импульса полусинусоиды используется, и фактор сверхдискретизации больше один, идеальное созвездие QPSK напоминает 'X '-shaped областей, соединяющих четыре символа QPSK (красные кресты) с источником.
% Plot constellation of ideal QPSK-equivalent signal idealQPSK = complex(real(idealOQPSK(1:end-spc/2)), imag(idealOQPSK(spc/2+1:end))); % align I and Q release(constellation); constellation.Name = 'Ideal QPSK-Equivalent Signal'; constellation.ReferenceConstellation = [1+1i 1-1i 1i-1 -1i-1]; constellation(idealQPSK);
Однако выборки полученной системы координат нарушены из этих 'X '-shaped областей из-за смещений частоты:
% Plot constellation of QPSK-equivalent (impaired) received signal filteredQPSK = complex(real(filteredOQPSK(1:end-spc/(2*decimationFactor))), imag(filteredOQPSK(spc/(2*decimationFactor)+1:end))); % align I and Q constellation = comm.ConstellationDiagram('XLimits', [-7.5 7.5], 'YLimits', [-7.5 7.5], ... 'ReferenceConstellation', 5*qammod(0:3, 4), 'Name', 'Received QPSK-Equivalent Signal'); constellation.Position = [constellation.Position(1:2) 300 300]; constellation(filteredQPSK);
Такие смещения частоты сначала грубо корректируются с помощью основанного на БПФ метода [2], который придают квадратную форму сигнал OQPSK и показывает два спектральных peaks. Крупное смещение частоты получено путем усреднения и сокращения вдвое частот двух спектральных peaks.
% Coarse frequency compensation of OQPSK signal coarseFrequencyCompensator = comm.CoarseFrequencyCompensator('Modulation', 'OQPSK', ... 'SampleRate', spc*1e6/decimationFactor, 'FrequencyResolution', 1e3); [coarseCompensatedOQPSK, coarseFrequencyOffset] = coarseFrequencyCompensator(filteredOQPSK); fprintf('Estimated frequency offset = %.3f kHz\n', coarseFrequencyOffset/1000); % Plot QPSK-equivalent coarsely compensated signal coarseCompensatedQPSK = complex(real(coarseCompensatedOQPSK(1:end-spc/(2*decimationFactor))), imag(coarseCompensatedOQPSK(spc/(2*decimationFactor)+1:end))); % align I and Q release(constellation); constellation.Name = 'Coarse frequency compensation (QPSK-Equivalent)'; constellation(coarseCompensatedQPSK);
Estimated frequency offset = 26.367 kHz
Некоторые выборки все еще лежат за пределами 'X '-shaped областей, соединяющих источник с символами QPSK (красные кресты), когда прекрасная компенсация частоты также необходима.
Прекрасная компенсация частоты следует алгоритму восстановления несущей OQPSK, описанному в [3]. Этот алгоритм поведенчески отличается, чем его дубликат QPSK, который не применяется к сигналам OQPSK, даже если их синфазный компонент сигнала задерживается наполовину символ.
% Fine frequency compensation of OQPSK signal fineFrequencyCompensator = comm.CarrierSynchronizer('Modulation', 'OQPSK', 'SamplesPerSymbol', spc/decimationFactor); fineCompensatedOQPSK = fineFrequencyCompensator(coarseCompensatedOQPSK); % Plot QPSK-equivalent finely compensated signal fineCompensatedQPSK = complex(real(fineCompensatedOQPSK(1:end-spc/(2*decimationFactor))), imag(fineCompensatedOQPSK(spc/(2*decimationFactor)+1:end))); % align I and Q release(constellation); constellation.Name = 'Fine frequency compensation (QPSK-Equivalent)'; constellation(fineCompensatedQPSK);
Созвездие теперь ближе к своей идеальной форме, но все еще синхронизация восстановления необходима.
Синхронизация символа происходит согласно алгоритму восстановления синхронизации OQPSK, описанному в [3]. В отличие от восстановления несущей, OQPSK синхронизация алгоритма восстановления эквивалентна своему дубликату QPSK для эквивалентных QPSK сигналов, которые получены путем задержки синфазного компонента сигнала OQPSK наполовину символ.
% Timing recovery of OQPSK signal, via its QPSK-equivalent version symbolSynchronizer = comm.SymbolSynchronizer('Modulation', 'OQPSK', 'SamplesPerSymbol', spc/decimationFactor); syncedQPSK = symbolSynchronizer(fineCompensatedOQPSK); % Plot QPSK symbols (1 sample per chip) release(constellation); constellation.Name = 'Timing Recovery (QPSK-Equivalent)'; constellation(syncedQPSK);
Обратите внимание на то, что выход Синхронизатора Символа содержит одну выборку на символ. На данном этапе созвездие действительно напоминает сигнал QPSK. Несколько символов, которые постепенно переезжают от источника, соответствуют началу и концу системы координат.
Если сигнал синхронизировался, следующий шаг является обнаружением преамбулы, которое более успешно, если сигнал был despreaded. Стоит отметить, что прекрасные результаты компенсации частоты в/2-phase неоднозначности, показывая на истинное созвездие, возможно, вращались 0,/2, или/2 радианы. Обнаружение преамбулы разрешает неоднозначность фазы путем рассмотрения всех четырех возможных вращений созвездия. Следующая функция работает с синхронизируемым сигналом OQPSK, выполняет соединение despreading, разрешение неоднозначности фазы и обнаружения преамбулы, и затем выводит Модуль данных о протоколе MAC (MPDU).
MPDU = lrwpan.PHYDecoderOQPSKAfterSync(syncedQPSK);
Found preamble of OQPSK PHY. Found start-of-frame delimiter (SFD) of OQPSK PHY.
Можно далее исследовать следующий генератор и декодирующие функции, а также объект настройки:
IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)
"Проектируя демодулятор OQPSK", Джонатан Олдс.
Рис, Майкл. Цифровая связь - Подход Дискретного времени. 1-й редактор Нью-Йорк, Нью-Йорк: Prentice Hall, 2008.