802.11be измерения передатчика

В этом примере показано, как сгенерировать IEEE® 802.11be™ однопользовательская форма волны с квадратурной амплитудной (4096-QAM) модуляцией с 4096 точками и полоса пропускания канала 320 МГц. Пример демонстрирует, как измерить точность модуляции передатчика, спектральную маску и спектральную плоскость.

Введение

В этом примере показано, как параметрировать и сгенерировать чрезвычайно высокую пропускную способность (EHT) IEEE 802.11be однопользовательская форма волны, заданная в Проекте 1.0 [1] P802.11be. Этот пример выполняет точность модуляции передатчика, необходимую спектральную маску, и потребовал спектральных измерений плоскости на форме волны для настройки, заданной в Разделе 36.3.19 из [1].

Пример генерирует 20 однопользовательских пакетов EHT с полосой пропускания канала на 320 МГц и разрывы с 10 микросекундами между пакетами. Каждый пакет содержит случайные данные и использует 4096-QAM. Пример сверхдискретизировал форму волны с помощью большего ОБПФ, чем необходимый для номинального основополосного уровня и не выполняет спектральную фильтрацию. Пример использует модель мощного усилителя (HPA), которая вводит внутриполосное искажение и спектральный перерост. Пример выполняет спектральное измерение маски эмиссии на сверхдискретизированной форме волны после моделирования HPA. Пример декодирует поле данных EHT и измеряет величину вектора ошибок (EVM), чтобы определить точность модуляции после субдискретизации формы волны к основополосной частоте дискретизации. Кроме того, пример измеряет спектральную плоскость восстановленной формы волны. Эта схема показывает рабочий процесс, содержавшийся в примере.

Setup симуляции

Сконфигурируйте пример к generate 20 однопользовательских пакетов EHT с периодом неактивности с 10 микросекундами между каждым пакетом.

numPackets = 20;
idleTime = 10; % In microseconds

802.11be настройка формы волны и генерация

Физический уровень 802.11be, заданный в Проекте 1.0 [1] P802.11be, полагается 802.11ax [2] с этими добавленными возможностями и модификациями.

  1. Увеличенная максимальная полоса пропускания канала 320 МГц

  2. 4096-QAM в MCS индексируют опции 12 и 13

  3. Присвоение нескольких снабжают модуль (MRU) к отдельной станции (STA), с дополнительным прокалыванием однопользовательских пакетов

  4. Увеличенное максимальное число пространственных потоков для восходящего MU-MIMO (16 пространственных потоков максимум через 8 пользователей)

  5. Модифицированный тональный план относительно полос пропускания на 80 и 160 МГц

  6. Больший порождающий полином для скремблера Поля данных и дескремблера

Этот пример демонстрирует эти ключевые 802.11be функции.

  1. Полоса пропускания канала на 320 МГц

  2. 4096-QAM модуляция

  3. Модифицированный тональный план относительно полос пропускания на 80 и 160 МГц

  4. Больший порождающий полином для скремблера Поля данных и дескремблера

Черновой стандарт задает ЭХТ, многопользовательского (ЭХТ МУ) формат для передачи и однопользовательских и многопользовательских пакетов. Этот пример только поддерживает генерацию однопользовательских пакетов. Используйте объект настройки ЭХТ МУ, ehtMUConfig, сконфигурировать свойства передачи пакета ЭХТ МУ. Этот пример использует случайные биты, чтобы сгенерировать U-SIG и EHT-SIG сигнальные поля. Можно задать случайный seed или полевые значения бита путем изменения соответствующих свойств ehtMUConfig объект. Значение битов U-SIG и EHT-SIG влияет на пик к среднему отношению степени (PAPR) пакета. Поскольку этот пример не использует пространственно-временное блочное кодирование, он может измерить точность модуляции на пространственный поток.

chanBW     = 'CBW320'; % Channel bandwidth
мГц = 12; % Modulation and coding scheme
numTx = 1; % Number of transmit antennas
apepLength = 8000; % A-MPDU length pre-EOF padding in bytes

savedState = rng (0); % Set random state

cfgEHT = ehtMUConfig (chanBW); % EHT MU configuration object 
cfgEHT.NumTransmitAntennas = numTx;
cfgEHT.User{1}.MCS = mcs;
cfgEHT.User{1}.NumSpaceTimeStreams = numTx;
cfgEHT.User{1}.APEPLength = apepLength;
cfgEHT.RU{1}.SpatialMapping = 'Direct';

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

osf = 4; % Oversampling factor

Создайте случайные биты для всех пакетов.

psduLength = cfgEHT.getPSDULength*8; % PSDU length in bits per packet
data = randi([0 1],psduLength*numPackets,1);

Сгенерируйте форму волны ЭХТ МУ для заданных битов и настройки при помощи ehtWaveformGenerator функция, задавая желаемый фактор сверхдискретизации, количество пакетов, и время простоя между каждым пакетом.

