Точность модуляции передатчика 802.11ac и спектральное тестирование эмиссии

В этом примере показано, как выполнить точность модуляции передатчика и маску эмиссии спектра и измерения плоскости на форме волны IEEE® 802.11ac™.

Введение

Точность модуляции передатчика, требуемая маска спектра и требуемая спектральная плоскость для данных настроек заданы в Разделе 22.3.18 из стандарта 802.11ac [1]. В этом примере показано, как эти измерения могут быть выполнены на форме волны. Форма волны сгенерирована с WLAN Toolbox™, но форма волны, полученная со спектром анализатор, могла использоваться.

Форма волны, состоящая из 20 пакетов VHT на 80 МГц, каждый разделенный разрывами 10 микросекунд сгенерирован. Случайные данные используются в каждом пакете и 256QAM, модуляция используется. Основополосная форма волны сверхдискретизирована и отфильтрована, чтобы уменьшать из эмиссии полосы, чтобы удовлетворить спектральное требование маски. Модель мощного усилителя (HPA) используется, который вводит внутриполосное искажение и спектральный перерост. Спектральное измерение маски эмиссии выполняется на сверхдискретизированной форме волны после мощного моделирования усилителя. Форма волны прорежена, и величина вектора ошибок (EVM) Поля данных VHT измеряется, чтобы определить точность модуляции. Спектральная плоскость дополнительно измеряется. Пример проиллюстрирован в следующей схеме:

IEEE 802.11ac Пакетная настройка VHT

В этом примере сгенерирована форма волны IEEE 802.11ac, состоящая из нескольких пакетов формата VHT. Формат определенная настройка формы волны VHT описан с помощью объекта настройки формата VHT. Объект создается с помощью wlanVHTConfig функция. Свойства объекта содержат настройку. В этом примере объект сконфигурирован для пропускной способности на 80 МГц. Один пространственный поток передается на антенну, чтобы позволить точности модуляции быть измеренной на пространственный поток, поэтому никакое блочное кодирование времени пробела не используется.

cfgVHT = wlanVHTConfig;            % Create packet configuration
cfgVHT.ChannelBandwidth = 'CBW80'; % 80 MHz
cfgVHT.NumTransmitAntennas = 1;    % One transmit antenna
cfgVHT.NumSpaceTimeStreams = 1;    % One space-time stream
cfgVHT.STBC = false;               % No STBC so one spatial stream
cfgVHT.MCS = 8;                    % Modulation: 256 QAM
cfgVHT.APEPLength = 3000;          % A-MPDU length pre-EOF padding in bytes

Основополосная генерация сигналов

Генератор формы волны wlanWaveformGenerator может быть сконфигурирован, чтобы сгенерировать один или несколько пакетов и добавить время простоя между каждым пакетом. В этом примере будут созданы 20 пакетов с периодами неактивности 10 микросекунд.

numPackets = 20;  % Generate 20 packets
idleTime = 10e-6; % 10 microseconds idle time between packets

Случайные биты для всех пакетов, data, создаются и передаются в качестве аргумента wlanWaveformGenerator наряду с пакетным объектом cfgVHT настройки VHT. Это конфигурирует генератор формы волны, чтобы синтезировать 802.11ac форма волны VHT. Генератор формы волны дополнительно сконфигурирован с помощью пар "имя-значение", чтобы сгенерировать несколько пакетов с заданным временем простоя между каждым пакетом.

% Create random data; PSDULength is in bytes
savedState = rng(0); % Set random state
data = randi([0 1],cfgVHT.PSDULength*8*numPackets,1);

% Generate a multi-packet waveform
txWaveform = wlanWaveformGenerator(data,cfgVHT, ...
    'NumPackets',numPackets,'IdleTime',idleTime);

% Get the sampling rate of the waveform
fs = wlanSampleRate(cfgVHT);
disp(['Baseband sampling rate: ' num2str(fs/1e6) ' Msps']);
Baseband sampling rate: 80 Msps

Сверхдискретизация и фильтрация

