Этот пример демонстрирует уровень выборки соединения и отслеживание смещения несущей частоты в получателе WLAN.
В радио WLAN один генератор обычно используется, чтобы вывести часы для выборки и модуляции. Генераторы в радио передатчика и получателя не запускаются на той же самой частоте. Из-за этого несоответствия, моменты выборки в получателе переключают относительно передатчика. Поэтому частота дискретизации возмещена (SRO) существует между получателем и передатчиком. Точно так же несущая частота возмещена (CFO) существует между получателем и передатчиком из-за несовпадающих несущих частот. Включение экспериментальных поднесущих в стандарте IEEE® 802.11™ допускает отслеживание и коррекцию нарушений CFO и SRO.
В системах OFDM SRO проявляется как поднесущая и зависимое вращение фазы символа и интерференция межпоставщика услуг (ICI) [1]. Когда SRO является большим, и пакет длинен, поднесущие далеко от DC испытают существенное нарушение. CFO проявляется как ICI и зависимое вращение фазы символа, характерное для всех поднесущих. Вращение фазы на поднесущих от одного символа OFDM до следующего должного к этим нарушениям проиллюстрировано ниже. ошибка фазы, индекс поднесущей, количество поднесущих. SRO, смещение несущей частоты, период символа, ошибочный градиент фазы (PEG) и общая ошибка фазы (CPE). ШТЕПСЕЛЬ и 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);
Перемещение частоты дискретизации между передатчиком и получателем моделируется путем передискретизации переданной формы волны. Передискретизировать функция может использоваться, чтобы смоделировать ограниченный диапазон смещений уровня большой выборки. В этом примере моделируются-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 dBW отклонениями.
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); % Noise power estimation lltf = rx(tOff+(ind.LLTF(1):ind.LLTF(2)),:); lltfDemod = wlanLLTFDemodulate(lltf,cfgVHT); noiseEst = helperNoiseEstimate(lltfDemod,cfgVHT.ChannelBandwidth,cfgVHT.NumSpaceTimeStreams); % Channel estimation vhtltf = rx(tOff+(ind.VHTLTF(1):ind.VHTLTF(2)),:); vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT); chanEst = wlanVHTLTFChannelEstimate(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,noiseEst,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.086558
Теперь поле данных восстанавливается с объединенной синхронизацией и пилотом фазы, отслеживающим, чтобы откорректировать для 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,noiseEst,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 и форматов non-HT обеспечиваются, наряду с объектом сконфигурировать алгоритмы восстановления:
Этот пример использует следующие функции помощника:
Speth, Майкл, и др. "Оптимальный получатель проектирует для беспроводных широкополосных систем с помощью OFDM". Транзакции IEEE на коммуникациях 47.11 (1999): 1668-1677.
Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.
Chiueh, Tzi-Dar, Пэй-Юнь Тсай и И-Вэй Лай. Основополосный проект получателя для беспроводных коммуникаций MIMO-OFDM. John Wiley & Sons, 2012.
Horlin, P.F. и Bourdoux, A. Цифровая компенсация за аналоговые фронтенды: новый подход к беспроводному проекту приемопередатчика. Вайли, 2008.