Базовое восстановление данных VHT

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

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

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

  1. Сгенерируйте сигнал VHT

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

  3. Извлечение VHT-LTF и демодуляция

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

  5. Извлечение поля данных

  6. Восстановите данные с помощью оценок отклонений канала и шума

На блок схеме показаны эти шаги вместе с соответствующими командами.

Создайте объект строения 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

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

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

  1. Сгенерируйте сигнал VHT

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

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

  4. Исправьте смещение при помощи грубой оценки

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

  6. Исправьте смещение при помощи тонкой оценки

  7. Извлечение VHT-LTF и демодуляция

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

  9. Извлечение поля данных

  10. Восстановите данные с помощью оценок отклонений канала и шума

На блок схеме показаны эти шаги вместе с соответствующими командами.

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

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);

Найдите индексы start и stop для всех полей компонентов 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