Спектральная фильтрация используется, чтобы сократить из полосы спектральные выбросы вследствие неявного формирования меандра в модуляции OFDM и спектральном переросте, вызванном мощной моделью усилителя. Чтобы смоделировать эффект мощного усилителя на форме волны и просмотреть из полосы спектральную эмиссию, форма волны должна быть сверхдискретизирована. Сверхдискретизация требует, чтобы фильтр интерполяции удалил спектральные изображения, вызванные путем повышающей дискретизации. В этом примере форма волны сверхдискретизирована с фильтром интерполяции, который также действует как спектральный фильтр. Это позволяет форме волны удовлетворять спектральные требования маски. Форма волны сверхдискретизирована и отфильтровала использование dsp.FIRInterpolator.

% Oversample the waveform
osf = 3;         % Oversampling factor
filterLen = 120; % Filter length
beta = 0.5;      % Design parameter for Kaiser window

% Generate filter coefficients
coeffs = osf.*firnyquist(filterLen,osf,kaiser(filterLen+1,beta));
coeffs = coeffs(1:end-1); % Remove trailing zero
interpolationFilter = dsp.FIRInterpolator(osf,'Numerator',coeffs);
txWaveform = interpolationFilter(txWaveform);

% Plot the magnitude and phase response of the filter applied after
% oversampling
h = fvtool(interpolationFilter);
h.Analysis = 'freq';           % Plot magnitude and phase responses
h.FS = osf*fs;                 % Set sampling rate
h.NormalizedFrequency = 'off'; % Plot responses against frequency

Мощное моделирование усилителя

Мощный усилитель вводит нелинейное поведение в форме внутриполосного искажения и спектрального перероста. Модель Rapp используется, чтобы симулировать усилители мощности в 802.11ac [2]. Модель Rapp вызывает искажение AM и моделируется с comm.MemorylessNonlinearity. Мощный усилитель поддерживается - прочь, чтобы действовать ниже точки насыщения, чтобы уменьшать искажение. Возвратом управляет переменная hpaBackoff.

hpaBackoff = 8; % dB

% Create and configure a memoryless nonlinearity to model the amplifier
nonLinearity = comm.MemorylessNonlinearity;
nonLinearity.Method = 'Rapp model';
nonLinearity.Smoothness = 3; % p parameter
nonLinearity.LinearGain = -hpaBackoff;

% Apply the model to each transmit antenna
for i=1:cfgVHT.NumTransmitAntennas
    txWaveform(:,i) = nonLinearity(txWaveform(:,i));
end

Тепловой шум добавляется к форме волны с шумовой фигурой [3] на 6 дБ.

NF = 6;         % Noise figure (dB)
BW = fs*osf;    % Bandwidth (Hz)
k = 1.3806e-23; % Boltzman constant (J/K)
T = 290;        % Ambient temperature (K)
noisePower = 10*log10(k*T*BW)+NF;

awgnChannel = comm.AWGNChannel('NoiseMethod','Variance', ...
    'Variance',10^(noisePower/10));
txWaveform = awgnChannel(txWaveform);

Точность модуляции (EVM) и спектральные измерения плоскости

Сверхдискретизированная форма волны передискретизируется вниз к основной полосе для обработки физического уровня и EVM и спектральных измерений плоскости. Когда часть передискретизации фильтра сглаживания lowpass применяется перед субдискретизацией. Удар фильтра lowpass отобразится в спектральном измерении плоскости. Форма волны передискретизируется к основной полосе с помощью dsp.FIRDecimator с теми же коэффициентами, используемыми в сверхдискретизации ранее в примере.

% Resample to baseband
decimationFilter = dsp.FIRDecimator(osf,'Numerator',coeffs);
rxWaveform = decimationFilter(txWaveform);

Каждый пакет в rxWaveform обнаруживается, синхронизируется и извлекается. EVM и спектральные измерения плоскости сделаны для каждого пакета. Следующие шаги выполняются для каждого пакета:

  • Запуск пакета обнаруживается

  • Поля non-HT извлечены, и крупная оценка несущей частоты возмещена (CFO) и коррекция выполняются

  • Откорректированные поля частоты non-HT используются, чтобы оценить прекрасную синхронизацию символа

  • Пакет извлечен из формы волны с помощью прекрасного смещения синхронизации символа

  • Извлеченный пакет корректируется крупной оценкой CFO

  • L-LTF извлекается и используется, чтобы оценить прекрасный CFO. Смещение корректируется для целого пакета

  • VHT-LTF извлечен, и оценка канала выполняется для каждого из потоков передачи

  • Оценка канала используется, чтобы измерить спектральную плоскость

  • Поле данных VHT извлечено, и OFDM демодулируется

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

  • Поле данных VHT является фазой откорректированное и компенсируемое использование канала и шумовых оценок

  • Для каждой несущей данные поднесущей в каждом пространственном потоке найдена самая близкая точка созвездия, и EVM вычисляется

