В этом примере показано, как реализовать практический IEEE ® 802.15.4™ PHY-приемник, декодирующий OQPSK-сигналы, которые могли быть приняты от беспроводных радиостанций, с использованием библиотеки Communications Toolbox™ Library для протокола ZigBee ®. Этот практический приемник декодировал стандартные формы сигналов, полученные от коммерческих радиоприемников ZigBee, что позволяет автоматизировать дома в диапазоне 2,4 ГГц, используя радио USRP ® B200-mini и пакет поддержки Communications Toolbox для радио USRP ®.
Стандарт IEEE 802.15.4 определяет уровни MAC и PHY низкоскоростных беспроводных персональных сетей (LR-WPAN) [1]. Уровни IEEE 802.15.4 MAC и PHY обеспечивают основу для других стандартов более высокого уровня, таких как ZigBee, StartHart ®, 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
Согласованный фильтр улучшает SNR сигнала. В PHY OQPSK 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-mini.
Диаграммы созвездий могут проиллюстрировать качество принимаемого сигнала, но прежде важно отметить, что траектория идеального сигнала 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' -образную область, соединяющую четыре символа 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» -образной области из-за сдвигов частоты:
% 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] на основе БПФ, который преобразует в квадрат сигнал ОКПСК и обнаруживает два спектральных пика. Грубый сдвиг частоты получают путем усреднения и уменьшения вдвое частот двух спектральных пиков.
% 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» -образной области, соединяющей начало координат с 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. Несколько символов, которые постепенно отходят от начала координат, соответствуют началу и концу кадра.
Как только сигнал синхронизирован, следующим этапом является обнаружение преамбулы, которое является более успешным, если сигнал был сжат. Стоит отметить, что тонкая компенсация частоты приводит к
неоднозначности фазы/2, указывающей на то, что истинная совокупность могла быть повернута на 0 ,/
2
или/2
радиан. Обнаружение преамбулы разрешает фазовую неоднозначность, рассматривая все четыре возможных поворота созвездий. Следующая функция работает на синхронизированном сигнале OQPSK, выполняет совместное сжатие, разрешение фазовой неоднозначности и обнаружение преамбулы, а затем выводит блок данных протокола 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-WPAN)
«Проектирование демодулятора OQPSK», Джонатан Олдс.
Райс, Майкл. Цифровая связь - дискретно-временной подход. 1-й ред. Нью-Йорк, Нью-Йорк: Прентис Холл, 2008.