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

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

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

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

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

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

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

vht.MCS = [0 2 4];

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

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

Извлеченный идентификатор группы 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

Визуализируйте форму волны путем построения графика ее величины.

t = ((1:length(wv))'-1)/80e6;
plot(t,abs(wv))
xlabel('Time (s)')
ylabel('Magnitude')

Figure contains an axes. The axes contains 3 objects of type line.