Этот пример показывает передачу, и получите обработку для 802.11ac™ многопользовательская нисходящая передача по WINNER II исчезающих каналов. Необходимо загрузить и установить ПОБЕДИТЕЛЯ II Моделей Канала для Дополнения Communications Toolbox™, чтобы запустить этот пример. Только один WINNER II Систем канала object™ необходим, чтобы настроить каналы от одной точки доступа до всех пользователей.
802.11ac поддерживает нисходящий канал (точка доступа к станции) многопользовательские передачи максимум для четырех пользователей и до восьми антенн передачи, чтобы увеличить совокупную пропускную способность ссылки [1]. На основе запланированного времени передачи для пользователя планировщик ищет другие меньшие пакеты, готовые к передаче другим пользователям. При наличии это планирует этих пользователей на том же интервале, который уменьшает полное время, потраченное для нескольких передач.
Эта одновременная передача прибывает в более высокую сложность, потому что успешный прием полезных нагрузок отдельного пользователя требует предварительного кодирования, также известного как конец передачи beamforming. Предварительное кодирование принимает, что информация о состоянии канала (CSI) известна в передатчике. Звучащий пакет, как описано в Передаче 802.11ac Beamforming (WLAN Toolbox) пример, используется, чтобы определить CSI для каждого пользователя в многопользовательской передаче. Каждый из пользователей возвращает их отдельный CSI к формирователю луча. Формирователь луча использует CSI от всех пользователей, чтобы установить предварительное кодирование (пространственное отображение) матрица для последующей передачи данных.
Этот пример использует метод инверсии канала для передачи с тремя пользователями с различным количеством пространственных потоков, выделенных на пользователя и различные параметры уровня на пользователя. Система может быть охарактеризована фигурой ниже.
Пример генерирует многопользовательскую форму волны передачи, передает ее через многопользовательский WINNER II каналов и декодирует полученный сигнал для каждого пользователя вычислить биты по ошибке. До передачи данных пример использует передачу пакета пустых данных (NDP), чтобы звучать как различный канал для каждого пользователя и определяет матрицу перед кодированием под предположением о совершенной обратной связи.
Проверяйте, установлен ли 'ПОБЕДИТЕЛЬ II Моделей Канала для Communications Toolbox' пакет поддержки.
commSupportPackageCheck('CST_WINNER2');
Для 802.11ac позволен максимум восьми пространственных потоков. 8x8 настройка MIMO для трех пользователей используется в этом примере, где у первого пользователя есть три потока, второй имеет один, и третье имеет четыре потока, выделенные ему. Различные параметры уровня и размеры полезной нагрузки для каждого пользователя заданы как векторные параметры для настройки передачи.
s = rng(10); % Set RNG seed for repeatability % Transmission parameters chanBW = 'CBW80'; % Channel bandwidth numUsers = 3; % Number of users numSTSVec = [3 1 4]; % Number of streams per user userPos = [0 1 2]; % User positions mcsVec = [4 6 8]; % MCS per user: 16QAM, 64QAM, 256QAM apepVec = [520 192 856]; % Payload per user, in bytes chCodingVec = {'BCC','LDPC','LDPC'}; % Channel coding per user % Precoding and equalization parameters precodingType = 'ZF'; % Precoding type; ZF or MMSE snr = 47; % SNR in dB eqMethod = 'ZF'; % Equalization method % Create the multiuser VHT format configuration object numTx = sum(numSTSVec); cfgVHTMU = wlanVHTConfig('ChannelBandwidth',chanBW, ... 'NumUsers',numUsers, ... 'NumTransmitAntennas',numTx, ... 'GroupID',2, ... 'NumSpaceTimeStreams',numSTSVec,... 'UserPositions',userPos, ... 'MCS',mcsVec, ... 'APEPLength',apepVec, ... 'ChannelCoding',chCodingVec);
Номер антенн передачи определяется, чтобы быть суммарным итогом всех используемых пространственно-временных потоков. Это не подразумевает пространственно-временного блочного кодирования (STBC), или пространственное расширение используется для передачи.
Для предварительного кодирования звучание канала сначала используется, чтобы определить канал, испытанный пользователями (приемники). Эту информацию о состоянии канала передают обратно в передатчик для него, чтобы использоваться для последующей передачи данных. Это принято, что канал медленно варьируется по этим двум передачам. Для многопользовательских передач тот же NDP (Пустой Пакет Данных) передается каждому из зарегистрированных пользователей [2].
% VHT sounding (NDP) configuration, for same number of streams cfgVHTNDP = wlanVHTConfig('ChannelBandwidth',chanBW, ... 'NumUsers',1, ... 'NumTransmitAntennas',numTx, ... 'GroupID',0, ... 'NumSpaceTimeStreams',sum(numSTSVec),... 'MCS',0, ... 'APEPLength',0);
Количество заданных потоков является суммарным итогом всех пространственно-временных используемых потоков. Это позволяет полному каналу звучаться.
% Generate the null data packet, with no data
txNDPSig = wlanWaveformGenerator([],cfgVHTNDP);
NPDSigLen = size(txNDPSig, 1);
В этом примере, одном comm.WINNER2Channel
Системный объект в ПОБЕДИТЕЛЕ II Моделей Канала для Communications Toolbox™ настраивается, чтобы симулировать три канала различным пользователям. Внутренний офисный (A1) сценарий не угла обзора (NLOS) сконфигурирован для каждого пользователя. С фиксированным профилем задержки степени каждый пользователь испытывает исчезающий канал с 16 путями с самой большой задержкой 175 нас. Каждый пользователь также присвоен низкая мобильность как подходящий для 802.11ac.
Точка доступа использует универсальный круговой массив (UCA) с радиусом 20 см. Каждый пользователь использует универсальную линейную матрицу (ULA) с интервалом 5 см между элементами. Это также принято, что количество каждого пользователя получает антенны, равно количеству пространственно-временных потоков, выделенных им.
% Set up layout parameters for WINNER II channel AA = winner2.AntennaArray('UCA',numTx,0.2); for i = 1:numUsers AA(i+1) = winner2.AntennaArray('ULA',numSTSVec(i),0.05); end STAIdx = 2:(numUsers+1); APIdx = {1}; rndSeed = 12; cfgLayout = winner2.layoutparset(STAIdx,APIdx,numUsers,AA,[],rndSeed); cfgLayout.Pairing = [ones(1,numUsers);2:(numUsers+1)]; % One access point to all users cfgLayout.ScenarioVector = ones(1,numUsers); % A1 scenario for all links cfgLayout.PropagConditionVector = zeros(1,numUsers); % NLOS for i = 1:numUsers % Randomly set velocity for each user v = rand(3,1) - 0.5; cfgLayout.Stations(i+1).Velocity = v/norm(v,'fro'); end % Set up model parameters for WINNER II channel cfgModel = winner2.wimparset; cfgModel.FixedPdpUsed = 'yes'; cfgModel.FixedAnglesUsed = 'yes'; cfgModel.IntraClusterDsUsed = 'no'; cfgModel.RandomSeed = 111; % Repeatability % The maximum velocity for the 3 users is 1m/s. Set up the SampleDensity % field to ensure that the sample rate matches the channel bandwidth. maxMSVelocity = max(cell2mat(cellfun(@(x) norm(x,'fro'), ... {cfgLayout.Stations.Velocity},'UniformOutput',false))); cfgModel.UniformTimeSampling = 'yes'; cfgModel.SampleDensity = round(physconst('LightSpeed')/ ... cfgModel.CenterFrequency/2/(maxMSVelocity/wlanSampleRate(cfgVHTMU))); % Create the WINNER II channel System object WINNERChan = comm.WINNER2Channel(cfgModel,cfgLayout); % Call the info method to check some derived channel parameters chanInfo = info(WINNERChan)
chanInfo = struct with fields: NumLinks: 3 NumBSElements: [8 8 8] NumMSElements: [3 1 4] NumPaths: [16 16 16] SampleRate: [8.0000e+07 8.0000e+07 8.0000e+07] ChannelFilterDelay: [7 7 7] NumSamplesProcessed: 0
Задержка фильтрации канала каждого пользователя хранится с учетом ее компенсации в приемнике. На практике оценка синхронизации символа использовалась бы. В передатчике дополнительные десять все-нулевые выборки добавлены с учетом задержки фильтра канала.
chanDelay = chanInfo.ChannelFilterDelay; numPadZeros = 10; % Set ModelConfig.NumTimeSamples to match the length of the input signal to % avoid warning WINNERChan.ModelConfig.NumTimeSamples = NPDSigLen + numPadZeros; % Sound the WINNER II channel for all users chanOutNDP = WINNERChan([txNDPSig;zeros(numPadZeros,numTx)]); % Add AWGN rxNDPSig = cellfun(@awgn,chanOutNDP, ... num2cell(snr*ones(numUsers,1)),'UniformOutput',false);
Каждый пользователь оценивает, что его собственный канал с помощью полученного NDP сигнализирует, и вычисляет информацию о состоянии канала, которую он может передать обратно в передатчик. Этот пример использует сингулярное разложение канала, который, как замечает каждый пользователь, вычислил обратную связь CSI.
mat = cell(numUsers,1); for uIdx = 1:numUsers % Compute the feedback matrix based on received signal per user mat{uIdx} = vhtCSIFeedback(rxNDPSig{uIdx}(chanDelay(uIdx)+1:end,:), ... cfgVHTNDP,uIdx,numSTSVec); end
Принимая совершенную обратную связь, без потери сжатия или квантования CSI, передатчик вычисляет держащуюся матрицу для передачи данных с помощью или Принуждения Нуля или основанных на Минимальной среднеквадратичной погрешности (MMSE) методов перед кодированием. Оба метода пытаются уравновесить внутрипотоковую интерференцию для пользователя интереса и интерференцию из-за других пользователей. Основанный на MMSE подход избегает шумового улучшения, свойственного от обеспечивающего нуль метода. В результате это выполняет лучше в низком SNRs.
% Pack the per user CSI into a matrix numST = length(mat{1}); % Number of subcarriers steeringMatrix = zeros(numST,sum(numSTSVec),sum(numSTSVec)); % Nst-by-Nt-by-Nsts for uIdx = 1:numUsers stsIdx = sum(numSTSVec(1:uIdx-1))+(1:numSTSVec(uIdx)); steeringMatrix(:,:,stsIdx) = mat{uIdx}; % Nst-by-Nt-by-Nsts end % Zero-forcing or MMSE precoding solution if strcmp(precodingType, 'ZF') delta = 0; % Zero-forcing else delta = (numTx/(10^(snr/10))) * eye(numTx); % MMSE end for i = 1:numST % Channel inversion precoding h = squeeze(steeringMatrix(i,:,:)); steeringMatrix(i,:,:) = h/(h'*h + delta); end % Set the spatial mapping based on the steering matrix cfgVHTMU.SpatialMapping = 'Custom'; cfgVHTMU.SpatialMappingMatrix = permute(steeringMatrix,[1 3 2]);
Случайные биты используются в качестве полезной нагрузки для отдельных пользователей. Массив ячеек используется, чтобы содержать биты данных для каждого пользователя, txDataBits
. Для многопользовательской передачи полезные нагрузки отдельного пользователя дополнены таким образом, что длительность передачи является тем же самым для всех пользователей. Этот дополнительный процесс описан в Разделе 9.12.6 из [1]. В этом примере для простоты полезная нагрузка дополнена нулями, чтобы создать PSDU для каждого пользователя.
% Create data sequences, one for each user txDataBits = cell(numUsers,1); psduDataBits = cell(numUsers,1); for uIdx = 1:numUsers % Generate payload for each user txDataBits{uIdx} = randi([0 1],cfgVHTMU.APEPLength(uIdx)*8,1,'int8'); % Pad payload with zeros to form a PSDU psduDataBits{uIdx} = [txDataBits{uIdx}; ... zeros((cfgVHTMU.PSDULength(uIdx)-cfgVHTMU.APEPLength(uIdx))*8,1,'int8')]; end
Используя настройку формата, cfgVHTMU
, с держащейся матрицей, чтобы сгенерировать многопользовательскую форму волны VHT.
txSig = wlanWaveformGenerator(psduDataBits,cfgVHTMU);
WINNER, который II объектов канала не позволяют размеру входного сигнала изменять когда-то заблокированный, таким образом, мы должны вызвать метод релиза прежде, чем передать форму волны через него. Кроме того, когда мы перезапускаем канал, мы хотим, чтобы он повторно обработал NDP перед формой волны, чтобы точно подражать непрерывности канала. Только фрагмент формы волны выхода канала извлечен для последующей обработки каждого пользователя.
release(WINNERChan); % Set ModelConfig.NumTimeSamples to match the total length of NDP plus % waveform and padded zeros WINNERChan.ModelConfig.NumTimeSamples = ... WINNERChan.ModelConfig.NumTimeSamples + length(txSig) + numPadZeros; % Transmit through the WINNER II channel for all users, with 10 all-zero % samples appended to account for channel filter delay chanOut = WINNERChan([txNDPSig; zeros(numPadZeros,numTx); ... txSig; zeros(numPadZeros,numTx)]); % Extract the waveform output for each user chanOut = cellfun(@(x) x(NPDSigLen+numPadZeros+1:end,:),chanOut,'UniformOutput',false); % Add AWGN rxSig = cellfun(@awgn,chanOut, ... num2cell(snr*ones(numUsers,1)),'UniformOutput',false);
Получить сигналы для каждого пользователя обрабатываются индивидуально. Пример принимает, что нет никаких нарушений фронтенда и что настройка передачи известна приемником для простоты.
Код пользователя задает пользователя интереса, декодируемого для передачи. Это также используется, чтобы индексировать в векторные свойства объекта настройки, которые специфичны для пользователя.
% Get field indices from configuration, assumed known at receiver ind = wlanFieldIndices(cfgVHTMU); % Single-user receivers recover payload bits rxDataBits = cell(numUsers,1); scaler = zeros(numUsers,1); spAxes = gobjects(sum(numSTSVec),1); hfig = figure('Name','Per-stream equalized symbol constellation'); for uIdx = 1:numUsers rxNSig = rxSig{uIdx}(chanDelay(uIdx)+1:end, :); % User space-time streams stsU = numSTSVec(uIdx); % Estimate noise power in VHT fields lltf = rxNSig(ind.LLTF(1):ind.LLTF(2),:); demodLLTF = wlanLLTFDemodulate(lltf,chanBW); nVar = helperNoiseEstimate(demodLLTF,chanBW,sum(numSTSVec)); % Perform channel estimation based on VHT-LTF rxVHTLTF = rxNSig(ind.VHTLTF(1):ind.VHTLTF(2),:); demodVHTLTF = wlanVHTLTFDemodulate(rxVHTLTF,chanBW,numSTSVec); chanEst = wlanVHTLTFChannelEstimate(demodVHTLTF,chanBW,numSTSVec); % Recover information bits in VHT Data field rxVHTData = rxNSig(ind.VHTData(1):ind.VHTData(2),:); [rxDataBits{uIdx},~,eqsym] = wlanVHTDataRecover(rxVHTData, ... chanEst,nVar,cfgVHTMU,uIdx, ... 'EqualizationMethod',eqMethod,'PilotPhaseTracking','None', ... 'LDPCDecodingMethod','layered-bp','MaximumLDPCIterationCount',6); % Plot equalized symbols for all streams per user scaler(uIdx) = ceil(max(abs([real(eqsym(:)); imag(eqsym(:))]))); for i = 1:stsU subplot(numUsers,max(numSTSVec),(uIdx-1)*max(numSTSVec)+i); plot(reshape(eqsym(:,:,i),[],1),'.'); axis square spAxes(sum([0 numSTSVec(1:(uIdx-1))])+i) = gca; % Store axes handle title(['User ' num2str(uIdx) ', Stream ' num2str(i)]); grid on; end end % Scale axes for all subplots and scale figure for i = 1:numel(spAxes) xlim(spAxes(i),[-max(scaler) max(scaler)]); ylim(spAxes(i),[-max(scaler) max(scaler)]); end pos = get(hfig,'Position'); set(hfig,'Position',[pos(1)*0.7 pos(2)*0.7 1.3*pos(3) 1.3*pos(4)]);
На поток компенсируемые графики созвездия символа подтверждают параметры симуляции и передают эффективность метода. Отметьте заметное 16QAM, 64QAM и созвездия QPSK на пользователя, как задано на конце передачи. Также наблюдайте ухудшение EVM по различным потокам для отдельного пользователя. Это - представительная характеристика метода инверсии канала.
Восстановленные биты данных по сравнению с переданными битами полезной нагрузки, чтобы определить частоту ошибок по битам.
% Compare recovered bits against per-user APEPLength information bits ber = inf(1, numUsers); for uIdx = 1:numUsers idx = (1:cfgVHTMU.APEPLength(uIdx)*8).'; [~,ber(uIdx)] = biterr(txDataBits{uIdx}(idx),rxDataBits{uIdx}(idx)); disp(['Bit Error Rate for User ' num2str(uIdx) ': ' num2str(ber(uIdx))]); end rng(s); % Restore RNG state
Bit Error Rate for User 1: 0 Bit Error Rate for User 2: 0 Bit Error Rate for User 3: 0.00014603
Небольшое количество битовых ошибок, в шумовом отклонении, указывает на успешное декодирование данных для всех потоков для каждого пользователя, несмотря на изменение EVMs, замеченного в отдельных потоках.
Пример показывает, как использовать WINNER II исчезающих Системных объектов канала, чтобы смоделировать многопользовательскую передачу VHT в 802.11ac. Дальнейшее исследование включает модификации в параметры передачи, антенные решетки, сценарии канала, LOS по сравнению с распространением NLOS, моделированием пути потерь и моделированием затенения.
Существует другая версия этого примера в WLAN Toolbox, который использует три независимых TGac исчезающие каналы для трех пользователей: 802.11ac Многопользовательский MIMO, Предварительно кодирующий (WLAN Toolbox).
Этот пример использует следующие функции помощника от WLAN Toolbox™:
Стандарт IEEE® Std 802.11ac™-2013 IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.
Perahia, E., Р. Стейси, "беспроводная связь следующего поколения LANS: 802.11n и 802.11ac", издательство Кембриджского университета, 2013.
Станд. IEEE 802.11™-2012 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования.
ПОБЕДИТЕЛЬ IST II, "WINNER II моделей канала", D1.1.2, сентябрь 2007.
Breit, G., Х. Сэмпэт, С. Вермани, и др., "Приложение Модели Канала TGac", Версия 12. IEEE 802.11-09/0308r12, март 2010.