exponenta event banner

Оценка информации о состоянии восходящего канала NR с использованием SRS

Этот пример показывает, как использовать зондирующие опорные сигналы (SRS) для синхронизации, оценки канала и оценки информации о состоянии канала восходящей линии связи (CSI).

Введение

Зондирующие опорные сигналы - это физические сигналы восходящей линии связи, используемые пользовательским оборудованием (UE) для зондирования восходящего канала, включая синхронизацию и оценку CSI. CSI содержит индикатор качества канала (CQI), индикатор ранга (RI) и индикатор матрицы предварительного кодера (PMI). В этом примере показано, как использовать SRS для выбора соответствующего PMI в частотно-селективных шумовых каналах. Передачи, основанные на кодовой книге восходящей линии связи, используют PMI, как определено в TS 38.211, раздел 6.3.1.5 [1].

В этом примере выполняется моделирование, включающее:

  • Конфигурирование и передача SRS

  • Идеальная и практичная синхронизация и оценка канала

  • Оценка отношения сигнал/шум (SNR)

  • Выбор PMI

  • Оценка эффективности выбора PMI

Длина моделирования и SNR

Задайте длину моделирования в терминах количества кадров 10 мс. Установите точки SNR для моделирования. SNR определяется для каждого RE и применяется к каждой приемной антенне.

numFrames = 1; % 10 ms frames
snr = 20; % SNR in dB

Конфигурация UE и SRS

Задайте ключевые параметры моделирования. К ним относятся:

  • Полоса пропускания в блоках ресурсов (12 поднесущих на блок ресурсов)

  • Интервал между поднесущими: 15, 30, 60, 120, 240 (кГц)

  • Длина циклического префикса: обычный или расширенный

  • Количество передающих и приемных антенн: 1, 2 или 4.

  • Количество слоев. Она должна быть меньше или равна количеству передающих и приемных антенн.

Указанные параметры SRS включают в себя:

  • Количество антенных портов SRS: 1,2,4

  • Количество символов OFDM, выделенных для SRS на слот: 1,2,4

  • Запуск символа OFDM передачи SRS в пределах слота. Он должен быть (8... 13) для нормальных ПУ и (6... 11) для расширенных ПУ.

  • Исходное положение ПСУ по частоте, указанной в БР

  • Конфигурация полосы пропускания и скачкообразной перестройки частоты CSRS, BSRS, и BHop. Набор BHop >= BSRS для отключения скачкообразной перестройки частоты.

  • Передающая гребенка для задания плотности частот SRS в поднесущих: 2,4

  • Количество повторяющихся символов SRS в слоте. Он отключает скачкообразную перестройку частоты в блоках Repetition символы. Набор Repetition = 1 без повторения.

  • Периодичность и смещение SRS в слотах.

  • Тип ресурса может быть периодическим, полупостоянным и апериодическим. Шаблон скачкообразной перестройки частоты сбрасывается для апериодических типов ресурсов SRS в каждом слоте.

% Create UE/carrier configuration
ue = nrCarrierConfig;
ue.NSizeGrid = 52;          % Bandwidth in number of resource blocks (52RBs at 15kHz SCS for 10MHz BW)
ue.SubcarrierSpacing = 15;  % 15, 30, 60, 120, 240 (kHz)
ue.CyclicPrefix = 'Normal'; % 'Normal' or 'Extended'

nTxAnts = 2;  % Number of transmit antennas (1,2,4)
nRxAnts = 2;  % Number of receive antennas
nLayers = min(nTxAnts,nRxAnts);

