exponenta event banner

Генерация, демодуляция и анализ сигналов агрегирования несущих восходящей линии связи

В этом примере показано, как можно генерировать, агрегировать и демодулировать несколько несущих восходящей линии связи с использованием Toolbox™ LTE. Величина вектора ошибок (EVM) и внутриполосные излучения измеряются для демодулированной несущей в соответствии с TS 36.101 Приложение F [1].

Введение

В этом примере моделируется сигнал восходящей линии связи LTE с агрегированием несущих (CA). В качестве параметра можно указать количество компонентных несущих (СС) и их соответствующие полосы пропускания. Внутриполосный смежный случай CA рассматривается в соответствии с TS 36.101 V15.4.0.

Для формирования агрегированной формы сигнала восходящей линии связи пользовательское оборудование (UE) конфигурируется для каждой компонентной несущей. Параметры агрегирования несущих вычисляются и используются для генерации модулированной формы сигнала для каждой конфигурации CC. Все сигналы, модулированные компонентными несущими, повторно дискретизируются на общую частоту дискретизации, так что они могут быть объединены для создания агрегированного сигнала. Агрегированный сигнал демодулируют и фильтруют, чтобы извлечь интересующую компонентную несущую. Затем измеряют EVM и внутриполосные излучения для этого CC и, наконец, выполняют CRC-проверку посредством выполнения декодирования PUSCH.

Количество несущих компонентов и полос пропускания

Вектор NULRB определяет количество блоков ресурсов (RB) для каждой компонентной несущей. Длина этого вектора соответствует количеству КЦ. Элементы NULRB должны находиться в наборе {6, 15, 25, 50, 75, 100} RB. TS 36.101 В таблице 5.6A.1-1 [1] перечислены допустимые комбинации полос пропускания для агрегирования несущих.

% Configure the set of NULRB values to describe the carriers to be
% aggregated
NULRB = [50 75 100];

% Establish the number of component carriers
numCC = numel(NULRB);

CCBWs = zeros(1,numCC);

if numCC<2
    error('Please specify more than one CC bandwidth value.');
end

Конфигурация UE для каждой полки компонентов

Для каждого CC создается структура конфигурации с использованием lteRMCUL. Для демонстрации внутриполосных выбросов рассматривается частичное распределение RB для каждого CC. Структуры конфигурации для всех CC хранятся в массиве ячеек.

% Specify the number of subframes to generate
numSubframes = 10;

% Configure CCs
frc = cell(1,numCC);
for i = 1:numCC
    switch NULRB(i)
        case 6
            frc{i} = lteRMCUL('A3-1');
            frc{i}.PUSCH.PRBSet = (0:2).';
        case 15
            frc{i} = lteRMCUL('A1-2');
            frc{i}.PUSCH.PRBSet = (0:8).';
        case 25
            frc{i} = lteRMCUL('A1-3');
            frc{i}.PUSCH.PRBSet = (0:15).';
        case 50
            frc{i} = lteRMCUL('A3-5');
            frc{i}.PUSCH.PRBSet = (0:39).';
        case 75
            frc{i} = lteRMCUL('A3-6');
            frc{i}.PUSCH.PRBSet = (0:59).';
        case 100
            frc{i} = lteRMCUL('A3-7');
            frc{i}.PUSCH.PRBSet = (0:80).';
        otherwise
            fprintf('Not a valid number of resource blocks: %d\n',...
                NULRB(i));
            return
    end
    CCBWs(i) = hNRBToBandwidth(NULRB(i));
    frc{i}.Bandwidth = CCBWs(i);
    frc{i}.TotSubframes = numSubframes;
    frc{i}.PUSCH.RVSeq = 0;
end

Конфигурация оценщика канала

Блок оценки канала на стороне приемника параметризуется с использованием структуры cec определено ниже.

