В этом примере показано, как несколько восходящих несущих могут быть сгенерированы, агрегировались и демодулировали использование 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
Конфигурационная структура сгенерирована для каждого 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
Сгенерируйте форму волны для каждого CC с помощью 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); end % Aggregate all CC. comm.MultibandCombiner applies the frequency offsets % and adds the resulting signals together. sigAggregator = comm.MultibandCombiner(InputSampleRate = SR, ... FrequencyOffsets = F_c*1e6, ... OutputSampleRateSource = 'Property', ... OutputSampleRate = SR); waveform = sigAggregator([tx{:}]);
Спектр мощности несущей агрегировался, сигнал отображен с помощью hPlotSpectrum.m. В спектре отображаются отдельные полосы пропускания несущей. Обратите внимание на то, что центр агрегированной полосы пропускания расположен в основной полосе (0 Гц), когда сигнал не модулируется к RF в этом примере.
specPlot = hPlotSpectrum(waveform,SR,... 'Power Spectrum of Carrier Aggregation Waveform',... {'Carrier aggregated signal'});
Этот раздел показывает, как демодулировать, отфильтровать, и проредить один из 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 = ... hPlotSpectrum([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, :);
Код ниже предоставляет PUSCH EVM, PUSCH DRS EVM и внутриполосное вычисление эмиссии с помощью hPUSCHEVM
.
EVM является различием между восстановленными идеальными символами и измерил полученные символы на одном интервале измерения паза во временном интервале. Процесс восстановления идеальных символов включает:
Деление одно несущей частоты несколько получают доступ (SC-FDMA) к демодуляции, чтобы получить полученную сетку ресурса
Оценка канала
Эквализация PUSCH
Демодуляция символа
Декодирование сопровождаемого путем перекодирования полученных битов, перескремблирования и перемодуляции
Средний EVM измеряется в двух местах вовремя (низко и высоко, которые обозначаются как и), где низкие и высокие места соответствуют выравниванию окна FFT в начале и конце циклического префикса. LTE Toolbox требует, чтобы низкие и высокие места были заданы как часть длины циклического префикса.
Внутриполосная эмиссия является мерой интерференции, попадающей в невыделенного RBS. Внутриполосная эмиссия вычисляется для каждого и номера слота, где стартовая частота возмещена между выделенным RB, и измеренное не выделило RB (e.g., для первого смежного RB за пределами выделенной полосы пропускания).
От вышеупомянутых измерений также производятся следующие графики:
EVM по сравнению с символом OFDM
EVM по сравнению с поднесущей
EVM по сравнению с блоком ресурса
EVM по сравнению с символом OFDM и поднесущей (i.e. сетка ресурса 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
3GPP TS 36.101 "Передача радио оборудования пользователя (UE) и прием"