В этом примере показано, как выполнить основное восстановление данных 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 что поддержки 2x2 передача MIMO.
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