cec = struct;                        % Channel estimation config structure
cec.PilotAverage = 'UserDefined';    % Type of pilot symbol averaging
cec.FreqWindow = 15;                 % Frequency window size
cec.TimeWindow = 15;                 % Time window size
cec.InterpType = 'Cubic';            % 2D interpolation type
cec.InterpWindow = 'Centered';       % Interpolation window type
cec.InterpWinSize = 1;               % Interpolation window size
cec.Reference = 'Antennas';          % Specifies point of reference for
                                     % channel estimation.

Расчет параметров агрегирования несущих

Для выполнения агрегирования несущих вычисляются частотные параметры, описанные в TS 36.101, разделах 5.6 и 5.7 [1]. Эти параметры суммированы на следующем рисунке.

Это приводит к трем переменным:

  • F_c - вектор, содержащий центральную частоту каждого CC

  • ccSpacing содержит интервал между CCs в МГц

  • BW_channel_CA - агрегированная полоса пропускания канала для всех CCs

В приведенном ниже коде мы сначала вычисляем значение для всех CCs, предполагая, что нижняя из них центрирована в основной полосе частот (0 Гц). Один раз BW_channel_CA вычисляется, все значения сдвигаются таким образом, что центр агрегированной полосы пропускания располагается на полосе частот (0 Гц).

% Define Delta_f1 parameter in MHz for nominal guard band and frequency
% offset calculations. In the uplink Delta_f1 is zero
% (TS 36.101, Table 5.6A-1)
Delta_f1 = 0; % in MHz
maxBW = max(CCBWs);

% Initialize center frequency and CC spacing vectors
F_c = zeros(1,numCC); % Center frequencies
ccSpacing = zeros(1,numCC-1); % CC spacing

% Calculate nominal guard band, TS 36.101 5.6A-1
nominalGuardBand = 0.05*maxBW-0.5*Delta_f1;

% Initially assume lower carrier frequency is at baseband
F_c(1) = 0;

% Calculate CC spacing and center frequencies
for k = 2:numCC
    ccSpacing(k-1) = hCarrierAggregationChannelSpacing( ...
        frc{k-1}.Bandwidth, frc{k}.Bandwidth);
    F_c(k) = F_c(k-1) + ccSpacing(k-1);
end

% Calculate lower and higher frequency offsets, TS 36.101 5.6A
F_offset_low = (0.18*NULRB(1)+Delta_f1)/2 + nominalGuardBand;
F_offset_high = (0.18*NULRB(end)+Delta_f1)/2 + nominalGuardBand;

% Calculate lower and higher frequency edges, TS 36.101 5.6A
F_edge_low = F_c(1) - F_offset_low;
F_edge_high = F_c(end) + F_offset_high;

% Calculate aggregated channel bandwidth, TS 36.101 5.6A
BW_channel_CA = F_edge_high - F_edge_low;
fprintf('BW_channel_CA: %0.4f MHz\n',BW_channel_CA);

% Calculate shift to center baseband
shiftToCenter = -1*(BW_channel_CA/2 + F_edge_low);

% Shift the center frequencies so that the aggregated bandwidth is centered
% at baseband
F_c = F_c + shiftToCenter;
F_edge_low = F_c(1) - F_offset_low;
F_edge_high = F_c(end) + F_offset_high;

% Display frequency band edges
fprintf('F_edge_low:  %0.4f MHz\n',F_edge_low);
fprintf('F_edge_high: %0.4f MHz\n',F_edge_high);
fprintf('F_offset_low:  %0.4f MHz\n',F_offset_low);
fprintf('F_offset_high: %0.4f MHz\n',F_offset_high);

% Display carrier frequencies
fprintf('\n');
for i = 1:numCC
    fprintf('Component Carrier %d:\n',i);
    fprintf('Fc: %0.4f MHz\n', F_c(i));
end
BW_channel_CA: 44.6000 MHz
F_edge_low:  -22.3000 MHz
F_edge_high: 22.3000 MHz
F_offset_low:  5.5000 MHz
F_offset_high: 10.0000 MHz

Component Carrier 1:
Fc: -16.8000 MHz
Component Carrier 2:
Fc: -4.8000 MHz
Component Carrier 3:
Fc: 12.3000 MHz

