802.11 Динамическая симуляция управления уровнем

Этот пример показывает динамическое управление уровнем путем варьирования схемы Modulation и Coding (MCS) последовательных пакетов, переданных по частоте выборочный многопутевой исчезающий канал.

Введение

Стандарт IEEE® 802.11™ поддерживает динамическое управление уровнем путем корректировки значения MCS каждого переданного пакета на основе базового радио-канала распространения. Максимизация пропускной способности ссылки, в канале распространения, который время, отличаясь из-за многопутевого исчезновения или перемещения окружающих объектов, требует динамического изменения MCS. Стандарт IEEE 802.11 не задает стандартизированного алгоритма управления уровня (RCA) для того, чтобы динамически отличаться уровень модуляции. Реализацию RCA оставляют открытой для производителей устройств WLAN. Этот пример использует схему управления уровнем с обратной связью. Рекомендуемый MCS для передачи пакета вычисляется в получателе и доступен в передатчике без любой задержки обратной связи. В действительной системе эта информация была бы передана посредством обмена кадра управления. MCS настроен для каждого последующего пакета в ответ на развивающееся условие канала с шумовой степенью, отличающейся в зависимости от времени.

В этом примере форма волны IEEE 802.11ac™ [1], состоящая из одного пакета формата VHT, сгенерирована с помощью wlanWaveformGenerator. Форма волны передается через канал TGac, и шум добавляется. Пакет синхронизируется и декодируется, чтобы восстановить PSDU. ОСШ оценен и сравнен с порогами, чтобы определить, какой MCS подходит для передачи следующего пакета. Эти данные показывают обработку для каждого пакета.

Настройка формы волны

Передача IEEE 802.11ac VHT моделируется в этом примере. Свойства формы волны VHT заданы в wlanVHTConfig объекте настройки. В этом примере объект первоначально сконфигурирован для пропускной способности канала на 40 МГц, одной антенны передачи и QPSK rate-1/2 (MCS 1). MCS для последующих пакетов изменяется алгоритмом в течение симуляции.

cfgVHT = wlanVHTConfig;
cfgVHT.ChannelBandwidth = 'CBW40'; % 40 MHz channel bandwidth
cfgVHT.MCS = 1;                    % QPSK rate-1/2
cfgVHT.APEPLength = 4096;          % APEP length in bytes

% Set random stream for repeatability of results
s = rng(21);

Настройка канала

В этом примере модель канала N-LOS TGac используется с Моделью-D профиля задержки. Для Модели-D, когда расстояние между передатчиком и получателем больше, чем или равно 10 метрам, модель является NLOS. Это описано далее в wlanTGacChannel.

tgacChannel = wlanTGacChannel;
tgacChannel.DelayProfile = 'Model-D';
tgacChannel.ChannelBandwidth = cfgVHT.ChannelBandwidth;
tgacChannel.NumTransmitAntennas = 1;
tgacChannel.NumReceiveAntennas = 1;
tgacChannel.TransmitReceiveDistance = 20; % Distance in meters for NLOS
tgacChannel.RandomStream = 'mt19937ar with seed';
tgacChannel.Seed = 0;

% Set the sampling rate for the channel
sr = wlanSampleRate(cfgVHT);
tgacChannel.SampleRate = sr;

Параметры алгоритма управления уровня

Обычно RCAs используют качество канала или показатели производительности ссылки, такие как ОСШ или пакетный коэффициент ошибок, для выбора уровня. RCA, представленный в этом примере, оценивает ОСШ полученного пакета. На приеме предполагаемый ОСШ сравнен с предопределенным порогом. Если ОСШ превышает предопределенный порог затем, новый MCS выбран для передачи следующего пакета. Средства управления rcaAttack и rcaRelease сглаженный уровень изменяются, чтобы не изменять уровни преждевременно. ОСШ должен превысить threshold + значение rcaAttack, чтобы увеличить MCS и должен находиться под threshold - значение rcaRelease, чтобы уменьшить MCS. В этой симуляции rcaAttack и rcaRelease собираются консервативно увеличить MCS и настойчиво уменьшать его. Для значений threshold, выбранных для сценария, моделируемого в этом примере, ожидается небольшое количество пакетных ошибок. Эти настройки не могут подойти для других сценариев.

rcaAttack = 1;  % Control the sensitivity when MCS is increasing
rcaRelease = 0; % Control the sensitivity when MCS is decreasing
threshold = [11 14 19 20 25 28 30 31 35];
snrUp = [threshold inf]+rcaAttack;
snrDown = [-inf threshold]-rcaRelease;
snrInd = cfgVHT.MCS; % Store the start MCS value

