Сгенерируйте многопользовательскую форму волны VHT

Этот пример показывает, как сгенерировать многопользовательскую форму волны VHT от отдельных компонентов. Это также показывает, как сгенерировать ту же форму волны при помощи функции wlanWaveformGenerator. Поля данных от двух подходов сравнены и показаны быть идентичными.

Создайте объект настройки VHT, имеющий 3 пользователей и 3 антенны передачи.

vht = wlanVHTConfig('NumUsers',3,'NumTransmitAntennas',3);

Определите номер пространственно-временных потоков к векторному [1 1 1], который указывает, что каждый пользователь присвоен один пространственно-временной поток. Установите пользовательские положения на [0 1 2]. Установите ID группы на 5. Значения идентификаторов группы от 1 до 62 применяются к многопользовательской операции.

vht.NumSpaceTimeStreams = [1 1 1];
vht.UserPositions = [0 1 2];
vht.GroupID = 5;

Установите различное значение MCS для каждого пользователя.

vht.MCS = [0 2 4];

Установите длину APEP на 2 000, 1400, и 1 800 байтов. Каждый элемент соответствует количеству байтов, присвоенных каждому пользователю.

vht.APEPLength = [2000 1400 1800]
vht = 
  wlanVHTConfig with properties:

       ChannelBandwidth: 'CBW80'
               NumUsers: 3
          UserPositions: [0 1 2]
    NumTransmitAntennas: 3
    NumSpaceTimeStreams: [1 1 1]
         SpatialMapping: 'Direct'
                    MCS: [0 2 4]
          ChannelCoding: 'BCC'
             APEPLength: [2000 1400 1800]
          GuardInterval: 'Long'
                GroupID: 5

   Read-only properties:
             PSDULength: [2000 6008 12019]

Отобразите длины PSDU для этих трех пользователей. Длина PSDU является функцией и длины APEP и значения MCS.

vht.PSDULength
ans = 1×3

        2000        6008       12019

Отобразите полевые индексы для формы волны VHT.

ind = wlanFieldIndices(vht)
ind = struct with fields:
       LSTF: [1 640]
       LLTF: [641 1280]
       LSIG: [1281 1600]
    VHTSIGA: [1601 2240]
     VHTSTF: [2241 2560]
     VHTLTF: [2561 3840]
    VHTSIGB: [3841 4160]
    VHTData: [4161 48000]

Создайте отдельные поля, которые включают форму волны VHT.

lstf = wlanLSTF(vht);
lltf = wlanLLTF(vht);
lsig = wlanLSIG(vht);
[vhtsigA,sigAbits] = wlanVHTSIGA(vht);
vhtstf = wlanVHTSTF(vht);
vhtltf = wlanVHTLTF(vht);
[vhtsigB,sigBbits] = wlanVHTSIGB(vht);

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

bw = bi2de(double(sigAbits(1:2)'))
bw = 2

Значение, 2, соответствует пропускной способности на 80 МГц (см. wlanVHTSIGA).

Извлеките информационные биты VHT-SIG-A 5 - 10 и преобразуйте их в их десятичный эквивалент.

groupid = bi2de(double(sigAbits(5:10)'))
groupid = 5

Извлеченный ID группы, 5, совпадает с соответствующим свойством в объекте настройки VHT.

Извлеките пакетную длину от информационных битов VHT-SIG-B. Для многопользовательской операции с пропускной способностью на 80 МГц первые 19 битов содержат информацию о длине APEP. Преобразуйте длины поля до их десятичных эквивалентов. Умножьте их на 4, потому что длина поля VHT-SIG-B выражается в модулях 4 байтов.

pktLen = bi2de(double(sigBbits(1:19,:)'))*4
pktLen = 3×1

        2000
        1400
        1800

Подтвердите, что извлеченная длина APEP совпадает с набором значений в объекте настройки.

isequal(pktLen',vht.APEPLength)
ans = logical
   1

Извлеките значения MCS от информационных битов VHT-SIG-B. Компонент MCS задан битами 20 - 23.

mcs = bi2de(double(sigBbits(20:23,:)'))
mcs = 3×1

     0
     2
     4

Значения соответствуют установленным в объекте настройки VHT.

Создайте три последовательности данных, один для каждого пользователя.

d1 = randi([0 1],vht.PSDULength(1)*8,1);
d2 = randi([0 1],vht.PSDULength(2)*8,1);
d3 = randi([0 1],vht.PSDULength(3)*8,1);

Сгенерируйте поле данных VHT с помощью этих последовательностей данных.

vhtdata = wlanVHTData({d1 d2 d3},vht);

Сгенерируйте многопользовательскую форму волны VHT с работой с окнами, отключен. Извлеките поле данных от формы волны.

wv = wlanWaveformGenerator({d1 d2 d3},vht,'WindowTransitionTime',0);

wvdata = wv(ind.VHTData(1):ind.VHTData(2),:);

Подтвердите, что два подхода генерации приводят к идентичным результатам.

isequal(vhtdata,wvdata)
ans = logical
   1