Сквозная симуляция VHT с частотной коррекцией

Этот пример показывает, как сгенерировать, передать, восстановить и просмотреть сигнал 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