Этот пример демонстрирует часы выборки соединения и отслеживание смещения несущей частоты в приемнике WLAN.
Радио WLAN обычно использует один генератор, чтобы вывести часы для выборки и модуляции. Генераторы в радио передатчика и приемника не запускаются на той же самой частоте. Из-за этого несоответствия, несущая частота возмещена (CFO) существует между приемником и передатчиком и моменты выборки в сдвиге приемника относительно передатчика. Этот сдвиг выборки моментов между приемником и передатчиком описан как смещение частоты выборок (SCO). Когда часы выборки в приемнике запускаются медленнее, чем передатчик, это приводит к большему периоду выборки и положительному смещению частоты выборок. Включение пилотных поднесущих в стандарте IEEE® 802.11™ допускает отслеживание и коррекцию ухудшений CFO и SCO.
В системах OFDM SCO проявляется как поднесущая - и зависимое символом вращение фазы и интерференция межнесущей (ICI) [1]. Когда SCO является большим, и пакет длинен, поднесущие далеко от DC испытают существенное ухудшение. CFO проявляется как ICI и зависимое символом вращение фазы, характерное для всех поднесущих. Этот рисунок иллюстрирует вращение фазы на поднесущих от одного символа OFDM до следующего должного к этим ухудшениям. ошибка фазы для индекса поднесущей , количество поднесущих, SCO, смещение несущей частоты, период символа, ошибочный градиент фазы (PEG), и общая ошибка фазы (CPE). ШТЕПСЕЛЬ и CPE могут использоваться, чтобы оценить SCO и остаточный CFO.
В этом примере показано, как продемонстрировать форму волны IEEE 802.11ac™ VHT с фиксированным SCO и ухудшениями CFO [2], и показывает компенсируемое созвездие демодулируемой формы волны, которой повреждают, с и без объединенной синхронизации и отслеживания фазы, чтобы откорректировать для SCO и CFO, чтобы продемонстрировать эффективность отслеживания.
Создайте объект настройки VHT параметрировать передачу. Используйте полезную нагрузку данных с только 500-байтовым и квадратурной амплитудной модуляцией с 16 точками (16-QAM), чтобы произвести небольшое количество символов OFDM и сделать ухудшение легким визуализировать.
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
Создайте случайный PSDU.
s = rng(10); % Seed the random number generator psdu = randi([0 1],cfgVHT.PSDULength*8,1,'int8');
Сгенерируйте пакет VHT.
tx = wlanWaveformGenerator(psdu,cfgVHT);
Смещение частоты выборок частей на миллион (PPM) модели-100 между передатчиком и приемником с помощью comm.SampleRateOffset
.
sco = -100; % Sampling clock offset in PPM
Используйте comm.SampleRateOffset
путем определения желаемой частоты дискретизации возмещен. Смещение частоты дискретизации является относительным перемещением между частотой дискретизации передатчика и приемником. Смещение частоты выборок является относительным перемещением между периодом выборки передатчика и приемником.
sro = -sco/(1+sco/1e6); % Sample rate offset in PPM
Смещение частоты выборок модели, добавляя нули к форме волны, чтобы допускать задержку фильтра.
samplingClockoffset = comm.SampleRateOffset(sro); rx = samplingClockoffset([tx; zeros(100,cfgVHT.NumTransmitAntennas)]);
Добавьте, что остаточная несущая частота возместила форму волны с помощью функции helperFrequencyOffset. Этот пример принимает, что тот же генератор используется для выборки и модуляции, так, чтобы CFO зависел от SCO и несущей частоты.
fc = 5.25e9; % Carrier frequency, Hertz cfo = (sco*1e-6)*fc; % Carrier frequency offset, Hertz fs = wlanSampleRate(cfgVHT); % Baseband sample rate rx = helperFrequencyOffset(rx,fs,cfo); % Add frequency offset
Добавьте шум в форму волны с 30 dBW отклонениями.
awgnChannel = comm.AWGNChannel('NoiseMethod','Variance','Variance',10^(-30/10)); rx = awgnChannel(rx);
Чтобы синхронизировать пакет, при подготовке к восстановлению поля данных, пример выполняет эти шаги обработки.
Обнаружьте пакет
Выполните крупную оценку смещения несущей частоты и коррекцию
Установите символьную синхронизацию
Выполните прекрасную оценку смещения несущей частоты и коррекцию
Демодулируйте L-LTF и оцените шумовую мощность
Демодулируйте VHT-LTF и оцените ответ канала
Сгенерируйте полевые индексы и выполните пакетное обнаружение.
ind = wlanFieldIndices(cfgVHT); tOff = wlanPacketDetect(rx,cfgVHT.ChannelBandwidth);
Выполните крупную коррекцию смещения частоты.
lstf = rx(tOff+(ind.LSTF(1):ind.LSTF(2)),:); coarseCFOEst = wlanCoarseCFOEstimate(lstf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-coarseCFOEst);
Выполните символьную синхронизацию.
nonhtPreamble = rx(tOff+(ind.LSTF(1):ind.LSIG(2)),:); symOff = wlanSymbolTimingEstimate(nonhtPreamble,cfgVHT.ChannelBandwidth); tOff = tOff+symOff;
Выполните прекрасную коррекцию смещения частоты.
lltf = rx(tOff+(ind.LLTF(1):ind.LLTF(2)),:); fineCFOEst = wlanFineCFOEstimate(lltf,cfgVHT.ChannelBandwidth); rx = helperFrequencyOffset(rx,fs,-fineCFOEst);
Выполните оценку канала.
vhtltf = rx(tOff+(ind.VHTLTF(1):ind.VHTLTF(2)),:); vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT); chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT);
Получите оценку канала единого потока.
chanEstSSPilots = vhtSingleStreamChannelEstimate(vhtltfDemod,cfgVHT);
Крупная и прекрасная частота возместила оценку, и коррекция удаляет большинство CFO, но остаточный CFO остается из-за присутствия ухудшений в форме волны. Приемник должен отследить и откорректировать это смещение.
disp('Front-end impairment correction:');
Front-end impairment correction:
frontEndCFOEst = coarseCFOEst+fineCFOEst; disp([' Estimated CFO: ' num2str(frontEndCFOEst,'%.1f') ' Hz']);
Estimated CFO: -525209.0 Hz
residualCFO = cfo-frontEndCFOEst; disp([' Residual CFO after initial correction: ' num2str(residualCFO,'%.1f') ' Hz']);
Residual CFO after initial correction: 209.0 Hz
Используйте функцию trackingVHTDataRecover, чтобы восстановить поле данных VHT с дополнительным пилотом, отслеживающим, чтобы откорректировать для синхронизации и ошибок фазы из-за SCO и CFO. Управляйте экспериментальным отслеживанием с помощью объекта trackingRecoveryConfig.
Во-первых, восстановитесь, поле данных без экспериментального отслеживания. Извлеките поле данных из формы волны с помощью демонстрационных индексов начала и конца поля на основополосном уровне. Если частота дискретизации приемника выше, чем уровень передатчика, приемник требует большего количества выборок, чем передатчик производит. Чтобы допускать это, извлеките Ne
дополнительные выборки от формы волны и передачи в функцию восстановления. Максимальное количество дополнительных требуемых выборок зависит от ожидаемого SCO, основополосной частоты дискретизации и максимальной пакетной длительности.
Создайте настройку восстановления с экспериментальным отключенным отслеживанием.
cfgRec = trackingRecoveryConfig;
cfgRec.PilotTracking = 'None';
Извлеките поле данных с Ne
дополнительные выборки, чтобы допускать отрицательный SCO.
maxDuration = 5.484e-3; % Maximum packet duration in seconds maxSCO = 120; % PPM Ne = ceil(fs*maxDuration*maxSCO*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,:);
Выполните демодуляцию и декодирование.
[rxPSDUNoTrack,~,eqSymNoTrack] = trackingVHTDataRecover(data,chanEst,chanEstSSPilots,cfgVHT,cfgRec);
Постройте компенсируемое созвездие. Этот график показывает вращение всех точек созвездия, вызванных остаточным CFO, и распространение созвездия указывает из-за SCO. Несмотря на скромный AWGN, добавленный к форме волны, ухудшения вызывают битовые ошибки в декодируемом PSDU.
ConstNoTrack = comm.ConstellationDiagram;
ConstNoTrack.Title = 'Equalized symbols with no pilot tracking';
ConstNoTrack.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);
ConstNoTrack(eqSymNoTrack(:));
release(ConstNoTrack)
[~,berNoTrack] = biterr(rxPSDUNoTrack,psdu);
disp('Bit error rate:');
Bit error rate:
disp([' Without tracking: ' num2str(berNoTrack)]);
Without tracking: 0.066964
Теперь восстановите поле данных с объединенной синхронизацией и пилотом фазы, отслеживающим, чтобы откорректировать для SCO и остаточного CFO.
Алгоритм отслеживания в этом примере оценивает абсолютные значения и на символ OFDM и применяется на поднесущую и коррекцию фазы символа к демодулируемым символам, чтобы исправить ошибки фазы, вызванные SCO и CFO. Алгоритм вычисляет ошибку фазы между каждой полученной пилотной поднесущей и ожидаемым значением на символ, усредненный по PilotTrackingWindow
Символы OFDM. От этого значения алгоритм вычисляет оценки наименьшего квадрата и на символ и использование эти оценки, чтобы применить коррекцию фазы к каждому символу и поднесущей [3,4].
Создайте настройку восстановления с экспериментальным включенным отслеживанием.
cfgRec = trackingRecoveryConfig; cfgRec.PilotTracking = 'Joint'; % Joint timing and phase tracking cfgRec.PilotTrackingWindow = 9; % Averaging window in OFDM symbols
Выполните демодуляцию и декодирование.
[rxPSDU,~,eqSymTrack,cpe,peg] = trackingVHTDataRecover(data,chanEst,chanEstSSPilots,cfgVHT,cfgRec);
Постройте компенсируемое созвездие. Это показывает ясное 16-QAM созвездие без распространения или вращения. Декодируемый PSDU не содержит битовых ошибок.
ConstTrack = comm.ConstellationDiagram;
ConstTrack.Title = 'Equalized symbols with joint pilot tracking';
ConstTrack.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);
ConstTrack(eqSymTrack(:));
release(ConstTrack)
[~,berTrack] = biterr(rxPSDU,psdu);
disp([' With tracking: ' num2str(berTrack)]);
With tracking: 0
trackingVHTDataRecover функция возвращает измерения, от которых могут быть оценены остаточный CFO и SCO:
cpe
- Общая ошибка фазы (радианы) на символ
peg
- Ошибочный градиент фазы (радианы на поднесущую) на символ
Оцените SCO и остаточный CFO от этих измерений с помощью линейного припадка наименьшего квадрата скорости изменения. Функция trackingPlotSCOCFOEstimates выполняет эти измерения, и постройте результаты.
[residualCFOEst,scoEst] = trackingPlotSCOCFOEstimates(cpe,peg,cfgVHT);
fprintf('Tracked impairments:\n');
Tracked impairments:
fprintf(' Estimated residual CFO: %3.1f Hz (%.1f Hz error)\n', ... residualCFOEst,residualCFOEst-residualCFO);
Estimated residual CFO: 198.9 Hz (-10.1 Hz error)
fprintf(' Estimated SCO: %3.1f PPM (%.1f PPM error)\n',scoEst,scoEst-sco);
Estimated SCO: -98.3 PPM (1.7 PPM error)
cfoEst = frontEndCFOEst+residualCFOEst; % Initial + tracked CFO estimate fprintf('Estimated CFO (initial + tracked): %.1f Hz (%.1f Hz error)\n',cfoEst,cfoEst-cfo);
Estimated CFO (initial + tracked): -525010.1 Hz (-10.1 Hz error)
rng(s); % Restore the state of the random number generator
В этом примере показано, как можно отследить и откорректировать часы выборки и смещения несущей частоты при восстановлении поля данных формы волны WLAN.
Этот пример использует функции восстановления поля данных с объединенным экспериментальным отслеживанием для VHT, HT-MF и форматов non-HT и объекта сконфигурировать алгоритмы восстановления.
Видеть, что пример экспериментального отслеживания для пакетов формата HE видит Процедуру Восстановления для 802.11ax Пакетный пример.
Speth, M., С.А. Фечтель, Г. Фок и Х. Меир. “Оптимальный Проект Приемника для Беспроводных Широкополосных Систем Используя OFDM. I. Транзакции IEEE на Коммуникациях 47, № 11 (ноябрь 1999): 1668–77. https://doi.org/10.1109/26.803501.
Станд. IEEE 802.11™-2016 (Версия Станд. IEEE 802.11-2012). “Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования”. Стандарт IEEE для Информационных технологий — Телекоммуникации и обмен информацией между системами. Локальные сети и городские компьютерные сети — Конкретные требования.
Chiueh, Tzi-Dar, Пэй-Юнь Тсай, Лай. И-Вэй и Ци-Дэр Чиуех. Основополосный Проект Приемника для Wireless MIMO-OFDM Communications. 2-й редактор Хобокен, Нью-Джерси: J. Wiley & Sons, 2012.
Horlin, François и Андрэ Бурду. Цифровая компенсация за аналоговые фронтенды: новый подход к беспроводному проекту приемопередатчика. Чичестер, Западный Сассекс ; Хобокен, NJ: J. Wiley & Sons, 2008.