Расчет требуемой скорости избыточной дискретизации

Требуемые коэффициенты избыточной выборки для каждого несущего элемента OSRs вычисляют для общей частоты дискретизации для агрегированного сигнала.

% Considering the bandwidth utilization as 85%
bwfraction = 0.85;

% Calculate sampling rates of the component carriers
CCSR = zeros(1,numCC);
for i = 1:numCC
    info = lteSCFDMAInfo(frc{i});
    CCSR(i) = info.SamplingRate;
end

% Calculate overall sampling rate for the aggregated signal

% Calculate the oversampling ratio (for the largest BW CC) to make sure the
% signal occupies 85% (bwfraction) of the aggregated channel bandwidth
OSR = (BW_channel_CA/bwfraction)/(max(CCSR)/1e6);
% To simplify the resampling operation, choose an oversampling ratio as the
% smallest power of 2 greater than or equal to OSR
OSR = 2^ceil(log2(OSR));
SR = OSR*max(CCSR);
fprintf('\nOutput sample rate: %0.4f Ms/s\n\n',SR/1e6);

% Calculate individual oversampling factors for the component carriers
OSRs = SR./CCSR;
Output sample rate: 61.4400 Ms/s

Генерация сигналов и агрегирование несущих

lteRMCULTool используется для генерации формы сигнала для каждого CC. Они повторно дискретизируются до общей частоты дискретизации, модулируются до соответствующей центральной частоты и, наконец, суммируются для формирования агрегированного сигнала.

% Generate component carriers
tx = cell(1,numCC);
for i = 1:numCC
    tx{i} = lteRMCULTool(frc{i},randi([0 1],1000,1));
    tx{i} = resample(tx{i},OSRs(i),1)/OSRs(i);
    tx{i} = hCarrierAggregationModulate(tx{i},SR,F_c(i)*1e6);
end

% Superpose the component carriers
waveform = tx{1};
for i = 2:numCC
    waveform = waveform + tx{i};
end

График агрегирования сигналов несущей спектра

Спектр мощности агрегированного сигнала несущей отображается с помощью hHPaggregationPlotSpectrum.m. В спектре видны отдельные полосы частот несущих. Следует отметить, что центр агрегированной полосы пропускания расположен на основной полосе частот (0 Гц), поскольку в этом примере сигнал не модулируется на РЧ.

specPlot = hCarrierAggregationPlotSpectrum(waveform,SR,...
    'Power Spectrum of Carrier Aggregation Waveform',...
    {'Carrier aggregated signal'});

Демодуляция и фильтрация интересующих CC

В этом разделе показано, как демодулировать, фильтровать и понижать выборку одного из интересующих CC. Следующие шаги:

  • Демодулируйте интересующий CC и переведите его в основную полосу (0 Гц).

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

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

% Select CC to demodulate
CCofInterest = 1;
if CCofInterest > numCC || CCofInterest <= 0
    error('Cannot demodulate CC number %d, there are %d CCs\n',...
        CCofInterest, numCC) ;
end

% Define downsampling filter order
filterOrder = 301;

% Precalculate passband and stopband values for all CC
firPassbandVec = (0.18*NULRB+Delta_f1)/2 / (SR/1e6/2);
firStopbandVec = hCarrierAggregationStopband(ccSpacing,NULRB,SR);

% Define passband and stopband for carrier of interest
firPassband = firPassbandVec(CCofInterest);
firStopband = firStopbandVec(CCofInterest);

% Extract and decode CC of interest
fprintf(1,'Extracting CC number %d: \n', CCofInterest);

% Pad signal with zeros to take into account filter transient response
% length
waveform = [waveform; zeros(filterOrder+1,size(waveform,2))];

% Demodulate carrier of interest
demodulatedCC = ...
    hCarrierAggregationModulate(waveform,SR,-F_c(CCofInterest)*1e6);

