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

В этом примере показано, как реализовать практический приемник 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. Несколько символов, которые постепенно переезжают от источника, соответствуют началу и концу системы координат.

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

Если сигнал синхронизировался, следующий шаг является обнаружением преамбулы, которое более успешно, если сигнал был despreaded. Стоит отметить, что прекрасные результаты компенсации частоты в$\pi$/2-phase неоднозначности, показывая на истинное созвездие, возможно, вращались 0,$\pi$/2$\pi$, или$3\pi$/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.

Для просмотра документации необходимо авторизоваться на сайте