Этот пример показывает, как сгенерировать, передать, восстановить и просмотреть сигнал 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, который поддерживает передачу MIMO 2x2 и имеет длину 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);
Найдите индексы start и stop для всех полей компонентов 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