В этом примере показано, как несколько восходящих поставщиков услуг могут быть сгенерированы, агрегировались и демодулировали использование 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
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 интереса и принесите его к основной полосе (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, :);
Код ниже предоставляет 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
Этот пример использует следующие функции помощника:
3GPP TS 36.101 "Передача радио оборудования пользователя (UE) и прием"