Параметры симуляции

В этой симуляции пакеты numPackets передаются через канал TGac, разделенный установленным временем простоя. Состояние канала сохраняется в течение симуляции, поэтому канал развивается медленно в зависимости от времени. Эта эволюция медленно изменяет получившийся ОСШ, измеренный в получателе. Поскольку канал TGac изменяется очень медленно в зависимости от времени, здесь изменение ОСШ в получателе, видимом по короткой симуляции, может быть обеспечено с помощью параметра walkSNR, чтобы изменить шумовую степень:

  1. Установка walkSNR к истине генерирует переменный ОСШ путем случайной установки шумовой степени на пакет во время передачи. ОСШ идет между 14-33 дБ (использование переменных amplitude и meanSNR).

  2. Установка walkSNR ко лжи фиксирует шумовую степень, применился к полученной форме волны, так, чтобы изменения канала были основным источником изменений ОСШ в получателе.

numPackets = 100; % Number of packets transmitted during the simulation
walkSNR = true;

% Select SNR for the simulation
if walkSNR
    meanSNR = 22;   % Mean SNR
    amplitude = 14; % Variation in SNR around the average mean SNR value
    % Generate varying SNR values for each transmitted packet
    baseSNR = sin(linspace(1,10,numPackets))*amplitude+meanSNR;
    snrWalk = baseSNR(1); % Set the initial SNR value
    % The maxJump controls the maximum SNR difference between one
    % packet and the next
    maxJump = 0.5;
else
    % Fixed mean SNR value for each transmitted packet. All the variability
    % in SNR comes from a time varying radio channel
    snrWalk = 22; %#ok<UNRCH>
end

% To plot the equalized constellation for each spatial stream set
% displayConstellation to true
displayConstellation = false;
if displayConstellation
    ConstellationDiagram = comm.ConstellationDiagram; %#ok<UNRCH>
    ConstellationDiagram.ShowGrid = true;
    ConstellationDiagram.Name = 'Equalized data symbols';
end

% Define simulation variables
snrMeasured = zeros(1,numPackets);
MCS = zeros(1,numPackets);
ber = zeros(1,numPackets);
packetLength = zeros(1,numPackets);

Обработка цепочки

Выполняющие шаги обработки происходят для каждого пакета:

  1. PSDU создается и кодируется, чтобы создать одну пакетную форму волны.

  2. Установленное время простоя добавляется между последовательными пакетами.

  3. Форма волны передается посредством развития канал TGac.

  4. AWGN добавляется к переданной форме волны, чтобы создать желаемый средний ОСШ на поднесущую.

  5. Эта локальная функция processPacket передает переданную форму волны через канал TGac, выполняет обработку получателя и оценку ОСШ.

  6. VHT-LTF извлечен от полученной формы волны. VHT-LTF является демодулируемым OFDM, и оценка канала выполняется.

  7. Поле данных VHT извлечено от синхронизируемой полученной формы волны.

  8. Шумовая оценка выполняется с помощью демодулируемых пилотов поля данных и оценки канала единого потока в экспериментальных поднесущих.

  9. Предполагаемый ОСШ для каждого пакета сравнен с порогом, сравнение используется, чтобы настроить MCS для следующего пакета.

  10. PSDU восстанавливается с помощью извлеченного VHT-поля-данных.

Для простоты этот пример принимает:

  1. Фиксированная пропускная способность и настройка антенны для каждого переданного пакета.

  2. Нет никакого явного пакета обратной связи, чтобы сообщить передатчику о предложенной установке MCS для следующего пакета. Пример принимает, что эта информация известна передатчику прежде, чем передать последующий пакет.

  3. Установленное время простоя 0,5 миллисекунд между пакетами.

