В этом примере показано, как генерировать, передавать, восстанавливать и просматривать форму сигнала VHT MIMO.
Шаги в примере:
Передача сигнала VHT через канал MIMO с AWGN
Выполнение двухэтапного процесса для оценки и корректировки смещения частоты
Оценка отклика канала
Восстановление поля данных VHT
Сравнение переданных и принятых блоков PSDU для определения наличия битовых ошибок
Задайте параметры, используемые в примере.
cbw = 'CBW160'; % Channel bandwidth fs = 160e6; % Sample rate (Hz) ntx = 2; % Number of transmit antennas nsts = 2; % Number of space-time streams nrx = 2; % Number of receive antennas
Создайте объект конфигурации VHT, который поддерживает передачу 2x2 MIMO и имеет длину APEP 2000.
vht = wlanVHTConfig('ChannelBandwidth',cbw,'APEPLength',2000, ... 'NumTransmitAntennas',ntx,'NumSpaceTimeStreams',nsts, ... 'SpatialMapping','Direct','STBC',false);
Формирование сигнала VHT, содержащего случайный PSDU.
txPSDU = randi([0 1],vht.PSDULength*8,1); txPPDU = wlanWaveformGenerator(txPSDU,vht);
Создайте канал 2x2 TGac и канал AWGN.
tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw, ... 'NumTransmitAntennas',ntx,'NumReceiveAntennas',nrx, ... 'LargeScaleFadingEffect','Pathloss and shadowing', ... 'DelayProfile','Model-C'); awgnChan = comm.AWGNChannel('NoiseMethod','Variance', ... 'VarianceSource','Input port');
Создайте объект сдвига фазы/частоты.
pfOffset = comm.PhaseFrequencyOffset('SampleRate',fs,'FrequencyOffsetSource','Input port');
Вычислите дисперсию шума для приемника с показателем шума 9 дБ. Пропускают передаваемый сигнал через шумный канал TGac.
nVar = 10^((-228.6 + 10*log10(290) + 10*log10(fs) + 9)/10); rxPPDU = awgnChan(tgacChan(txPPDU), nVar);
Введите сдвиг частоты 500 Гц.
rxPPDUcfo = pfOffset(rxPPDU,500);
Найдите индексы запуска и остановки для всех полей компонентов PPDU.
ind = wlanFieldIndices(vht);
Извлеките L-STF. Оцените и исправьте смещение несущей частоты.
rxLSTF = rxPPDUcfo(ind.LSTF(1):ind.LSTF(2),:); foffset1 = wlanCoarseCFOEstimate(rxLSTF,cbw); rxPPDUcorr = pfOffset(rxPPDUcfo,-foffset1);
Извлеките L-LTF из скорректированного сигнала. Оцените и исправьте смещение остаточной частоты.
rxLLTF = rxPPDUcorr(ind.LLTF(1):ind.LLTF(2),:); foffset2 = wlanFineCFOEstimate(rxLLTF,cbw); rxPPDU2 = pfOffset(rxPPDUcorr,-foffset2);
Извлеките и демодулируйте VHT-LTF. Оцените коэффициенты канала.
rxVHTLTF = rxPPDU2(ind.VHTLTF(1):ind.VHTLTF(2),:); dLTF = wlanVHTLTFDemodulate(rxVHTLTF,vht); chEst = wlanVHTLTFChannelEstimate(dLTF,vht);
Извлеките поле данных VHT из принятого и скорректированного по частоте PPDU. Восстановите поле данных.
rxVHTData = rxPPDU2(ind.VHTData(1):ind.VHTData(2),:); rxPSDU = wlanVHTDataRecover(rxVHTData,chEst,nVar,vht);
Вычислите количество битовых ошибок в полученном пакете.
numErr = biterr(txPSDU,rxPSDU)
numErr = 0