Цепь обработки показывают в схеме ниже:

Обратите внимание, что символы VHT-LTF включают экспериментальные символы, чтобы позволить, чтобы фаза отследила, но это не сделано в этом примере.

Спектральная плоскость тестируется на каждый пакет путем измерения отклонения в величине отдельных поднесущих в оценке канала против среднего значения [1]. Эти отклонения построены для каждого пакета с помощью функции помощника vhtTxSpectralFlatnessMeasurement. Средний EVM на несущую данные поднесущую и компенсируемые символы построены для каждого пакета.

Функциональный wlanVHTDataRecover используется, чтобы демодулировать, компенсировать и декодировать символы Данных VHT. Компенсируемые символы используются в этом примере, чтобы измерить точность модуляции. Эта функция параметрируется, чтобы выполнить отслеживание экспериментального этапа и нулевую эквализацию принуждения как требуется по стандарту.

Два различных измерения EVM сделаны в этом примере с помощью двух экземпляров comm.EVM. Первое измерение является RMS EVM на пакет. Для этого измерения EVM усреднен по поднесущим, символам OFDM и пространственным потокам.

EVMPerPkt = comm.EVM;
EVMPerPkt.AveragingDimensions = [1 2 3]; % Nst-by-Nsym-by-Nss
EVMPerPkt.Normalization = 'Average constellation power';
EVMPerPkt.ReferenceSignalSource  = 'Estimated from reference constellation';
EVMPerPkt.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);

Второе измерение является RMS EVM на поднесущую на пространственный поток для пакета. Когда пространственные потоки сопоставлены непосредственно с антеннами в этой настройке, это измерение может помочь обнаружить зависимые нарушения частоты, которые могут влиять на отдельные цепи РФ по-другому. Для этого измерения EVM только усреднен по символам OFDM.

% Measure average EVM over symbols
EVMPerSC = comm.EVM;
EVMPerSC.AveragingDimensions = 2; % Nst-by-Nsym-by-Nss
EVMPerSC.Normalization = 'Average constellation power';
EVMPerSC.ReferenceSignalSource  = 'Estimated from reference constellation';
EVMPerSC.ReferenceConstellation = wlanReferenceSymbols(cfgVHT);

Следующий код конфигурирует объекты и переменные для обработки.

% Indices for accessing each field within the time-domain packet
ind = wlanFieldIndices(cfgVHT);

rxWaveformLength = size(rxWaveform,1);
pktLength = double(ind.VHTData(2));

% Minimum length of data we can detect; length of the L-STF in samples
minPktLen = double(ind.LSTF(2)-ind.LSTF(1))+1;

% Setup the measurement plots
[hSF,hCon,hEVM] = vhtTxSetupPlots(cfgVHT);

rmsEVM = zeros(numPackets,1);
pktOffsetStore = zeros(numPackets,1);

rng(savedState); % Restore random state

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