for numPkt = 1:numPackets
    if walkSNR
        % Generate SNR value per packet using random walk algorithm biased
        % towards the mean SNR
        snrWalk = 0.9*snrWalk+0.1*baseSNR(numPkt)+rand(1)*maxJump*2-maxJump;
    end

    % Generate a single packet waveform
    txPSDU = randi([0,1],8*cfgVHT.PSDULength,1,'int8');
    txWave = wlanWaveformGenerator(txPSDU,cfgVHT,'IdleTime',5e-4);

    % Receive processing, including SNR estimation
    y = processPacket(txWave,snrWalk,tgacChannel,cfgVHT);

    % Plot equalized symbols of data carrying subcarriers
    if displayConstellation && ~isempty(y.EstimatedSNR)
        release(ConstellationDiagram);
        ConstellationDiagram.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);
        ConstellationDiagram.Title = ['Packet ' int2str(numPkt)];
        ConstellationDiagram(y.EqDataSym(:));
        drawnow
    end

    % Store estimated SNR value for each packet
    if isempty(y.EstimatedSNR)
        snrMeasured(1,numPkt) = NaN;
    else
        snrMeasured(1,numPkt) = y.EstimatedSNR;
    end

    % Determine the length of the packet in seconds including idle time
    packetLength(numPkt) = y.RxWaveformLength/sr;

    % Calculate packet error rate (PER)
    if isempty(y.RxPSDU)
        % Set the PER of an undetected packet to NaN
        ber(numPkt) = NaN;
    else
        [~,ber(numPkt)] = biterr(y.RxPSDU,txPSDU);
    end

    % Compare the estimated SNR to the threshold, and adjust the MCS value
    % used for the next packet
    MCS(numPkt) = cfgVHT.MCS; % Store current MCS value
    increaseMCS = (mean(y.EstimatedSNR) > snrUp((snrInd==0)+snrInd));
    decreaseMCS = (mean(y.EstimatedSNR) <= snrDown((snrInd==0)+snrInd));
    snrInd = snrInd+increaseMCS-decreaseMCS;
    cfgVHT.MCS = snrInd-1;
end

Отобразите и постройте результаты симуляции

Этот пример строит изменение MCS, ОСШ, BER и пропускной способности по длительности симуляции.

  1. MCS, используемый, чтобы передать каждый пакет, построен. Когда по сравнению с предполагаемым ОСШ, вы видите, что выбор MCS зависит от предполагаемого ОСШ.

  2. Частота ошибок по битам на пакет зависит от условий канала, ОСШ и MCS, используемого для передачи.

  3. Пропускная способность максимизируется путем варьирования MCS согласно условиям канала. Пропускная способность вычисляется с помощью раздвижного окна трех пакетов. Для каждой построенной точки пропускная способность является количеством битов данных, успешно восстановленных по длительности трех пакетов. Длина раздвижного окна может быть увеличена, чтобы далее сглаживать пропускную способность. Вы видите падения пропускной способности или когда MCS уменьшается или когда пакетная ошибка происходит.

% Display and plot simulation results
disp(['Overall data rate: ' num2str(8*cfgVHT.APEPLength*(numPackets-numel(find(ber)))/sum(packetLength)/1e6) ' Mbps']);
disp(['Overall packet error rate: ' num2str(numel(find(ber))/numPackets)]);

plotResults(ber,packetLength,snrMeasured,MCS,cfgVHT);

% Restore default stream
rng(s);
Overall data rate: 20.631 Mbps
Overall packet error rate: 0.03

Заключение и дальнейшее исследование

Этот пример использует схему управления уровнем с обратной связью, где знание MCS, используемого для последующей пакетной передачи, принято, чтобы быть доступным передатчику.

В этом примере изменением в MCS в зависимости от времени из-за полученного ОСШ управляют threshold, rcaAttack и параметры rcaRelease. rcaAttack и rcaRelease используются в качестве средств управления, чтобы сглаживать изменения уровня, это должно постараться не изменять уровни преждевременно. Попытайтесь изменить управление rcaRelease на два. В этом случае уменьшение в MCS медленнее, чтобы реагировать, когда условия канала не хороши, приводя к более высокому BER.

Попытайтесь установить displayConstellation на истину в порядке построить компенсируемые символы на полученный пакет, вы видите схему модуляции изменяться в зависимости от времени. Также попробуйте установку walkSNR ко лжи в порядке визуализировать изменение MCS на пакет. Здесь изменчивость в ОСШ только вызывается радио-каналом, а не комбинацией канала и случайного обхода.

Дальнейшее исследование включает использование альтернативной схемы RCA, более реалистического изменения MCS включая изменяющееся количество потоков времени пробела, пакетного размера и включения STBC для последующих переданных пакетов.

Приложение

Этот пример использует следующие функции помощника:

Выбранная библиография

  1. Станд. IEEE 802.11ac™-2013 Стандарт IEEE для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Спецификации - Поправка 4: Улучшения для Очень Высокой Пропускной способности для Операции в Полосах ниже 6 ГГц.

Localfunctions

Следующие локальные функции используются в этом примере:

  • processPacket: Добавьте нарушения канала и декодируйте, получают пакет

  • plotResults: Постройте результаты симуляции

