В этом примере показано, как сгенерировать многопользовательскую форму волны VHT от отдельных компонентов. Это также показывает, как сгенерировать ту же форму волны при помощи wlanWaveformGenerator
функция.
Создайте объект настройки VHT, задав трех пользователей и три антенны передачи.
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
Визуализируйте форму волны путем графического вывода ее величины.
t = ((1:length(wv))'-1)/80e6; plot(t,abs(wv)) xlabel('Time (s)') ylabel('Magnitude')