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