Основные шаги восстановления данных VHT

В этом примере показано, как выполнить основное восстановление данных VHT. Это также показывает, как восстановить данные VHT, когда полученному сигналу возмещали несущую частоту. Подобные процедуры могут использоваться, чтобы восстановить данные с HT и форматами non-HT.

Восстановление основных данных

WLAN Toolbox™ обеспечивает функции, чтобы сгенерировать и восстановить стандарты IEEE® 802.11ac™ совместимые формы волны. Восстановление данных выполняется этими шагами:

  1. Сгенерируйте форму волны VHT

  2. Передайте форму волны через канал

  3. Извлеките VHT-LTF и демодулируйте

  4. Оцените канал при помощи демодулируемого VHT-LTF

  5. Извлеките поле данных

  6. Восстановите данные при помощи канала и шумовых оценок отклонения

Блок-схема показывает эти шаги, наряду с их соответствующими командами.

Создайте объект настройки формата VHT.

vht = wlanVHTConfig;

Создайте форму волны передачи VHT при помощи объекта настройки VHT. Установите последовательность данных на [1;0;1;1]. Последовательность данных повторяется, чтобы сгенерировать конкретное количество пакетов.

txSig = wlanWaveformGenerator([1;0;1;1],vht);

Передайте полученный сигнал через канал AWGN.

rxSig = awgn(txSig,10);

Определите полевые индексы формы волны.

ind = wlanFieldIndices(vht);

Извлеките VHT-LTF из полученного сигнала.

rxVHTLTF = rxSig(ind.VHTLTF(1):ind.VHTLTF(2),:);

Демодулируйте VHT-LTF. Оцените ответ канала при помощи демодулируемого сигнала.

demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,vht);
chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,vht);

Извлеките поле данных VHT.

rxData = rxSig(ind.VHTData(1):ind.VHTData(2),:);

Восстановите информационные биты при помощи канала и шумовых оценок отклонения. Подтвердите что первое соответствие на 8 битов два повторения последовательности входных данных [1;0;1;1].

rxBits = wlanVHTDataRecover(rxData,chEst,0.1,vht);

rxBits(1:8)
ans = 8x1 int8 column vector

   1
   0
   1
   1
   1
   0
   1
   1

Восстановление данных с коррекцией частоты

Восстановление данных, когда смещение несущей частоты присутствует, выполняется этими шагами:

  1. Сгенерируйте форму волны VHT

  2. Передайте форму волны через канал

  3. Извлеките L-STF и выполните крупную оценку смещения частоты

  4. Правильный для смещения при помощи крупной оценки

  5. Извлеките L-LTF и выполните прекрасную оценку смещения частоты

  6. Правильный для смещения при помощи прекрасной оценки

  7. Извлеките VHT-LTF и демодулируйте

  8. Оцените канал при помощи демодулируемого VHT-LTF

  9. Извлеките поле данных

  10. Восстановите данные при помощи канала и шумовых оценок отклонения

Блок-схема показывает эти шаги, наряду с их соответствующими командами.

Установите пропускную способность канала и частоту дискретизации.

cbw = 'CBW160';
fs = 160e6;

Создайте объект настройки VHT что поддержки 2x2 передача MIMO.

vht = wlanVHTConfig('ChannelBandwidth',cbw, ...
    'NumTransmitAntennas',2,'NumSpaceTimeStreams',2);

Сгенерируйте форму волны VHT, содержащую случайный PSDU.

txPSDU = randi([0 1],vht.PSDULength*8,1);
txSig = wlanWaveformGenerator(txPSDU,vht);

Создайте 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(vht);

Извлеките 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,vht);
chEst = wlanVHTLTFChannelEstimate(demodVHTLTF,vht);

Извлеките поле данных VHT из полученного и откорректированного частотой PPDU. Восстановите поле данных.

rxData = rxSig2(ind.VHTData(1):ind.VHTData(2),:);
rxPSDU = wlanVHTDataRecover(rxData,chEst,0.03,vht);

Вычислите количество битовых ошибок в полученном пакете.

numErr = biterr(txPSDU,rxPSDU)
numErr = 2