function Y = processPacket(txWave,snrWalk,tgacChannel,cfgVHT)
    % Pass the transmitted waveform through the channel, perform
    % receiver processing, and SNR estimation.

    chanBW = cfgVHT.ChannelBandwidth; % Channel bandwidth
    % Set the following parameters to empty for an undetected packet
    estimatedSNR = [];
    eqDataSym = [];
    noiseVarVHT = [];
    rxPSDU = [];

    % Get the OFDM info
    ofdmInfo = wlanVHTOFDMInfo('VHT-Data',cfgVHT);

    % Pass the waveform through the fading channel model
    rxWave = tgacChannel(txWave);

    % Create an instance of the AWGN channel for each transmitted packet
    awgnChannel = comm.AWGNChannel;
    awgnChannel.NoiseMethod = 'Signal to noise ratio (SNR)';
    % Normalization
    awgnChannel.SignalPower = 1/tgacChannel.NumReceiveAntennas;
    % Account for energy in nulls
    awgnChannel.SNR = snrWalk-10*log10(ofdmInfo.FFTLength/ofdmInfo.NumTones);

    % Add noise
    rxWave = awgnChannel(rxWave);
    rxWaveformLength = size(rxWave,1); % Length of the received waveform

    % Recover packet
    ind = wlanFieldIndices(cfgVHT); % Get field indices
    pktOffset = wlanPacketDetect(rxWave,chanBW); % Detect packet

    if ~isempty(pktOffset) % If packet detected
        % Extract the L-LTF field for fine timing synchronization
        LLTFSearchBuffer = rxWave(pktOffset+(ind.LSTF(1):ind.LSIG(2)),:);

        % Start index of L-LTF field
        finePktOffset = wlanSymbolTimingEstimate(LLTFSearchBuffer,chanBW);

        % Determine final packet offset
        pktOffset = pktOffset+finePktOffset;

        if pktOffset<15 % If synchronization successful
            % Extract VHT-LTF samples from the waveform, demodulate and
            % perform channel estimation
            VHTLTF = rxWave(pktOffset+(ind.VHTLTF(1):ind.VHTLTF(2)),:);
            demodVHTLTF = wlanVHTLTFDemodulate(VHTLTF,cfgVHT);
            chanEstVHTLTF = wlanVHTLTFChannelEstimate(demodVHTLTF,cfgVHT);

            % Get single stream channel estimate
            chanEstSSPilots = vhtSingleStreamChannelEstimate(demodVHTLTF,cfgVHT);

            % Extract VHT data field
            vhtdata = rxWave(pktOffset+(ind.VHTData(1):ind.VHTData(2)),:);

            % Estimate the noise power in VHT data field
            noiseVarVHT = vhtNoiseEstimate(vhtdata,chanEstSSPilots,cfgVHT);

            % Recover equalized symbols at data carrying subcarriers using
            % channel estimates from VHT-LTF
            [rxPSDU,~,eqDataSym] = wlanVHTDataRecover(vhtdata,chanEstVHTLTF,noiseVarVHT,cfgVHT);

            % SNR estimation per receive antenna
            powVHTLTF = mean(VHTLTF.*conj(VHTLTF));
            estSigPower = powVHTLTF-noiseVarVHT;
            estimatedSNR = 10*log10(mean(estSigPower./noiseVarVHT));
        end
    end

    % Set output
    Y = struct( ...
        'RxPSDU',           rxPSDU, ...
        'EqDataSym',        eqDataSym, ...
        'RxWaveformLength', rxWaveformLength, ...
        'NoiseVar',         noiseVarVHT, ...
        'EstimatedSNR',     estimatedSNR);

end

function plotResults(ber,packetLength,snrMeasured,MCS,cfgVHT)
    % Visualize simulation results

    figure('Outerposition',[50 50 900 700])
    subplot(4,1,1);
    plot(MCS);
    xlabel('Packet Number')
    ylabel('MCS')
    title('MCS selected for transmission')

    subplot(4,1,2);
    plot(snrMeasured);
    xlabel('Packet Number')
    ylabel('SNR')
    title('Estimated SNR')

    subplot(4,1,3);
    plot(find(ber==0),ber(ber==0),'x')
    hold on; stem(find(ber>0),ber(ber>0),'or')
    if any(ber)
        legend('Successful decode','Unsuccessful decode')
    else
        legend('Successful decode')
    end
    xlabel('Packet Number')
    ylabel('BER')
    title('Instantaneous bit error rate per packet')

    subplot(4,1,4);
    windowLength = 3; % Length of the averaging window
    movDataRate = movsum(8*cfgVHT.APEPLength.*(ber==0),windowLength)./movsum(packetLength,windowLength)/1e6;
    plot(movDataRate)
    xlabel('Packet Number')
    ylabel('Mbps')
    title(sprintf('Throughput over last %d packets',windowLength))

end
Для просмотра документации необходимо авторизоваться на сайте