Этот пример демонстрирует частоту дискретизации соединений и отслеживание смещения частоты несущей в приемнике WLAN.
В радио WLAN один генератор обычно используется для вывода синхроимпульсов для дискретизации и модуляции. Генераторы в радиоприемниках передатчика и приемника работают не на точно такой же частоте. Из-за этого несоответствия моменты дискретизации в приемник смещаются относительно передатчика. Поэтому между приемником и передатчиком существует смещение скорости дискретизации (SRO). Аналогично, смещение несущей частоты (CFO) существует между приемником и передатчиком из-за несоответствия несущих частот. Включение пилотных поднесущих в стандарт IEEE ® 802.11™ позволяет отслеживать и коррекция искажения SRO и CFO.
В системах OFDM SRO проявляется как поднесущая и зависимое от символа вращение фазы и межнесущая интерференция (ICI) [1]. Когда SRO является большой и пакет длинный, поднесущие, удаленные от DC, будут испытывать существенное ухудшение. CFO проявляется как ICI и зависимое от символа вращение фазы, общее для всех поднесущих. Вращение фазы на поднесущих от одного символа OFDM к следующему из-за этих нарушений показано ниже. - фазовая ошибка, - индекс поднесущей, - количество поднесущих. является SRO, является смещением несущей частоты, является периодом символа, является градиентом фазовой ошибки (PEG) и является общей фазовой ошибкой (CPE). PEG и CPE могут использоваться для оценки SRO и остаточного CFO.
В этом примере сигнал IEEE 802.11ac™ VHT генерируется с фиксированными ослаблениями SRO и CFO [2]. Ослабленная форма волны синхронизируется, и фрагмент данных демодулируется и декодируется с и без совместного синхронизации и отслеживания фазы для коррекции SRO и CFO. Уравненное созвездие с отслеживанием и без него показано, чтобы продемонстрировать эффективность отслеживания.
Для параметризации передачи создается объект строения VHT. Поскольку нарушения легче визуализировать с меньшим количеством символов OFDM, полезная нагрузка данных только с 500 байтами передается с помощью 16-QAM модуляции.
% Create a VHT configuration cfgVHT = wlanVHTConfig; cfgVHT.ChannelBandwidth = 'CBW20'; cfgVHT.NumTransmitAntennas = 1; cfgVHT.NumSpaceTimeStreams = 1; cfgVHT.MCS = 4; % 16-QAM and 3/4 coding rate cfgVHT.APEPLength = 500; % Bytes % Create a random PSDU s = rng(10); % Seed the random number generator psdu = randi([0 1],cfgVHT.PSDULength*8,1,'int8'); % Generate a VHT packet tx = wlanWaveformGenerator(psdu,cfgVHT);
Смещение скорости дискретизации между передатчиком и приемником моделируется повторной дискретизацией переданной формы волны. The resample
функция может использоваться, чтобы смоделировать ограниченную область значений больших смещений частоты дискретизации. В этом примере моделируется смещение скорости выборки -100 частей на миллион (PPM).
% Model sample rate offset p = 1e4; % Interpolation factor q = 1e4-1; % Decimation factor sro = (1-p/q)*1e6; disp('Impairments:'); disp([' Sample rate offset (SRO): ' num2str(sro,'%.1f') ' PPM']); % Resample the waveform, appending zeros to allow for filter delay N = 100; % Size of filter used for resampling rx = resample([tx; zeros(N,cfgVHT.NumTransmitAntennas)],p,q,N);
Impairments: Sample rate offset (SRO): -100.0 PPM
Смещение остаточной несущей частоты добавляется к форме волны с помощью функции helperFrequencyOffset. В этом примере мы предполагаем, что тот же генератор используется для дискретизации и модуляции, поэтому CFO будет функцией SRO и несущей частоты.
fc = 5.25e9; % Carrier frequency, Hertz cfo = (sro*1e-6)*fc; % Carrier frequency offset, Hertz disp([' Carrier frequency offset (CFO): ' num2str(cfo,'%.1f') ' Hz']); fs = wlanSampleRate(cfgVHT); % Baseband sample rate rx = helperFrequencyOffset(rx,fs,cfo); % Add frequency offset
Carrier frequency offset (CFO): -525052.5 Hz
Шум добавляется к форме волны с отклонением 30 дБВ.
awgnChannel = comm.AWGNChannel('NoiseMethod','Variance','Variance',10^(-30/10)); rx = awgnChannel(rx);
Следующие шаги обработки выполняются для синхронизации пакета в процессе подготовки к восстановлению поля данных.
Пакет обнаружен
Оценка и коррекция смещения частоты грубой несущей
Устанавливается временная синхронизация символов
Хорошее смещение частоты несущей оценивается и корректируется
L-LTF является демодулированным OFDM, и выполняется оценка шума
VHT-LTF демодулирован OFDM, и выполняется оценка канала
% Generate field indices ind = wlanFieldIndices(cfgVHT); % Packet detection tOff = wlanPacketDetect(rx,cfgVHT.ChannelBandwidth); % Coarse frequency offset correction lstf = rx(tOff+(ind.LSTF(1):ind.LSTF(2)),:); coarseCFOEst = wlanCoarseCFOEstimate(lstf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-coarseCFOEst); % Symbol timing synchronization nonhtPreamble = rx(tOff+(ind.LSTF(1):ind.LSIG(2)),:); symOff = wlanSymbolTimingEstimate(nonhtPreamble,cfgVHT.ChannelBandwidth); tOff = tOff+symOff; % Fine frequency offset correction lltf = rx(tOff+(ind.LLTF(1):ind.LLTF(2)),:); fineCFOEst = wlanFineCFOEstimate(lltf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-fineCFOEst); % Channel estimation vhtltf = rx(tOff+(ind.VHTLTF(1):ind.VHTLTF(2)),:); vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT); chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT); % Get single stream channel estimate chanEstSSPilots = vhtSingleStreamChannelEstimate(vhtltfDemod,cfgVHT);
Грубая и мелкая оценка смещения частоты и коррекция удаляют большую часть CFO, но остаточная CFO остается из-за наличия нарушений в форме волны. Это должно быть отслежено и исправлено приемником.
disp('Front-end impairment correction:'); frontEndCFOEst = coarseCFOEst+fineCFOEst; disp([' Estimated CFO: ' num2str(frontEndCFOEst,'%.1f') ' Hz']); residualCFO = cfo-frontEndCFOEst; disp([' Residual CFO after initial correction: ' num2str(residualCFO,'%.1f') ' Hz']);
Front-end impairment correction: Estimated CFO: -524764.3 Hz Residual CFO after initial correction: -288.2 Hz
Функция trackingVHTDataRecover восстанавливает поле данных VHT с опциональным отслеживанием пилот-сигнала, чтобы исправить ошибки синхронизации и фазы из-за SRO и CFO. Отслеживанием пилотов управляет объект trackingRecoveryConfig.
Поле данных сначала восстанавливается без отслеживания пилот-сигнала. Поле данных извлекается из формы волны с помощью начала и конца выборочных индексов поля со скоростью основной полосы частот. Если частота дискретизации получателя выше, чем скорость передатчика, приемник требует больше выборок, чем производит передатчик. Чтобы разрешить это, Ne
дополнительные выборки извлекают из формы волны и передают в функцию восстановления. Максимальное количество требуемых дополнительных выборок является функцией ожидаемой SRO, частоты дискретизации основной полосы частот и максимальной длительности пакета.
% Recovery configuration with pilot tracking disabled cfgRec = trackingRecoveryConfig; cfgRec.PilotTracking = 'None'; % Extract data field with Ne additional samples to allow for negative SRO maxDuration = 5.484e-3; % Maximum packet duration in seconds maxSRO = 120; % PPM Ne = ceil(fs*maxDuration*maxSRO*1e-6); % Number of extra samples dataInd = tOff+(ind.VHTData(1):ind.VHTData(2)+Ne); dataInd = dataInd(dataInd<=length(rx)); % Only use indices within waveform data = rx(dataInd,:); % Perform demodulation and decoding [rxPSDUNoTrack,~,eqSymNoTrack] = trackingVHTDataRecover(data,chanEst,chanEstSSPilots,cfgVHT,cfgRec);
Выравниваемое созвездие нанесено, что показывает поворот всех точек созвездия, вызванный невязкой CFO, и расширение точек созвездия из-за SRO. Несмотря на скромный AWGN, добавленный к форме волны, нарушения вызывают битовые ошибки в декодированном PSDU.
ConstNoTrack = comm.ConstellationDiagram; ConstNoTrack.Title = 'Equalized symbols with no pilot tracking'; ConstNoTrack.ReferenceConstellation = wlanReferenceSymbols(cfgVHT); ConstNoTrack(eqSymNoTrack(:)); [~,berNoTrack] = biterr(rxPSDUNoTrack,psdu); disp('Bit error rate:'); disp([' Without tracking: ' num2str(berNoTrack)]);
Bit error rate: Without tracking: 0.091022
Теперь поле данных восстанавливается с помощью отслеживания времени и фазы управления для коррекции для SRO и остаточного CFO.
Алгоритм отслеживания, используемый в этом примере, оценивает абсолютные значения и на символ OFDM и применяет коррекцию фазы по поднесущей и символу к демодулированным символам, чтобы обратить вспять фазовые ошибки, вызванные SRO и CFO. Фазовая ошибка между каждой принятой поднесущей пилот-сигнала и ожидаемым значением вычисляется на символ и усредняется по PilotTrackingWindow
Символы OFDM. Из этого наименьшие квадратные оценки и вычисляются на символ. Эти оценки используются для применения коррекции фазы к каждому символу и поднесущей [3, 4].
% Recovery configuration with pilot tracking enabled cfgRec = trackingRecoveryConfig; cfgRec.PilotTracking = 'Joint'; % Joint timing and phase tracking cfgRec.PilotTrackingWindow = 9; % Averaging window in OFDM symbols % Perform demodulation and decoding [rxPSDU,~,eqSymTrack,cpe,peg] = trackingVHTDataRecover(data,chanEst,chanEstSSPilots,cfgVHT,cfgRec);
Выровненное созвездие построено, что показывает четкое 16-QAM созвездие без распространения или вращения. Битовые ошибки отсутствуют.
ConstTrack = comm.ConstellationDiagram; ConstTrack.Title = 'Equalized symbols with joint pilot tracking'; ConstTrack.ReferenceConstellation = wlanReferenceSymbols(cfgVHT); ConstTrack(eqSymTrack(:)); [~,berTrack] = biterr(rxPSDU,psdu); disp([' With tracking: ' num2str(berTrack)]);
With tracking: 0
Функция trackingVHTDataRecover возвращает измерения, из которых могут быть оценены остаточные CFO и SRO:
cpe
- Общая фазовая ошибка (радианы) на символ
peg
- фаза градиент ошибки (радианы на поднесущую) на символ
SRO и остаточный CFO оцениваются по этим измерениям с помощью линейной наименьшей квадратной подгонки скорости изменения. Измерения строятся с помощью функции trackingPlotSROCFOEstimates.
[residualCFOEst,sroEst] = trackingPlotSROCFOEstimates(cpe,peg,cfgVHT); % Display estimated SRO, residual CFO and total CFO fprintf('Tracked impairments:\n'); fprintf(' Estimated residual CFO: %3.1f Hz (%.1f Hz error)\n', ... residualCFOEst,residualCFOEst-residualCFO); fprintf(' Estimated SRO: %3.1f PPM (%.1f PPM error)\n',sroEst,sroEst-sro); cfoEst = frontEndCFOEst+residualCFOEst; % Initial + tracked CFO estimate fprintf('Estimated CFO (initial + tracked): %.1f Hz (%.1f Hz error)\n',cfoEst,cfoEst-cfo); rng(s); % Restore the state of the random number generator
Tracked impairments: Estimated residual CFO: -260.5 Hz (27.8 Hz error) Estimated SRO: -101.2 PPM (-1.2 PPM error) Estimated CFO (initial + tracked): -525024.8 Hz (27.8 Hz error)
В этом примере показано, как можно отслеживать и корректировать частоту дискретизации и смещения частоты несущей при восстановлении поля данных формы волны WLAN.
Функции восстановления поля данных с совместным отслеживанием пилот-сигналов для форматов VHT, HT-MF и не-HT предусмотрены в этом примере, наряду с объектом, чтобы сконфигурировать алгоритмы восстановления:
Чтобы увидеть пример отслеживания пилот-сигналов для пакетов формата HE, смотрите Процедуру восстановления для пакета 802.11ax.
В этом примере используются следующие вспомогательные функции:
Спет, Майкл и др. Оптимальный проект приемника для беспроводных широкополосных систем, использующих OFDM. Транзакции IEEE по сообщениям 47.11 (1999): 1668-1677.
Стандарт IEEE Std 802.11™-2016 IEEE на информационные технологии - Телекоммуникации и обмен информацией между системами - Локальные и столичные сети - Особые требования - Часть 11: Беспроводное управление доступом к среде локальной сети (MAC) и физический слой (PHY) Спецификации.
Чиуех, Ци-Дар, Пэй-Юн Цай, и И-Вэй Лай. Проект приемника основной полосы для беспроводной связи MIMO-OFDM. John Wiley & Sons, 2012.
Horlin, P.F. and Bourdoux, A. Цифровая компенсация для аналоговых фронтэндов: новый подход к проекту беспроводных приемопередатчиков. Уайли, 2008.