txWaveform = ehtWaveformGenerator(data,cfgEHT,'NumPackets',numPackets,'IdleTime',idleTime*1e-6,'OversamplingFactor',osf);

Получите основополосную частоту дискретизации формы волны

fs = wlanSampleRate(chanBW);
disp(['Baseband sampling rate: ' num2str(fs/1e6) ' Msps']);

Предварительно ожидайте нули к форме волны, чтобы допускать раннюю временную синхронизацию.

txWaveform = [zeros(round(idleTime*1e-6*fs),numTx); txWaveform];

Добавьте ухудшения

Моделирование HPA

HPA вводит нелинейное поведение в форме внутриполосного искажения и спектрального перероста. Этот пример симулирует усилители мощности при помощи модели [3] Rapp, которая вводит искажение AM.

Смоделируйте усилитель при помощи dsp.FIRInterpolator объект, и конфигурирует уменьшаемое искажение путем определения возврата, hpaBackoff, таким образом, что усилитель действует ниже его точки насыщения. Можно увеличить возврат, чтобы уменьшать EVM для более высоких значений MCS.

pSaturation = 25; % Saturation power of a power amplifier in dBm
hpaBackoff = 16;  % Power amplifier backoff in dB
nonLinearity = comm.MemorylessNonlinearity;
nonLinearity.Method = 'Rapp model';
nonLinearity.Smoothness = 3; % p parameter
nonLinearity.LinearGain = -hpaBackoff;
nonLinearity.OutputSaturationLevel = db2mag(pSaturation-30);
txWaveform = nonLinearity(txWaveform);

Тепловой шум

Добавьте тепловой шум в каждую передающую антенну при помощи comm.ThermalNoise объект с шумовой фигурой 6 дБ [4].

thNoise = comm.ThermalNoise('NoiseMethod','Noise Figure','SampleRate',fs*osf,'NoiseFigure',6);

for i = 1:cfgEHT.NumTransmitAntennas
    txWaveform(:,i) = thNoise(txWaveform(:,i));
end

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

Субдискретизация и фильтрация

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

Спроектируйте фильтр передискретизации.

aStop = 40; % Stopband attenuation
ofdmInfo = ehtOFDMInfo('EHT-Data',cfgEHT); % OFDM parameters
SCS = fs/ofdmInfo.FFTLength; % Subcarrier spacing
txbw = max(abs(ofdmInfo.ActiveFrequencyIndices))*2*SCS; % Occupied bandwidth
[L,M] = rat(osf);
maxLM = max([L M]);
R = (fs-txbw)/fs;
TW = 2*R/maxLM; % Transition width
b = designMultirateFIR(L,M,TW,aStop);

Передискретизируйте форму волны к основной полосе.

firinterp = dsp.FIRRateConverter(M,L,b);
rxWaveform = firinterp(txWaveform);

Обработка приемника

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

  • Обнаружьте запуск пакета

  • Извлеките устаревшие поля

  • Оцените и откорректируйте крупную несущую частоту возмещена (CFO)

  • Выполните прекрасную оценку символьной синхронизации при помощи откорректированных частотой устаревших полей

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

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

  • Извлеките L-LTF, затем оцените и откорректируйте прекрасный CFO

  • Извлеките EHT-LTF и выполните оценку канала для каждого из потоков передачи

  • Измерьте спектральную плоскость при помощи оценки канала

  • Извлеките и OFDM демодулируют Поле данных EHT

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

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

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

  • Восстановите PSDU путем декодирования компенсируемых символов

Эта схема показывает цепь обработки.

Этот пример делает два различных измерения EVM.

  1. EVM RMS на пакет, который включает усреднение EVM по поднесущим, символам OFDM и пространственным потокам.

  2. RMS EVM на поднесущую на пространственный поток для пакета. Поскольку эта настройка сопоставляет пространственные потоки непосредственно с антеннами, это измерение может помочь обнаружить зависимые частотой ухудшения, которые могут влиять на отдельные цепи RF по-другому. Это измерение составляет в среднем EVM по символам OFDM только.

Setup измерения EVM.

[EVMPerPkt,EVMPerSC] = evmSetup(cfgEHT);

Получите индексы для доступа к каждому полю в пакете временного интервала.

ind = ehtFieldIndices(cfgEHT);

Задайте минимальную обнаруживаемую длину данных в выборках.

minPktLen = double(ind.LSTF(2)-ind.LSTF(1))+1;

Обнаружьте и пакеты процесса в принятой форме волны при помощи while цикл, который выполняет эти шаги.

  1. Обнаружьте пакет путем индексации в rxWaveform с демонстрационным смещением, searchOffset

  2. Обнаружьте и обработайте первый пакет в rxWaveform

  3. Обнаружьте и обработайте следующий пакет путем постепенного увеличения демонстрационного смещения индекса

  4. Повторитесь, пока никакие дальнейшие пакеты не будут обнаружены

