В этом примере показано, как выполнить базовое восстановление данных VHT. Он также показывает, как восстанавливать данные VHT, когда принятый сигнал имеет смещение несущей частоты. Аналогичные процедуры могут использоваться для восстановления данных с форматами HT и не-HT.
WLAN Toolbox™ предоставляет функции для генерации и восстановления форм сигналов, совместимых со стандартами IEEE ® 802.11ac™. Процесс восстановления данных включает в себя следующие этапы.
Формирование сигнала VHT
Прохождение сигнала через канал
Извлечение VHT-LTF и демодуляция
Оценка канала с использованием демодулированного VHT-LTF
Извлеките поле данных
Восстановление данных с использованием оценок дисперсии канала и шума
На блок-схеме показаны эти шаги вместе с соответствующими командами.

Создание объекта конфигурации VHT.
cfg = wlanVHTConfig;
Создайте сигнал передачи VHT с помощью объекта конфигурации VHT. Установите последовательность данных в значение [1;0;1;1]. Функция генератора формы сигнала повторяет последовательность данных для генерации заданного количества пакетов.
txSig = wlanWaveformGenerator([1;0;1;1],cfg);
Передача принятого сигнала через канал AWGN.
rxSig = awgn(txSig,10);
Определите индексы поля формы сигнала.
ind = wlanFieldIndices(cfg);
Извлеките VHT-LTF из принятого сигнала.
rxVHTLTF = rxSig(ind.VHTLTF(1):ind.VHTLTF(2),:);
Демодулируйте VHT-LTF. Оцените отклик канала, используя демодулированный сигнал.
demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,cfg); chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,cfg);
Извлеките поле данных VHT.
rxData = rxSig(ind.VHTData(1):ind.VHTData(2),:);
Восстановите информационные биты, используя оценки дисперсии канала и шума. Убедитесь, что первые 8 битов соответствуют двум повторениям последовательности входных данных [1;0;1;1].
rxBits = wlanVHTDataRecover(rxData,chEst,0.1,cfg); rxBits(1:8)
ans = 8x1 int8 column vector
1
0
1
1
1
0
1
1
Восстановление данных, когда присутствует смещение несущей частоты, осуществляется с помощью этих этапов.
Формирование сигнала VHT
Прохождение сигнала через канал
Извлеките L-STF и выполните оценку грубого сдвига частоты
Исправить смещение с помощью грубой оценки
Извлеките L-LTF и выполните точную оценку сдвига частоты
Исправить смещение с помощью точной оценки
Извлечение VHT-LTF и демодуляция
Оценка канала с использованием демодулированного VHT-LTF
Извлеките поле данных
Восстановление данных с использованием оценок дисперсии канала и шума
На блок-схеме показаны эти шаги вместе с соответствующими командами.

Установите полосу пропускания канала и частоту дискретизации.
cbw = 'CBW160';
fs = 160e6;Создайте объект конфигурации VHT, поддерживающий передачу MIMO 2x2.
cfg = wlanVHTConfig('ChannelBandwidth',cbw, ... 'NumTransmitAntennas',2,'NumSpaceTimeStreams',2);
Формирование сигнала VHT, содержащего случайный PSDU.
txPSDU = randi([0 1],cfg.PSDULength*8,1); txSig = wlanWaveformGenerator(txPSDU,cfg);
Создайте канал 2x2 TGac.
tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw, ... 'NumTransmitAntennas',2,'NumReceiveAntennas',2);
Создайте объект сдвига фазы и частоты.
pfOffset = comm.PhaseFrequencyOffset('SampleRate',fs,'FrequencyOffsetSource','Input port');
Пропускают передаваемый сигнал через шумный канал TGac.
rxSigNoNoise = tgacChan(txSig); rxSig = awgn(rxSigNoNoise,15);
Ввести сдвиг частоты 500 Гц в принятый сигнал.
rxSigFreqOffset = pfOffset(rxSig,500);
Найдите индексы запуска и остановки для всех полей компонентов PPDU.
ind = wlanFieldIndices(cfg);
Извлеките L-STF. Оцените и исправьте смещение несущей частоты.
rxLSTF = rxSigFreqOffset(ind.LSTF(1):ind.LSTF(2),:); foffset1 = wlanCoarseCFOEstimate(rxLSTF,cbw); rxSig1 = pfOffset(rxSigFreqOffset,-foffset1);
Извлеките L-LTF из скорректированного сигнала. Оцените и исправьте смещение остаточной частоты.
rxLLTF = rxSig1(ind.LLTF(1):ind.LLTF(2),:); foffset2 = wlanFineCFOEstimate(rxLLTF,cbw); rxSig2 = pfOffset(rxSig1,-foffset2);
Извлеките и демодулируйте VHT-LTF. Оцените коэффициенты канала.
rxVHTLTF = rxSig2(ind.VHTLTF(1):ind.VHTLTF(2),:); demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,cfg); chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,cfg);
Извлеките поле данных VHT из принятого и скорректированного по частоте PPDU. Восстановите поле данных.
rxData = rxSig2(ind.VHTData(1):ind.VHTData(2),:); rxPSDU = wlanVHTDataRecover(rxData,chEst,0.03,cfg);
Вычислите количество битовых ошибок в полученном пакете.
numErr = biterr(txPSDU,rxPSDU)
numErr = 2