% Downsampling is done in two stages if the filter is too narrow. This
% eases the filter design requirements. If this is the case an initial
% downsampling factor of 4 is applied. You may want to consider a different
% filter design in this initial stage if the quality of the resulting
% signal is not acceptable.
if (firStopband < 0.1)
    % Down-sample by 4
    SRC = 4;
    demodulatedCC = resample(demodulatedCC,1,SRC);
    % Update pass and stopband to take first downsampling into account
    firPassband = firPassband * SRC;
    firStopband = firStopband * SRC;
else
    % No pre-filter
    SRC = 1;
end

% Design lowpass filter to filter out CC of interest
frEdges = [0 firPassband firStopband 1];
firFilter = dsp.FIRFilter;
firFilter.Numerator = firpm(filterOrder,frEdges,[1 1 0 0]);
Extracting CC number 1: 

Отображается отклик разработанного фильтра.

fvtool(firFilter,'Analysis','freq');

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

% Filter the signal to extract the component of interest
rxWaveform  = firFilter(demodulatedCC);

% Plot the demodulated and filtered signal spectra
filteredSpecPlot = ...
    hCarrierAggregationPlotSpectrum([demodulatedCC, rxWaveform],SR,...
            'Power Spectrum of Demodulated and Filtered Waveform',...
            {'Carrier aggregated signal' 'Filtered signal'});

В этот момент отфильтрованная форма сигнала может быть понижена до его скорости основной полосы частот.

rxWaveform = downsample(rxWaveform,OSRs(CCofInterest)/SRC);

Синхронизация

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

% Get the parameters for CC of interest
FRC = frc{CCofInterest};
PUSCH = FRC.PUSCH;

% Synchronize received waveform
offset = lteULFrameOffset(FRC,PUSCH,rxWaveform);
rxWaveform = rxWaveform(1+offset:end, :);

EVM, внутриполосные измерения выбросов и декодирование PUSCH

Приведенный ниже код обеспечивает расчет выбросов PUSCH EVM, PUSCH DRS EVM и внутриполосный расчет с использованием hPUSCHEVM.

EVM - это разность между восстановленными идеальными символами и измеренными принятыми символами в течение одного интервала измерения временного интервала во временной области. Процесс восстановления идеальных символов включает в себя:

  • Демодуляция множественного доступа с частотным разделением каналов с одной несущей (SC-FDMA) для получения принятой сетки ресурсов

  • Оценка канала

  • Выравнивание PUSCH

  • Демодуляция символов

  • Декодирование с последующим повторным кодированием принятых битов, перескремблированием и повторной модуляцией

Среднее EVM измеряется во времени в двух местоположениях (низком и высоком, которые обозначаются как$\overline{EVM_{l}}$ и), $\overline{EVM_{h}}$где низкое и высокое местоположения соответствуют выравниванию окна БПФ в начале и конце циклического префикса. LTE Toolbox требует, чтобы в качестве доли длины циклического префикса указывались нижние и верхние местоположения.

Внутриполосные излучения являются мерой помех, попадающих в нераспределенные БР. Внутриполосные излучения вычисляются для каждого$\Delta_{RB}$ и номера слота, где$\Delta_{RB}$ - начальный сдвиг частоты между выделенным RB и измеренным нераспределенным RB (например,$\Delta_{RB} = 1$ для первого соседнего RB вне выделенной полосы пропускания).

Из приведенных выше измерений также получены следующие графики:

  • EVM в сравнении с символом OFDM

  • EVM в сравнении с поднесущей

  • EVM в сравнении с блоком ресурсов

  • EVM в сравнении с символом OFDM и поднесущей (т.е. сеткой ресурсов EVM)

  • Восходящие внутриполосные излучения для нераспределенных RB

Следует отметить, что измерения EVM, отображаемые в окне команд, вычисляются только для выделенных блоков ресурсов PUSCH в соответствии со стандартом LTE. Графики EVM показаны на всех блоках ресурсов (выделенных или нераспределенных), что позволяет просматривать внутриполосные выбросы. В нераспределенных блоках ресурсов EVM вычисляется в предположении, что принятые элементы ресурсов имеют ожидаемое значение, равное нулю.

