Восстановление сигналов IEEE 802.15.4 OQPSK

Этот пример показывает, как реализовать практический получатель IEEE® 802.15.4™ PHY, декодирующий формы волны OQPSK, которые, возможно, были получены от беспроводных радио, пользуясь Библиотекой Communications Toolbox™ для Протокола ZigBee®. Этот практический получатель декодировал стандартно-совместимые формы волны, полученные от коммерческих радио 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.855 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. Несколько символов, которые постепенно переезжают от источника, соответствуют кадру, запускаются и заканчиваются.

Обнаружение преамбулы, Despreading и Phase Ambiguity Resolution:

Если сигнал синхронизировался, следующий шаг является обнаружением преамбулы, которое более успешно, если сигнал был 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.

Дальнейшее исследование

Можно далее исследовать следующий генератор и декодирующие функции, а также объект настройки:

Выбранная библиография

  1. IEEE 802.15.4-2011 - Стандарт IEEE для Локальных сетей и городских компьютерных сетей - Часть 15.4: Беспроводные Персональные Сети области С низкой ставкой (LR-WPANs)

  2. "Разрабатывая демодулятор OQPSK", Джонатан Олдс.

  3. Рис, Майкл. Цифровая связь - Подход Дискретного времени. 1-й редактор Нью-Йорк, Нью-Йорк: Prentice Hall, 2008.