Этот пример демонстрирует, как измерить Физический Восходящий Разделяемый Канал (PUSCH) производительность пропускной способности с помощью LTE Toolbox™ под условиями испытания соответствия, как задано в TS36.104: два получают антенны, нормальный циклический префикс, Расширенный Пешеход (EPA5) канал, FRC A3-2 [1].
TS 36.104 [1] задает требования к производительности для Физического Восходящего Разделяемого Канала (PUSCH) как минимальная пропускная способность для данного Гибрида принятия ОСШ Автоматический Повторный запрос (HARQ) повторные передачи. Этот пример демонстрирует, как тест соответствия может быть создан с помощью LTE Toolbox.
Передача моделируется с помощью модели канала распространения Расширенного пешехода А. (EPA) с помощью 8 процессов HARQ. Шум канала добавляется к полученной форме волны, которая является затем демодулируемым SC-FDMA, приведение к полученной сетке ресурса для каждого получает антенну. Оценка канала выполняется, чтобы решить, что канал между каждым передает/получает пару антенны. Коррекция Минимальной среднеквадратичной погрешности (MMSE) выполняется на полученной сетке ресурса с помощью предполагаемого канала, чтобы восстановить сетку ресурса. Данные PUSCH затем извлекаются и декодируются от этой восстановленной сетки ресурса. Используя результат блока CRC, определяется производительность пропускной способности передать/получить цепочки.
Пример выполняется в течение продолжительности симуляции 1 кадра в ОСШ-4.1 дБ,-2.0 дБ и 0,1 дБ согласно TS 36.104, Таблице 8.2.1.1-1 [1]. Большое количество NFrames
должно использоваться, чтобы привести к значимым результатам пропускной способности. SNRIn
может быть массивом значений или скаляра.
NFrames = 1; % Number of frames to simulate at each SNR SNRIn = [-4.1, -2.0, 0.1]; % SNR points to simulate
Настройки Оборудования пользователя (UE) заданы в форме структуры.
ue.TotSubframes = 1; % Total number of subframes to generate a waveform for ue.NCellID = 10; % Cell identity ue.RC = 'A3-2'; % FRC number
Характеристики модели канала распространения установлены с помощью структуры, содержащей поля, заданные ниже. Они установлены согласно TS 36.104, Таблице 8.2.1.1-1 [1].
chcfg.NRxAnts = 2; % Number of receive antenna chcfg.DelayProfile = 'EPA'; % Delay profile chcfg.DopplerFreq = 5.0; % Doppler frequency chcfg.MIMOCorrelation = 'Low'; % MIMO correlation chcfg.Seed = 100; % Channel seed chcfg.NTerms = 16; % Oscillators used in fading model chcfg.ModelType = 'GMEDS'; % Rayleigh fading model type chcfg.InitPhase = 'Random'; % Random initial phases chcfg.NormalizePathGains = 'On'; % Normalize delay profile power chcfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas
Настройки оценки канала заданы с помощью структуры cec
. Профиль задержки EPA заставляет ответ канала медленно изменяться по частоте. Поэтому большое окно усреднения частоты 13 Элементов Ресурса (REs) используется. Сигнал ссылки демодуляции (DRS) содержится только в одном символе на слот, поэтому окно усреднения во времени 1 RE используется. Это не будет включать пилотов от смежного слота при усреднении.
cec.PilotAverage = 'UserDefined'; % Type of pilot averaging cec.FreqWindow = 13; % Frequency averaging windows in REs cec.TimeWindow = 1; % Time averaging windows in REs cec.InterpType = 'cubic'; % Interpolation type cec.Reference = 'Antennas'; % Reference for channel estimation
Чтобы сгенерировать восходящий Канал эталонной модели (RMC), функции LTE Toolbox lteRMCUL и lteRMCULTool используются. lteRMCUL создает конфигурационную структуру для данных настроек UE; характерный для данного Фиксированного ссылочного канала (FRC). Эта конфигурационная структура создается согласно приложению A [1] TS36.104 и используется lteRMCULTool, чтобы сгенерировать модулируемую форму волны SC-FDMA. Подструктура PUSCH
задает параметры, сопоставленные с PUSCH; содержа вектор, задающий транспортную информационную емкость на подкадр. Эти длины используются при декодировании Восходящего Разделяемого Канала (UL-SCH).
% Generate FRC configuration structure for A3-2 frc = lteRMCUL(ue); % Transport block sizes for each subframe within a frame trBlkSizes = frc.PUSCH.TrBlkSizes; codedTrBlkSizes = frc.PUSCH.CodedTrBlkSizes;
Уровень выборки для модели канала установлен с помощью значения, возвращенного от lteSCFDMAInfo.
info = lteSCFDMAInfo(frc); chcfg.SamplingRate = info.SamplingRate;
Тест пропускной способности выполняется по многим точкам ОСШ. Чтобы определить пропускную способность в точке ОСШ, данные PUSCH анализируются на подкадре основанием подкадра с помощью следующих шагов:
Обновите Текущий Процесс HARQ. После каждых 8 подкадров данный процесс HARQ или несет новые транспортные данные или повторную передачу ранее отправленных транспортных данных в зависимости от Подтверждения (ACK) или Отрицательное Подтверждение (NACK) на основе результатов CRC. Все это обработано планировщиком HARQ, hPUSCHHARQScheduling.m.
Создайте Форму волны Передачи. Используя входные данные, сгенерированные планировщиком HARQ и структурой frc
, lteRMCULTool производит модулируемую форму волны SC-FDMA и заполненную сетку ресурса, содержащую физические каналы и сигналы.
Шумное Моделирование Канала. Форма волны передается через исчезающий канал и добавленный Аддитивный белый гауссов шум (AWGN).
Выполните Демодуляция SC-FDMA и Синхронизация. Полученные символы синхронизируются, чтобы составлять комбинацию задержки реализации и распространения задержки канала. Символами является затем демодулируемый SC-FDMA.
Выполните Канал и Шумовую Степень Спектральная Оценка Плотности. Канал и шумовая степень спектральная плотность, как оценивается, помогают в коррекции и декодировании.
Выполните Коррекцию MMSE. Канал и шумовые оценки используются, чтобы компенсировать полученные символы PUSCH.
Декодируйте PUSCH. Восстановленные символы PUSCH для всей передачи и получают пары антенны, наряду с шумовой оценкой, демодулируются и дескремблированы ltePUSCHDecode, чтобы получить оценку полученной кодовой комбинации.
Канал UL-SCH, Декодирующий._ вектор декодируемых мягких битов, передается lteULSCHDecode; это декодирует кодовую комбинацию и возвращает ошибку блока CRC, и это используется, чтобы определить пропускную способность системы. Содержимое нового мягкого буфера, harqProc(harqID).decState
, доступно при выводе этой функции, которая будет использоваться для следующего подкадра. Транспортный размер блока получен из интерполяционной таблицы размеров для каждого подкадра.
% Initialize variables used in the simulation and analysis totalBLKCRC = zeros(numel(SNRIn), NFrames*10); % Total block CRC vector bitThroughput = zeros(numel(SNRIn), NFrames*10); % Total throughput vector resultIndex = 1; % Initialize frame counter index for SNRdB = SNRIn fprintf('\nSimulating at %g dB SNR for a total %d Frame(s)', ... SNRdB, NFrames); % Calculate required AWGN channel noise SNR = 10^(SNRdB/20); N = 1/(SNR*sqrt(double(info.Nfft)))/sqrt(2.0); rng('default'); % Store results for every subframe at SNR point bitTp = zeros(1, NFrames*10); % Intermediate bit throughput vector blkCRC = zeros(1, NFrames*10); % Intermediate block CRC vector % Initialize state of all HARQ processes harqProcesses = hPUSCHNewHARQProcess(frc); % Initialize HARQ process IDs to 1 as the first non-zero transport % block will always be transmitted using the first HARQ process. This % will be updated with the full sequence output by lteRMCDLTool after % the first call to the function harqProcessSequence = 1; offsetused = 0; for subframeNo = 0:(NFrames*10-1) % Update subframe number frc.NSubframe = subframeNo; % Get HARQ process ID for the subframe from HARQ process sequence harqID = harqProcessSequence(mod(subframeNo, length(harqProcessSequence))+1); % If there is a transport block scheduled in the current subframe % (indicated by non-zero 'harqID'), perform transmission and % reception. Otherwise continue to the next subframe if harqID == 0 continue; end % Update current HARQ process harqProcesses(harqID) = hPUSCHHARQScheduling(harqProcesses(harqID)); frc.PUSCH.RV = harqProcesses(harqID).rvSeq(harqProcesses(harqID).rvIdx); frc.PUSCH.RVSeq = harqProcesses(harqID).rvSeq(harqProcesses(harqID).rvIdx); % Create transmit waveform and get the HARQ scheduling ID sequence % from 'frcOut' structure output which also contains the waveform % configuration and OFDM modulation parameters [txWaveform,~,frcOut] = lteRMCULTool(frc, harqProcesses(harqID).ulschTransportBlk); % Add 25 sample padding. This is to cover the range of delays % expected from channel modeling (a combination of % implementation delay and channel delay spread) txWaveform = [txWaveform; zeros(25, 1)]; %#ok<AGROW> % Get the HARQ ID sequence from 'enbOut' for HARQ processing harqProcessSequence = frcOut.PUSCH.HARQProcessSequence; % The initialization time for channel modeling is set each subframe % to simulate a continuously varying channel chcfg.InitTime = subframeNo/1000; % Pass data through channel model rxWaveform = lteFadingChannel(chcfg, txWaveform); % Add noise at the receiver v = N*complex(randn(size(rxWaveform)), randn(size(rxWaveform))); rxWaveform = rxWaveform+v; % Calculate synchronization offset offset = lteULFrameOffset(frc, frc.PUSCH, rxWaveform); if (offset < 25) offsetused = offset; end % SC-FDMA demodulation rxSubframe = lteSCFDMADemodulate(frc, ... rxWaveform(1+offsetused:end, :)); % Channel and noise power spectral density estimation [estChannelGrid, noiseEst] = lteULChannelEstimate(frc, ... frc.PUSCH, cec, rxSubframe); % Extract REs corresponding to the PUSCH from the given subframe % across all receive antennas and channel estimates puschIndices = ltePUSCHIndices(frc, frc.PUSCH); [puschRx, puschEstCh] = lteExtractResources( ... puschIndices, rxSubframe, estChannelGrid); % MMSE equalization rxSymbols = lteEqualizeMMSE(puschRx, puschEstCh, noiseEst); % Update frc.PUSCH to carry complete information of the UL-SCH % coding configuration frc.PUSCH = lteULSCHInfo(frc, ... frc.PUSCH, harqProcesses(harqID).trBlkSize, 'chsconcat'); % Decode the PUSCH rxEncodedBits = ltePUSCHDecode(frc, frc.PUSCH, rxSymbols); % Decode the UL-SCH channel and store the block CRC error for given % HARQ process trBlkSize = trBlkSizes(mod(subframeNo, 10)+1); [rxDecodedBits, harqProcesses(harqID).crc, ... harqProcesses(harqID).decState] = lteULSCHDecode(... frc, frc.PUSCH, trBlkSize, ... rxEncodedBits, harqProcesses(harqID).decState); % Store the CRC calculation and total number of bits per subframe % successfully decoded blkCRC(subframeNo+1) = harqProcesses(harqID).crc; bitTp(subframeNo+1) = ... harqProcesses(harqID).trBlkSize.*(1-harqProcesses(harqID).crc); end % Record the block CRC error and bit throughput for the total number of % frames simulated at a particular SNR totalBLKCRC(resultIndex, :) = blkCRC; bitThroughput(resultIndex, :) = bitTp; resultIndex = resultIndex + 1; end
Simulating at -4.1 dB SNR for a total 1 Frame(s) Simulating at -2 dB SNR for a total 1 Frame(s) Simulating at 0.1 dB SNR for a total 1 Frame(s)
Результаты пропускной способности построены как процент общей мощности и фактической битной пропускной способности для области значений входа значений ОСШ с помощью hPUSCHResults.m.
% Throughput calculation as a percentage
throughput = 100*(1-mean(totalBLKCRC, 2)).';
hPUSCHResults(SNRIn, NFrames, trBlkSizes, throughput, bitThroughput);
Этот пример использует функции помощника:
3GPP TS 36.104 "Передача радио базовой станции (BS) и прием"