% Configure a periodic multi-port SRS and enable frequency hopping
srs = nrSRSConfig;
srs.NumSRSSymbols = 4;          % Number of OFDM symbols allocated per slot (1,2,4)
srs.SymbolStart = 8;            % Starting OFDM symbol within a slot
srs.NumSRSPorts = nTxAnts;      % Number of SRS antenna ports (1,2,4).
srs.FrequencyStart = 0;         % Frequency position of the SRS in BWP in RBs
srs.NRRC = 0;                   % Additional offset from FreqStart specified in blocks of 4 PRBs (0...67)
srs.CSRS = 14;                  % Bandwidth configuration C_SRS (0...63). It controls the allocated bandwidth to the SRS
srs.BSRS = 0;                   % Bandwidth configuration B_SRS (0...3). It controls the allocated bandwidth to the SRS
srs.BHop = 0;                   % Frequency hopping configuration (0...3). Set BHop < BSRS to enable frequency hopping
srs.KTC = 2;                    % Comb number (2,4). Frequency density in subcarriers
srs.Repetition = 2;             % Repetition (1,2,4). It disables frequency hopping in blocks of |Repetition| symbols
srs.SRSPeriod = [2 0];          % Periodicity and offset in slots. SRSPeriod(2) must be < SRSPeriod(1)
srs.ResourceType = 'periodic';  % Resource type ('periodic', 'semi-persistent','aperiodic'). Use 'aperiodic' to disable inter-slot frequency hopping

Конфигурация синхронизации, оценки канала и измерения CSI

В этом примере выполняется синхронизация и оценка канала в слотах-кандидатах SRS. Оценки синхронизации и канала обновляются только в слотах, содержащих передачи SRS. В установках SRS со скачкообразной перестройкой частоты оценки канала обновляются только в тех блоках ресурсов, которые содержат символы SRS. Когда передача SRS отсутствует, оценки синхронизации и канала из предыдущих временных интервалов сохраняются и используются для получения CSI. Аналогично, оценки мощности шума обновляются только в слотах-кандидатах SRS.

Логическая переменная practicalSynchronization управляет поведением синхронизации канала. Если установлено значение true, пример выполняет практическую синхронизацию на основе значений принятого SRS. Если установлено значение false, в примере выполняется идеальная синхронизация. Синхронизация выполняется только в слотах, где передается SRS, чтобы поддерживать точные и практические оценки канала синхронизированными.

practicalSynchronization = true;

Этот пример оценивает CSI путем разделения полосы частот несущей на несколько поддиапазонов. Укажите размер частотных поддиапазонов в RB

csiSubbandSize = 4; % Number of RBs per subband

Конфигурация модели канала распространения

Создайте объект модели канала TDL и укажите его характеристики распространения. Выберите расширение задержки канала и максимальный доплеровский сдвиг для создания изменяющегося во времени и частотно-селективного канала в пределах длительности моделирования и полосы частот несущей.

channel = nrTDLChannel;
channel.DelayProfile = 'TDL-C';
channel.DelaySpread = 40e-9;
channel.MaximumDopplerShift = 30;
channel.NumTransmitAntennas = nTxAnts;
channel.NumReceiveAntennas = nRxAnts;
channel.Seed = 5;

% Set channel sample rate
ofdmInfo = nrOFDMInfo(ue);
channel.SampleRate = ofdmInfo.SampleRate;

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

chInfo = info(channel);
maxChDelay = ceil(max(chInfo.PathDelays*channel.SampleRate));
maxChDelay = maxChDelay + chInfo.ChannelFilterDelay;

% Reset random generator for reproducibility
rng('default');

Цикл обработки

Измерьте CSI для каждого слота. CSI получают, используя следующие стадии:

  • Создать сетку ресурсов. Используйте символы и индексы SRS для создания сетки элементов ресурсов (RE).

  • Формирование формы сигнала. Затем генерируемая сетка модулируется OFDM.

  • Модель шумного канала. Сигнал пропускается через канал замирания TDL. Добавляется AWGN. SNR для каждого уровня определяется для RE и приемной антенны.

  • Выполните синхронизацию и демодуляцию OFDM. Для идеальной синхронизации импульсная характеристика канала восстанавливается и используется для синхронизации принятого сигнала. Для практической синхронизации принятый сигнал коррелируется с SRS. Синхронизированный сигнал затем демодулируется OFDM.

  • Выполните оценку канала. Для совершенной оценки канала импульсная характеристика канала восстанавливается и OFDM демодулируется для обеспечения оценки канала. Для практической оценки канала используется передаваемая SRS.

  • Выбор PMI. Оценка канала на основе SRS используется для выбора наилучшего PMI в каждом поддиапазоне оценки CSI. Критерий выбора PMI максимизирует среднее отношение сигнал-помеха-плюс-шум (SINR) после предварительного кодирования.

  • Потеря SINR при выборе PMI. Потери SINR вычисляются путем сравнения SINR после предварительного кодирования с оцененными и идеальными PMI. Идеальные PMI выбираются с использованием идеальных оценок канала.

