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

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