rxWaveformLength = size(rxWaveform,1);
pktLength = double(ind.EHTData(2));
rmsEVM = zeros(numPackets,1);
pktOffsetStore = zeros(numPackets,1);
rng(savedState); % Restore random state
pktNum = 0;
searchOffset = 0; % Start at first sample (no offset)
while (searchOffset+minPktLen)<=rxWaveformLength
    
    % Detect packet and determine coarse packet offset
    pktOffset = wlanPacketDetect(rxWaveform,cfgEHT.ChannelBandwidth,searchOffset);
    % Packet offset from start of the waveform
    pktOffset = searchOffset+pktOffset; 
    % Skip packet if L-STF is empty
    if isempty(pktOffset) || (pktOffset<0) || ...
            ((pktOffset+ind.LSIG(2))>rxWaveformLength)
        break;
    end
    
    % Extract L-STF and perform coarse frequency offset correction
    nonht = rxWaveform(pktOffset+(ind.LSTF(1):ind.LSIG(2)),:);  
    coarsefreqOff = wlanCoarseCFOEstimate(nonht,cfgEHT.ChannelBandwidth);
    nonht = helperFrequencyOffset(nonht,fs,-coarsefreqOff);
    
    % Extract the legacy fields and determine fine packet offset
    lltfOffset = wlanSymbolTimingEstimate(nonht,cfgEHT.ChannelBandwidth);
    pktOffset = pktOffset+lltfOffset; % Determine packet offset

    % If offset is outwith bounds of the waveform, then 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,cfgEHT.ChannelBandwidth);
    rxPacket = helperFrequencyOffset(rxPacket,fs,-fineFreqOff);
    
    % Extract EHT-LTF samples, demodulate, and perform channel estimation
    ehtLTF = rxPacket(ind.EHTLTF(1):ind.EHTLTF(2),:);
    ehtLTFDemod = ehtDemodulate(ehtLTF,'EHT-LTF',cfgEHT);

    % Channel estimate
    [chanEst,pilotEst] = ehtLTFChannelEstimate(ehtLTFDemod,cfgEHT);
    
    % Spectral flatness measurement
    ehtTxSpectralFlatnessMeasurement(chanEst,cfgEHT,pktNum);
    
    % Data demodulate
    rxData = rxPacket(ind.EHTData(1):ind.EHTData(2),:);
    demodSym = ehtDemodulate(rxData,'EHT-Data',cfgEHT);
    
    % Pilot phase tracking
    demodSym = ehtCommonPhaseErrorTracking(demodSym,chanEst,cfgEHT);
    
    % Estimate noise power in EHT fields
    nVarEst = ehtNoiseEstimate(demodSym(ofdmInfo.PilotIndices,:,:),pilotEst,cfgEHT);

    % Extract data subcarriers from demodulated symbols and channel
    % estimate
    demodDataSym = demodSym(ofdmInfo.DataIndices,:,:);
    chanEstData = chanEst(ofdmInfo.DataIndices,:,:);

    % Equalization and STBC combining
    [eqSym,csi] = ehtEqualizeCombine(demodDataSym,chanEstData,nVarEst,cfgEHT);
 
    % Compute RMS EVM over all spatial streams for a 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
    ehtTxEVMConstellationPlots(eqSym,evmPerSC,cfgEHT,pktNum);

    % Recover data field bits
    rxPSDU = ehtDataBitRecover(eqSym,nVarEst,csi,cfgEHT);

    if isequal(rxPSDU,data((1:psduLength)+(pktNum-1)*psduLength))
        fprintf('    Decode success\n');
    else
        fprintf('    Decode failure\n');
    end

    % 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

Спектральное измерение маски

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

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

802.11be стандарт задает спектральную маску относительно пиковой мощности спектральная плотность. Этот сгенерированный график накладывает необходимую маску с измеренным PSD.

if pktNum>0
    ehtSpectralMaskTest(gatedEHTTData,fs,osf);
end

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

Этот пример меры и графики:

  • Спектральная плоскость

  • RMS EVM на поднесущую

  • Компенсируемое созвездие

  • Спектральная маска

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

Ссылки

  1. Черновой Стандарт IEEE P802.11be™/D1.0 для Информационных технологий — Телекоммуникаций и обмена информацией между системными Локальными сетями и городскими компьютерными сетями — Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 8: Улучшения для чрезвычайно высокой пропускной способности (EHT).

  2. Черновой Стандарт IEEE P802.11ax™/D4.1 для Информационных технологий - Телекоммуникаций и обмена информацией между системами - Локальными сетями и городскими компьютерными сетями - Конкретными требованиями - Часть 11: Беспроводное Среднее управление доступом (MAC) LAN и Физический уровень (PHY) Технические требования - Поправка 1: Улучшения для Высокой эффективности WLAN.

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

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

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