В этом примере показано, как сгенерировать, передайте, восстановите и просмотрите форму волны VHT MIMO.
Шаги в примере:
Передайте форму волны VHT через канал MIMO с AWGN
Выполните процесс 2D этапа, чтобы оценить и откорректировать для смещения частоты
Оцените ответ канала
Восстановите поле данных VHT
Сравните переданный и полученный PSDUs, чтобы определить, произошли ли битовые ошибки
Установите параметры, используемые в примере.
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 2 000.
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