PUSCH восстановленного сигнала затем декодируется, и результирующий CRC проверяется на наличие ошибок.

% Configure channel estimation structure for EVM measurement
cecEVM = cec;
cecEVM.PilotAverage = 'TestEVM';
[evmpusch, evmdrs, emissions, plots] = hPUSCHEVM(frc{CCofInterest},cecEVM,rxWaveform);

% Plot the absolute in-band emissions
if (~isempty(emissions.DeltaRB))
    hPUSCHEVMEmissionsPlot(emissions);
end

% Perform SC-FDMA demodulation
rxGrid = lteSCFDMADemodulate(FRC,rxWaveform);

% Get the number of received subframes and OFDM symbols per subframe
dims = lteSCFDMAInfo(FRC);
samplesPerSubframe = dims.SamplingRate/1000;
nRxSubframes = floor(size(rxWaveform, 1)/samplesPerSubframe);
FRC.TotSubframes = 1;
resGridSize = lteResourceGridSize(FRC);
L = resGridSize(2);

disp('Decode transmitted subframes and check CRC.');

for n=0:nRxSubframes-1

    % Extract subframe
    rxSubframe = rxGrid(:,(1:L)+(n*L),:);

    % Get the transport block size for current subframe
    FRC.NSubframe = n;
    trBlkSize = PUSCH.TrBlkSizes(n+1);

    % Perform channel estimation
    [estChannelGrid, noiseEst] = lteULChannelEstimate( ...
        FRC, PUSCH, cec, rxSubframe);

    % Generate PUSCH indices and extract symbols from received and
    % channel estimate grids in preparation for PUSCH decoding
    ind = ltePUSCHIndices(FRC, PUSCH);
    [rxSym,hestSym] = lteExtractResources(ind, rxSubframe, estChannelGrid);

    % Update PUSCH to carry complete information of the UL-SCH coding
    PUSCH = lteULSCHInfo(FRC, PUSCH, trBlkSize, 'chsconcat');

    % Perform equalization, transform deprecoding, layer demapping,
    % demodulation, and descrambling on the received data using the channel
    % estimate
    [rxEncodedBits, puschsymbols] = ltePUSCHDecode(FRC, PUSCH, ...
        rxSym, hestSym, noiseEst);

    % Decode Uplink Shared Channel (UL-SCH)
    decState = [];
    [decbits,crc] = ...
        lteULSCHDecode(FRC, PUSCH, trBlkSize ,rxEncodedBits, decState);
    if crc
        disp(['Subframe ' num2str(n) ': CRC failed']);
    else
        disp(['Subframe ' num2str(n) ': CRC passed']);
    end