% Number of slots to simulate
numSlots = numFrames*ue.SlotsPerFrame;

% Total number of subcarriers and symbols per slot
K = ue.NSizeGrid * 12;
L = ue.SymbolsPerSlot;

% Initialize arrays storing channel estimates
allTxGrid = zeros([K L*numSlots nTxAnts]);

slotGridSize = [K L nRxAnts nTxAnts];
hEst = zeros(slotGridSize);
hestInterp = zeros(slotGridSize);
hEstUpdate = zeros(slotGridSize);

totalGridSize = [K L*numSlots nRxAnts nTxAnts];
allHest = zeros(totalGridSize);
allHestPerfect = zeros(totalGridSize);
allHestInterp = zeros(totalGridSize);

% Initialize noise power estimate
nvar = 0;

% Calculate the number of CSI subbands for the carrier
numCSISubbands = ceil(ue.NSizeGrid/csiSubbandSize);

% Initialize SINR per subband, slot, and PMI
maxPMI = hMaxPUSCHPrecodingMatrixIndicator(nLayers,nTxAnts);
sinrSubband = zeros([numCSISubbands numSlots maxPMI+1]);

% Initialize PMI matrix and SINR loss
pmi = NaN(numCSISubbands,numSlots);
pmiPerfect = pmi;
loss = zeros(size(pmi));

% Initialize timing estimation offset
offset = chInfo.ChannelFilterDelay;

% Calculate SRS CDM lengths
cdmLengths = hSRSCDMLengths(srs);

% OFDM symbols used for CSI acquisition
csiSelectSymbols = srs.SymbolStart + (1:srs.NumSRSSymbols);

