Этот пример демонстрирует уровень выборки соединения и отслеживание смещения несущей частоты в получателе 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.