Передача и восстановление L-SIG, VHT-SIG-A, VHT-SIG-B в канале с замираниями

Передайте сигнал VHT через шумный канал MIMO. Извлеките поля L-SIG, VHT-SIG-A и VHT-SIG-B и проверьте, что они были правильно восстановлены.

Установите параметры, используемые в данном примере.

cbw = 'CBW40';                     % Channel bandwidth
fs = 40e6;                         % Sample rate (Hz)
ntx = 2;                           % Number of transmit antennas
nsts = 2;                          % Number of space-time streams
nrx = 3;                           % 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 с ОСШ = 10 дБ.

tgacChan = wlanTGacChannel('SampleRate',fs,'ChannelBandwidth',cbw, ...
    'NumTransmitAntennas',ntx,'NumReceiveAntennas',nrx, ...
    'LargeScaleFadingEffect','Pathloss and shadowing', ...
    'DelayProfile','Model-C');

chNoise = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (SNR)',...
    'SNR',10);

Передайте сигналы VHT через канал 2x2 TGac и добавьте шум канала AWGN.

rxPPDU = chNoise(tgacChan(txPPDU));

Добавьте дополнительный белый шум, соответствующий приемнику с рисунком шума на 9 дБ. Отклонение шума равно k * T * B * F, где k - константа Больцмана, T - температура окружающей среды, B - полоса пропускания канала (частота дискретизации), а F - рисунок приемника.

nVar = 10^((-228.6+10*log10(290) + 10*log10(fs) + 9 )/10);
rxNoise = comm.AWGNChannel('NoiseMethod','Variance','Variance',nVar);

rxPPDU = rxNoise(rxPPDU);

Найдите индексы start и stop для всех полей компонентов PPDU.

ind = wlanFieldIndices(vht)
ind = struct with fields:
       LSTF: [1 320]
       LLTF: [321 640]
       LSIG: [641 800]
    VHTSIGA: [801 1120]
     VHTSTF: [1121 1280]
     VHTLTF: [1281 1600]
    VHTSIGB: [1601 1760]
    VHTData: [1761 25600]

Преамбула содержится в первых 1760 символах. Постройте график преамбулы.

plot(abs(rxPPDU(1:1760)))

Figure contains an axes. The axes contains an object of type line.

Извлечение L-LTF из полученного PPDU с помощью индексов start и stop, определяемых wlanFieldIndices функция. Демодулируйте L-LTF и оцените коэффициенты канала.

rxLLTF = rxPPDU(ind.LLTF(1):ind.LLTF(2),:);
demodLLTF = wlanLLTFDemodulate(rxLLTF,vht);
chEstLLTF = wlanLLTFChannelEstimate(demodLLTF,vht);

Извлеките поле L-SIG из полученного PPDU и восстановите его информационные биты.

rxLSIG = rxPPDU(ind.LSIG(1):ind.LSIG(2),:);
infoLSIG = wlanLSIGRecover(rxLSIG,chEstLLTF,nVar,cbw);

Проверьте информацию о скорости L-SIG и подтвердите, что последовательность [1 1 0 1] получен. Эта последовательность соответствует скорости передачи данных на 6 МГц, которая используется для всех передач VHT.

rate = infoLSIG(1:4)'
rate = 1x4 int8 row vector

   0   1   1   1

Извлеките VHT-SIG-A и подтвердите, что проверка CRC прошла.

rxVHTSIGA = rxPPDU(ind.VHTSIGA(1):ind.VHTSIGA(2),:);
[infoVHTSIGA,failCRC] = wlanVHTSIGARecover(rxVHTSIGA, ...
    chEstLLTF,nVar,cbw);
failCRC
failCRC = logical
   1

Извлечение и демодуляция VHT-LTF. Используйте демодулированный сигнал для оценки коэффициентов канала, необходимых для восстановления поля VHT-SIG-B.

rxVHTLTF = rxPPDU(ind.VHTLTF(1):ind.VHTLTF(2),:);
demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,vht);
chEstVHTLTF = wlanVHTLTFChannelEstimate(demodVHTLTF,vht);

Извлечение и извлечение VHT-SIG-B.

rxVHTSIGB = rxPPDU(ind.VHTSIGB(1):ind.VHTSIGB(2),:);
infoVHTSIGB = wlanVHTSIGBRecover(rxVHTSIGB,chEstVHTLTF,nVar,cbw);

Проверьте, что длина APEP, содержащаяся в первых 19 битах VHT-SIG-B, соответствует указанной длине 2000 битов.

pktLbits = infoVHTSIGB(1:19)';
pktLen = bi2de(double(pktLbits))*4
pktLen = 1676920