end
Low edge PUSCH EVM, slot 0: 0.165%
Low edge PUSCH EVM, slot 1: 0.244%
Low edge DRS EVM, slot 0: 0.210%
Low edge DRS EVM, slot 1: 0.199%
High edge PUSCH EVM, slot 0: 0.264%
High edge PUSCH EVM, slot 1: 0.253%
High edge DRS EVM, slot 0: 0.208%
High edge DRS EVM, slot 1: 0.242%
Low edge PUSCH EVM, slot 2: 0.213%
Low edge PUSCH EVM, slot 3: 0.175%
Low edge DRS EVM, slot 2: 0.186%
Low edge DRS EVM, slot 3: 0.307%
High edge PUSCH EVM, slot 2: 0.220%
High edge PUSCH EVM, slot 3: 0.258%
High edge DRS EVM, slot 2: 0.264%
High edge DRS EVM, slot 3: 0.367%
Low edge PUSCH EVM, slot 4: 0.225%
Low edge PUSCH EVM, slot 5: 0.175%
Low edge DRS EVM, slot 4: 0.180%
Low edge DRS EVM, slot 5: 0.236%
High edge PUSCH EVM, slot 4: 0.260%
High edge PUSCH EVM, slot 5: 0.243%
High edge DRS EVM, slot 4: 0.234%
High edge DRS EVM, slot 5: 0.261%
Low edge PUSCH EVM, slot 6: 0.228%
Low edge PUSCH EVM, slot 7: 0.194%
Low edge DRS EVM, slot 6: 0.294%
Low edge DRS EVM, slot 7: 0.149%
High edge PUSCH EVM, slot 6: 0.306%
High edge PUSCH EVM, slot 7: 0.243%
High edge DRS EVM, slot 6: 0.290%
High edge DRS EVM, slot 7: 0.216%
Low edge PUSCH EVM, slot 8: 0.205%
Low edge PUSCH EVM, slot 9: 0.203%
Low edge DRS EVM, slot 8: 0.269%
Low edge DRS EVM, slot 9: 0.164%
High edge PUSCH EVM, slot 8: 0.244%
High edge PUSCH EVM, slot 9: 0.268%
High edge DRS EVM, slot 8: 0.342%
High edge DRS EVM, slot 9: 0.201%
Low edge PUSCH EVM, slot 10: 0.184%
Low edge PUSCH EVM, slot 11: 0.249%
Low edge DRS EVM, slot 10: 0.211%
Low edge DRS EVM, slot 11: 0.203%
High edge PUSCH EVM, slot 10: 0.246%
High edge PUSCH EVM, slot 11: 0.327%
High edge DRS EVM, slot 10: 0.206%
High edge DRS EVM, slot 11: 0.410%
Low edge PUSCH EVM, slot 12: 0.221%
Low edge PUSCH EVM, slot 13: 0.273%
Low edge DRS EVM, slot 12: 0.170%
Low edge DRS EVM, slot 13: 0.255%
High edge PUSCH EVM, slot 12: 0.322%
High edge PUSCH EVM, slot 13: 0.285%
High edge DRS EVM, slot 12: 0.297%
High edge DRS EVM, slot 13: 0.362%
Low edge PUSCH EVM, slot 14: 0.215%
Low edge PUSCH EVM, slot 15: 0.214%
Low edge DRS EVM, slot 14: 0.274%
Low edge DRS EVM, slot 15: 0.183%
High edge PUSCH EVM, slot 14: 0.232%
High edge PUSCH EVM, slot 15: 0.253%
High edge DRS EVM, slot 14: 0.405%
High edge DRS EVM, slot 15: 0.251%
Low edge PUSCH EVM, slot 16: 0.224%
Low edge PUSCH EVM, slot 17: 0.240%
Low edge DRS EVM, slot 16: 0.278%
Low edge DRS EVM, slot 17: 0.260%
High edge PUSCH EVM, slot 16: 0.248%
High edge PUSCH EVM, slot 17: 0.310%
High edge DRS EVM, slot 16: 0.197%
High edge DRS EVM, slot 17: 0.409%
Low edge PUSCH EVM, slot 18: 0.290%
Low edge PUSCH EVM, slot 19: 0.214%
Low edge DRS EVM, slot 18: 0.279%
Low edge DRS EVM, slot 19: 0.190%
High edge PUSCH EVM, slot 18: 0.304%
High edge PUSCH EVM, slot 19: 0.261%
High edge DRS EVM, slot 18: 0.335%
High edge DRS EVM, slot 19: 0.264%
Averaged low edge PUSCH EVM, frame 0: 0.220%
Averaged high edge PUSCH EVM, frame 0: 0.269%
Averaged PUSCH EVM frame 0: 0.269%
Averaged DRS EVM frame 0: 0.297%
Averaged overall PUSCH EVM: 0.269%
Averaged overall DRS EVM: 0.297%
Decode transmitted subframes and check CRC.
Subframe 0: CRC passed
Subframe 1: CRC passed
Subframe 2: CRC passed
Subframe 3: CRC passed
Subframe 4: CRC passed
Subframe 5: CRC passed
Subframe 6: CRC passed
Subframe 7: CRC passed
Subframe 8: CRC passed
Subframe 9: CRC passed

Приложение

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

Избранная библиография

  1. 3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»