for nSlot = 0:numSlots-1

    % Update slot counter
    ue.NSlot = nSlot;

    % Generate SRS and map to slot grid
    [srsIndices,srsIndInfo] = nrSRSIndices(ue,srs);
    srsSymbols = nrSRS(ue,srs);

    % Create a slot-wise resource grid empty grid and map SRS symbols
    txGrid = nrResourceGrid(ue,nTxAnts);
    txGrid(srsIndices) = srsSymbols;

    % Determine if the slot contains SRS
    isSRSSlot= ~isempty(srsSymbols);

    % OFDM Modulation
    [txWaveform,waveformInfo] = nrOFDMModulate(ue,txGrid);

    txWaveform = [txWaveform; zeros(maxChDelay, size(txWaveform,2))]; % required later to flush the channel filter to obtain the received signal

    % Transmission through channel
    [rxWaveform,pathGains] = channel(txWaveform);

    % Add AWGN to the received time domain waveform
    % Normalize noise power to take account of sampling rate, which is
    % a function of the IFFT size used in OFDM modulation. The SNR
    % is defined per RE for each receive antenna (TS 38.101-4).
    SNR = 10^(snr/20); % Calculate linear noise gain
    N0 = 1/(sqrt(2.0*nRxAnts*double(waveformInfo.Nfft))*SNR);
    noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform)));

    rxWaveform = rxWaveform + noise;

    % Perform timing offset estimation
    pathFilters = getPathFilters(channel);

    % Timing estimation is only performed in the slots where the SRS is
    % transmitted to keep the perfect and practical channel estimation
    % synchronized.
    if isSRSSlot
        if practicalSynchronization
            % Practical synchronization. Correlate the received waveform
            % with the SRS to give timing offset estimate
            offset = nrTimingEstimate(ue,rxWaveform,srsIndices,srsSymbols);
        else
            offset = nrPerfectTimingEstimate(pathGains,pathFilters);
        end
    end

    % Perform OFDM demodulation
    rxGrid = nrOFDMDemodulate(ue,rxWaveform(1+offset:end,:));

    % Perform practical channel estimation
    % Update channel estimates only in the symbols and RBs containing SRS
    % in this slot and hold the estimates from the previous slot in other
    % locations. nvar is not updated when there is no SRS transmission. Use
    % a time-averaging window that covers all the SRS symbols transmitted.
    if isSRSSlot % this slot contains an SRS transmission
        [hEst,nvar] = nrChannelEstimate(ue,rxGrid,srsIndices,srsSymbols,'AveragingWindow',[0 7],'CDMLengths',cdmLengths);

        % Use channel estimate from previous slot for OFDM symbols before the first SRS symbol
        hestInterp = repmat(hestInterp(:,end,:,:),1,ue.SymbolsPerSlot);

        % Update channel estimate in OFDM symbols and RB where the SRS is
        % present and hold all channel estimates until the end of the slot
        firstSymbol = srs.SymbolStart+1;
        lastSymbol = srs.SymbolStart + srs.NumSRSSymbols;
        hEstUpdate(:,firstSymbol:lastSymbol,:,:) = hEst(:,firstSymbol:lastSymbol,:,:);
        hEstUpdate(:,lastSymbol:L,:,:) = repmat(hEst(:,lastSymbol,:,:),1,ue.SymbolsPerSlot-lastSymbol+1);

        idxHEstUpdate = hEstUpdate ~= 0; % Indices of updated channel estimates
        hestInterp(idxHEstUpdate) = hEstUpdate(idxHEstUpdate);
    else % Hold previous channel estimates if this slot does not contain SRS
        hestInterp = repmat(hestInterp(:,end,:,:),1,ue.SymbolsPerSlot);
    end

    % PMI Selection
    % Select the precoder matrix indicators for a number of layers using
    % the interpolated channel estimates in the OFDM symbols specified by
    % csiSelectSymbols. The PMIs are estimated per CSI subband
    [pmi(:,nSlot+1),sinrSubband(:,nSlot+1,:),subbandIndices] = hPMISelect(nLayers, hestInterp(:,csiSelectSymbols,:,:), nvar, csiSubbandSize);

    % PMI selection SINR loss
    % Calculate the performance loss as a ratio of the SINR after precoding
    % with PMIs selected using a practical channel estimate and the SINR
    % after precoding with PMIs selected using a perfect channel estimate.

    % Calculate perfect channel estimate for perfect PMI selection
    hEstPerfect = nrPerfectChannelEstimate(ue,pathGains,pathFilters,offset);

    % Perfect noise estimate from noise realization
    noiseGrid = nrOFDMDemodulate(ue,noise(1+offset:end,:));
    nvarPerfect = var(noiseGrid(:));

    [loss(:,nSlot+1),pmiPerfect(:,nSlot+1)] = hPMISelectionSINRLoss(pmi(:,nSlot+1), nLayers,  hEstPerfect(:,csiSelectSymbols,:,:), nvarPerfect);

    % Save a copy of all transmitted OFDM grids and channel estimates for
    % display purposes
    thisSlot = nSlot*L + (1:L); % Symbols of the current slot
    allTxGrid(:,thisSlot,:) = txGrid;
    allHest(:,thisSlot,:,:) = hEst;
    allHestInterp(:,thisSlot,:,:) = hestInterp;
    allHestPerfect(:,thisSlot,:,:) = hEstPerfect;

end

Результаты

В этом разделе отображаются следующие результаты для всех сконфигурированных кадров:

  • Переданная сетка OFDM, содержащая SRS

  • Идеальные и практичные оценки канала и ошибка оценки канала. Погрешность вычисляется как абсолютное значение разности между совершенными и практическими оценками канала.

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

  • Среднее значение SINR на поддиапазон после предварительного кодирования с наилучшим оценочным PMI

  • Потеря производительности SINR

% Create x-axis and y-axis vectors
symbols = 0:(ue.NSlot+1)*ue.SymbolsPerSlot-1;
slots = 0:ue.NSlot;
subcarriers = 1:ue.NSizeGrid*12;
resourceBlocks = 1:ue.NSizeGrid;

