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

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

Введение

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

Этот пример выполняет симуляцию, включающую:

  • Строение и передача SRS

  • Совершенная и практичная синхронизация и оценка канала

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

  • Выбор PMI

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

Длина симуляции и ОСШ

Установите длину симуляции в терминах количества систем координат 10 мс. Установите точки ОСШ для моделирования. ОСШ определяется по RE и применяется к каждой приемной антенне.

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

UE и SRS Строения

Установите ключевые параметры симуляции. К ним относятся:

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

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

  • Длина циклического префикса: normal или extended

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

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

Заданные параметры SRS включают:

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

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

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

  • Начальное положение SRS по частоте, заданной в RB

  • Пропускная способность и скачкообразное изменение частоты строения CSRS, BSRS, и BHop. Задайте BHop >= BSRS для отключения скачкообразного изменения частоты.

  • Гребень передачи для определения плотности частоты SRS в поднесущих: 2,4

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

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

  • Тип ресурса может быть 'periodic', 'semi-persistent' и 'aperiodic'. Шаблон скачкообразного изменения частоты сбрасывается для апериодических типов ресурсов 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. ОСШ для каждого слоя задается для 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. Предполагаемые ИМТ получают с помощью практической оценки канала, а идеальные ИМТ выбирают с помощью идеальной оценки канала.

% 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 и местоположение в ресурсной сетке, где произошли ошибки.

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 TS 38.211. "NR; Физические каналы и модуляция (Release 15). Группа технических спецификаций Радиосеть доступ.

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

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

% 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

См. также

Функции

Объекты

Похожие темы