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

Этот пример показывает, как реализовать практический приемник IEEE ® 802.15.4™ PHY, декодирующий формы волны OQPSK, которые могли быть получены от беспроводных радиостанций, используя библиотеку Communications Toolbox™ для протокола ZigBee ®. Этот практический приемник декодировал совместимые со стандартом формы волны, полученные от коммерческих радиоприемников ZigBee, что позволяет выполнить домашнюю автоматизацию в диапазоне 2,4 ГГц с помощью USRP ® B200-mini радио и пакета поддержки Communications Toolbox для радио USRP ®.

Фон

Стандарт IEEE 802.15.4 задает слои MAC и PHY низкоскоростных беспроводных персональных вычислительных сетей (LR-WPAN) [1]. Слои MAC и PHY IEEE 802.15.4 обеспечивают базис других стандартов более высокого уровня, таких как 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

A согласованного фильтра улучшает ОСШ сигнала. 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-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], который квадратурирует сигнал 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', соединяющей источник с символами 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);

Обратите внимание, что выход Symbol Synchronizer содержит по одной выборке на символ. На данном этапе созвездие действительно напоминает сигнал QPSK. Немногие символы, которые постепенно отходят от источника, соответствуют началу и концу системы координат.

Обнаружение преамбулы, подавление и разрешение неоднозначности фазы:

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

  2. «Разработка демодулятора OQPSK», Джонатан Олдс.

  3. Райс, Майкл. Цифровые коммуникации - подход в дискретном времени. 1-й эд. Нью-Йорк, Нью-Йорк: Prentice Hall, 2008.