Отображение переданной сетки OFDM, содержащей SRS

figure
imagesc(symbols,subcarriers,abs(allTxGrid(:,:,1,1)));
xlabel('OFDM symbol'); ylabel('Subcarrier'); axis xy;
title('Transmitted SRS (port 1)');

Отображение идеальных и практичных оценок канала и ошибки оценки канала на интервал времени и RB. Ошибка оценки канала определяется как абсолютное значение разности между совершенными и практическими оценками канала.

% Remove first OFDM symbols not containing SRS to improve visualization of
% channel estimation error
hEstInterp = allHestInterp;
idx = 1:(srs.SRSPeriod(2)*ue.SymbolsPerSlot + srs.SymbolStart);
hEstInterp(:,idx,:,:) = NaN;
hEstInterp((srs.NRB*12+1):end,:,:,:) = NaN;

hChannelEstimationPlot(symbols,subcarriers,allHestPerfect,hEstInterp);

Отображение выбранного PMI с использованием идеальных и практичных оценок канала и потерь SINR выбора PMI на слот и RB. Потери SINR определяются как отношение SINR после предварительного кодирования с оцененными и совершенными PMI. Оцененные PMI получают, используя практическую оценку канала, и идеальные PMI выбирают, используя совершенную оценку канала.

% First expand loss from subbands into RBs for display purposes
pmiRB = hExpandSubbandToRB(pmi, csiSubbandSize, ue.NSizeGrid);
pmiPerfectRB = hExpandSubbandToRB(pmiPerfect, csiSubbandSize, ue.NSizeGrid);
lossRB = hExpandSubbandToRB(loss, csiSubbandSize, ue.NSizeGrid);

hPMIPlot(slots,resourceBlocks,pmiRB,pmiPerfectRB,lossRB);

Затем сравните PMI, полученные с использованием как идеальных, так и практических оценок канала. Это указывает соотношение корректных и суммарных PMI и местоположение в сетке ресурсов, где произошли ошибки.

numLayers = min(size(allHestInterp,[3 4]));
if numLayers ~= 1
    pmiErr = sum( abs(pmi - pmiPerfect) > 0, [1 2])./ sum( ~isnan(pmi), [1 2]);

    TotPMIEst = sum(~isnan(pmi),[1 2]);
    fprintf('Number of estimated PMI: %d \n', TotPMIEst);
    fprintf('    Number of wrong PMI: %d \n', ceil(pmiErr*TotPMIEst));
    fprintf('         Relative error: %.1f (%%) \n', pmiErr*100);
else
    fprintf('For a single layer, PMI is always 0.\n');
end
Number of estimated PMI: 130 
    Number of wrong PMI: 3 
         Relative error: 2.3 (%) 

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

hBestSINRPlot(slots,resourceBlocks,sinrSubband,pmi,csiSubbandSize);

Резюме и дальнейшие исследования

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

Можно исследовать производительность оценки канала и выбора PMI в более сложных настройках. Увеличение периодичности SRS и наблюдение за тем, как оценка старения канала вносит задержку и ухудшает SINR после предварительного кодирования. Кроме того, можно исследовать рабочие характеристики в условиях скачкообразной перестройки частоты путем установки параметров SRS BHop < BSRS. В этой настройке оценка старения канала не является равномерной по частоте.

Приложение

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

Ссылки

  1. 3GPP ТС 38.211. "НР; Физические каналы и модуляция (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

  2. 3GPP ТС 38.101-4. "НР; Радиопередача и прием пользовательского оборудования (UE). Часть 4: Требования к производительности (выпуск 15). "Проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.

Локальные функции

