В этом примере показано, как выполнить базовое восстановление данных VHT. Это также показывает, как восстановить данные VHT, когда принятый сигнал имеет смещение несущей частоты. Аналогичные процедуры могут использоваться для восстановления данных в форматах HT и non-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);
Найдите индексы 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