pktNum = 0;
searchOffset = 0; % Start at first sample (no offset)
while (searchOffset+minPktLen)<=rxWaveformLength
    % Packet detect
    pktOffset = wlanPacketDetect(rxWaveform,cfgVHT.ChannelBandwidth, ...
        searchOffset,0.9);
    % Packet offset from start of waveform
    pktOffset = searchOffset+pktOffset;
    % If no packet detected or offset outwith bounds of waveform then stop
    if isempty(pktOffset) || (pktOffset<0) || ...
            ((pktOffset+ind.LSIG(2))>rxWaveformLength)
        break;
    end

    % Extract non-HT fields and perform coarse frequency offset correction
    % to allow for reliable symbol timing
    nonht = rxWaveform(pktOffset+(ind.LSTF(1):ind.LSIG(2)),:);
    coarsefreqOff = wlanCoarseCFOEstimate(nonht,cfgVHT.ChannelBandwidth);
    nonht = helperFrequencyOffset(nonht,fs,-coarsefreqOff);

    % Determine offset between the expected start of L-LTF and actual start
    % of L-LTF
    lltfOffset = wlanSymbolTimingEstimate(nonht,cfgVHT.ChannelBandwidth);
    % Determine packet offset
    pktOffset = pktOffset+lltfOffset;
    % If offset is without bounds of waveform  skip samples and continue
    % searching within remainder of the waveform
    if (pktOffset<0) || ((pktOffset+pktLength)>rxWaveformLength)
        searchOffset = pktOffset+double(ind.LSTF(2))+1;
        continue;
    end

    % Timing synchronization complete; extract the detected packet
    rxPacket = rxWaveform(pktOffset+(1:pktLength),:);
    pktNum = pktNum+1;
    disp(['  Packet ' num2str(pktNum) ' at index: ' num2str(pktOffset+1)]);

    % Apply coarse frequency correction to the extracted packet
    rxPacket = helperFrequencyOffset(rxPacket,fs,-coarsefreqOff);

    % Perform fine frequency offset correction on the extracted packet
    lltf = rxPacket(ind.LLTF(1):ind.LLTF(2),:); % Extract L-LTF
    fineFreqOff = wlanFineCFOEstimate(lltf,cfgVHT.ChannelBandwidth);
    rxPacket = helperFrequencyOffset(rxPacket,fs,-fineFreqOff);

    % Extract VHT-LTF samples, demodulate and perform channel estimation
    vhtltf = rxPacket(ind.VHTLTF(1):ind.VHTLTF(2),:);
    vhtltfDemod = wlanVHTLTFDemodulate(vhtltf,cfgVHT);

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

    % Channel estimate
    chanEst = wlanVHTLTFChannelEstimate(vhtltfDemod,cfgVHT);

    % Spectral flatness measurement
    vhtTxSpectralFlatnessMeasurement(chanEst,cfgVHT,pktNum,hSF);

    % Extract VHT Data samples from the waveform
    vhtdata = rxPacket(ind.VHTData(1):ind.VHTData(2),:);

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

    % Extract VHT Data samples and perform OFDM demodulation, equalization
    % and phase tracking
    [~,~,eqSym] = wlanVHTDataRecover(vhtdata,chanEst,noiseVarVHT,cfgVHT,...
        'EqualizationMethod','ZF','PilotPhaseTracking','PreEQ'); % Use zero forcing algorithm for equalization

    % Compute RMS EVM over all spatial streams for packet
    rmsEVM(pktNum) = EVMPerPkt(eqSym);
    fprintf('    RMS EVM: %2.2f%%, %2.2fdB\n',rmsEVM(pktNum),20*log10(rmsEVM(pktNum)/100));

    % Compute RMS EVM per subcarrier and spatial stream for the packet
    evmPerSC = EVMPerSC(eqSym); % Nst-by-1-by-Nss

    % Plot RMS EVM per subcarrier and equalized constellation
    vhtTxEVMConstellationPlots(eqSym,evmPerSC,cfgVHT,pktNum,hCon,hEVM);

    % Store the offset of each packet within the waveform
    pktOffsetStore(pktNum) = pktOffset;

    % Increment waveform offset and search remaining waveform for a packet
    searchOffset = pktOffset+pktLength+minPktLen;
end

if pktNum>0
fprintf('Average EVM for %d packets: %2.2f%%, %2.2fdB\n', ...
    pktNum,mean(rmsEVM(1:pktNum)),20*log10(mean(rmsEVM(1:pktNum))/100));
else
    disp('No complete packet detected');