% Displays perfect and practical channel estimates and the channel
% estimation error for the first transmit and receive ports. The channel
% estimation error is defined as the absolute value of the difference
% between the perfect and practical channel estimates.
function hChannelEstimationPlot(symbols,subcarriers,allHestPerfect,allHestInterp)

    figure
    subplot(311)
    imagesc(symbols, subcarriers, abs(allHestPerfect(:,:,1,1)));
    axis xy; xlabel('OFDM symbol'); ylabel('Subcarrier');
    colorbar;
    title('Perfect Channel Estimate (TxAnt=1, RxAnt=1)');

    subplot(312)
    imagesc(symbols, subcarriers, abs(allHestInterp(:,:,1,1)), ...
            'AlphaData',~isnan(allHestInterp(:,:,1,1)))
    axis xy; xlabel('OFDM symbol'); ylabel('Subcarrier');
    colorbar;
    title('SRS-based Practical Channel Estimate (TxAnt=1, RxAnt=1) ');

    % Display channel estimation error, defined as the difference between the
    % SRS-based and perfect channel estimates
    subplot(313)
    hestErr = abs(allHestInterp - allHestPerfect);
    imagesc(symbols, subcarriers, hestErr(:,:,1,1),...
            'AlphaData',~isnan(hestErr(:,:,1,1)));
    axis xy; xlabel('OFDM symbol'); ylabel('Subcarrier');
    colorbar;
    title('Channel Estimation Error (TxAnt=1, RxAnt=1)');

end

% Displays the PMI evolution and PMI estimation SINR loss over time and
% frequency. The SINR loss is defined as a ratio of the SINR after
% precoding with estimated and perfect PMIs. Estimated PMIs are
% obtained using a practical channel estimate and perfect PMIs are
% selected using a perfect channel estimate.
function hPMIPlot(slots,resourceBlocks,pmiRB,pmiPerfectRB,lossRB)

    figure
    subplot(311)
    imagesc(slots,resourceBlocks,pmiPerfectRB,'AlphaData',~isnan(pmiPerfectRB)); axis xy;
    c = caxis;
    cm = colormap;
    colormap( cm(1:floor(size(cm,1)/(c(2)-c(1)) -1):end,:) ); % Adjust colormap to PMI discrete values
    colorbar
    xlabel('Slot'); ylabel('Resource block'), title('PMI Selected using Perfect Channel Estimates')

    subplot(312)
    imagesc(slots,resourceBlocks,pmiRB,'AlphaData',~isnan(pmiRB)); axis xy;
    colorbar,
    xlabel('Slot'); ylabel('Resource block'), title('PMI Selected using SRS')

    subplot(313)
    imagesc(slots,resourceBlocks,lossRB,'AlphaData',~isnan(lossRB));
    colormap(gca,cm)
    xlabel('Slot'); ylabel('Resource block'); axis xy; colorbar;
    title('PMI Estimation SINR Loss (dB)')

end

% Displays the SINR per resource block obtained after precoding with the
% PMI that maximizes the SINR per subband.
function hBestSINRPlot(slots,resourceBlocks,sinrSubband,pmi,csiBandSize)

    % Display SINR after precoding with best PMI
    bestSINRPerSubband = nan(size(sinrSubband,[1 2]));

    % Get SINR per subband and slot using best PMI
    [sb,nslot] = find(~isnan(pmi));
    for i = 1:length(sb)
        bestSINRPerSubband(sb(i),nslot(i)) = sinrSubband(sb(i),nslot(i),pmi(sb(i),nslot(i))+1);
    end

    % First expand SINR from subbands into RBs for display purposes
    bestSINRPerRB = hExpandSubbandToRB(bestSINRPerSubband, csiBandSize, length(resourceBlocks));

    figure
    sinrdb = 10*log10(abs(bestSINRPerRB));
    imagesc(slots,resourceBlocks,sinrdb,'AlphaData',~isnan(sinrdb));
    axis xy; colorbar;
    xlabel('Slot');
    ylabel('Resource block')
    title('Average SINR Per Subband and Slot After Precoding with Best PMI (dB)')

end

% Expands a 2D matrix of values per subband in the first dimension into a
% matrix of values per resource block.
function rbValues = hExpandSubbandToRB(subbandValues, bandSize, NRB)

    lastBandSize = mod(NRB,bandSize);
    lastBandSize = lastBandSize + bandSize*(lastBandSize==0);

    rbValues = [kron(subbandValues(1:end-1,:),ones(bandSize,1));...
                subbandValues(end,:).*ones(lastBandSize,1)];
end

См. также

Функции

Объекты

Связанные темы