Восходящая генерация сигналов агрегации поставщика услуг, демодуляция и анализ

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

Введение

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

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

Количество поставщиков услуг компонента и пропускной способности

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

% 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. Конфигурационные структуры для всего CCS хранятся в массиве ячеек.

% 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

Постройте спектр формы волны агрегации поставщика услуг

Спектр мощности поставщика услуг агрегировался, сигнал отображен с помощью hCarrierAggregationPlotSpectrum.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');

Демодулируемая форма волны затем отфильтрована, чтобы извлечь CC интереса. Спектр демодулируемой формы волны до и после фильтрации построен.

% 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 измеряется в двух местах вовремя (низко и высоко, которые обозначаются как и), где низкие и высокие места соответствуют выравниванию окна FFT в запуске и конце циклического префикса. LTE Toolbox требует, чтобы низкие и высокие места были заданы как часть циклической длины префикса.

Внутриполосная эмиссия является мерой интерференции, попадающей в невыделенного RBS. Внутриполосная эмиссия вычисляется для каждого и номера слота, где стартовая частота возмещена между выделенным RB, и измеренное не выделило RB (например, для первого смежного RB за пределами выделенной пропускной способности).

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

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

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

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

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

  • Восходящая внутриполосная эмиссия для невыделенного RBS

Обратите внимание на то, что измерения 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 TS 36.101 "Передача радио оборудования пользователя (UE) и прием"