end
  Packet 1 at index: 41
    Spectral flatness passed
    RMS EVM: 2.36%, -32.55dB
  Packet 2 at index: 9801
    Spectral flatness passed
    RMS EVM: 2.32%, -32.70dB
  Packet 3 at index: 19561
    Spectral flatness passed
    RMS EVM: 2.16%, -33.29dB
  Packet 4 at index: 29321
    Spectral flatness passed
    RMS EVM: 2.16%, -33.31dB
  Packet 5 at index: 39081
    Spectral flatness passed
    RMS EVM: 2.27%, -32.88dB
  Packet 6 at index: 48841
    Spectral flatness passed
    RMS EVM: 1.93%, -34.29dB
  Packet 7 at index: 58601
    Spectral flatness passed
    RMS EVM: 2.19%, -33.21dB
  Packet 8 at index: 68361
    Spectral flatness passed
    RMS EVM: 2.06%, -33.70dB
  Packet 9 at index: 78121
    Spectral flatness passed
    RMS EVM: 2.12%, -33.47dB
  Packet 10 at index: 87881
    Spectral flatness passed
    RMS EVM: 2.01%, -33.95dB
  Packet 11 at index: 97641
    Spectral flatness passed
    RMS EVM: 2.10%, -33.54dB
  Packet 12 at index: 107401
    Spectral flatness passed
    RMS EVM: 2.20%, -33.14dB
  Packet 13 at index: 117161
    Spectral flatness passed
    RMS EVM: 2.00%, -33.97dB
  Packet 14 at index: 126921
    Spectral flatness passed
    RMS EVM: 2.11%, -33.52dB
  Packet 15 at index: 136681
    Spectral flatness passed
    RMS EVM: 2.19%, -33.21dB
  Packet 16 at index: 146441
    Spectral flatness passed
    RMS EVM: 1.88%, -34.52dB
  Packet 17 at index: 156201
    Spectral flatness passed
    RMS EVM: 2.03%, -33.84dB
  Packet 18 at index: 165961
    Spectral flatness passed
    RMS EVM: 2.43%, -32.28dB
  Packet 19 at index: 175721
    Spectral flatness passed
    RMS EVM: 2.39%, -32.43dB
  Packet 20 at index: 185481
    Spectral flatness passed
    RMS EVM: 2.63%, -31.60dB
Average EVM for 20 packets: 2.18%, -33.24dB

Передайте измерение маски эмиссии спектра

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

Пропущенное спектральное измерение времени Поля данных VHT используется в тесте маски эмиссии спектра передатчика [4]. Когда часть основной полосы, обрабатывающей индекс запуска каждого пакета в основополосной форме волны, хранилась. Эти индексы используются, чтобы извлечь Поле данных VHT каждого пакета от сверхдискретизированного txWaveform. Любая задержка, введенная в основополосной цепи обработки, используемой, чтобы определить пакетные индексы, должна составляться при пропускании поля данных VHT в txWaveform. Извлеченные Поля данных VHT конкатенированы при подготовке к измерению.

startIdx = osf*(ind.VHTData(1)-1)+1;  % Upsampled start of VHT Data
endIdx = osf*ind.VHTData(2);          % Upsampled end of VHT Data
delay = grpdelay(decimationFilter,1); % Group delay of downsampling filter
idx = zeros(endIdx-startIdx+1,pktNum);
for i = 1:pktNum
    % Start of packet in txWaveform
    pktOffset = osf*pktOffsetStore(i)-delay;
    % Indices of VHT Data in txWaveform
    idx(:,i) = (pktOffset+(startIdx:endIdx));
end
gatedVHTData = txWaveform(idx(:),:);

Спектральная маска задана стандартом относительно пиковой мощности спектральная плотность. График, сгенерированный функцией помощника helperSpectralMaskTest, накладывает необходимую маску с измеренным PSD.

helperSpectralMaskTest(gatedVHTData,fs,osf);
   Spectrum mask passed

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

Четыре результата построены по этому примеру; спектральная плоскость, RMS EVM на поднесущую, компенсировала созвездие и спектральную маску.

Мощная модель усилителя вводит значительное внутриполосное искажение и спектральный перерост, который отображается в результатах EVM, шумном созвездии и внеполосной эмиссии в спектральном графике маски. Попытайтесь увеличить мощный возврат усилителя и отметьте улучшенный EVM, созвездие и понизьте внеполосную эмиссию.

Спектральная фильтрация и субдискретизация (чтобы принести форму волны к основной полосе для обработки) этапы включают фильтрацию. Эти ответы фильтра влияют на спектральное измерение плоскости. Пульсация в спектральном измерении плоскости происходит в основном из-за субдискретизации к основной полосе. Попытайтесь использовать различные фильтры или отфильтруйте длины и отметьте удар на спектральную плоскость.

Приложение

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

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

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

  2. Loc и Cheong. IEEE P802.11 Беспроводная LAN. Функциональные требования TGac и версия методологии оценки. 16. 2011-01-19.

  3. Perahia, E. и Р. Стейси. Беспроводная LAN следующего поколения: 802.11n и 802.11ac. 2-й выпуск. Соединенное Королевство: Издательство Кембриджского университета, 2013.

  4. Archambault, Джерри и Шрэвэн Суринени. "IEEE 802.11 спектральные измерения с помощью вектора сигнализирует об анализаторах". Проект 27.6 (2004) РФ: 38-49.