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

Извлеките L-LTF из полученного PPDU, используя индексы начала и остановки, определенные 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);
failCRCfailCRC = 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