Этот пример демонстрирует, как измерить пропускную эффективность физического нисходящего общего канала (PDSCH) с помощью LTE Toolbox™ для следующих режимов передачи (TM):
TM1: Одна антенна (порт 0)
TM2: Передайте разнообразие
TM3: Разомкнутый контур предварительное кодирование на основе кодовой книги: разнесение с циклической задержкой (CDD)
TM4: пространственное мультиплексирование на основе кодовой книги с циклом
TM6: пространственное мультиплексирование на основе кодовой книги слоя замкнутой системы
В примере также показано, как параметризовать и настроить настройки для различных TM. Он также поддерживает использование Parallel Computing Toolbox™ для сокращения эффективного времени симуляции.
Этот пример измеряет пропускную способность для ряда точек ОСШ. Предоставленный код может работать под многими способами передачи: TM1, TM2, TM3, TM4 и TM6. Для получения информации о том, как смоделировать TM7, TM8, TM9 и TM10, смотрите следующий пример: Пропускная способность PDSCH для схем предварительного кодирования, основанных на некодовой книге: Порт 5 (TM7), Порт 7 или 8 или Порт 7-8 (TM8), Порт 7-14 (TM9 и TM10)
Пример работает с подкадром по базису подкадров. Для каждой из рассматриваемых точек ОСШ генерируется заполненная ресурсная сетка и модулируется OFDM, чтобы создать форму волны передачи. Сгенерированная форма волны передается через шумный канал с замираниями. Затем приемником выполняются следующие операции: оценка канала, эквализация, демодуляция и декодирование. Пропускная способность эффективности PDSCH определяется с помощью блочного результата CRC на выходе канального декодера.
Обратная связь Precoder Matrix Indication (PMI) реализована для TM, требующих обратной связи матрицы предварительного кодирования (TM4 и TM6).
A parfor
цикл может использоваться вместо for
цикл для вычисления ОСШ. Это указывается в данном примере. The parfor
оператор является частью Parallel Computing Toolbox и выполняет цикл ОСШ параллельно, чтобы уменьшить общее время симуляции.
Пример выполняется для длины симуляции 2 системы координат для ряда точек ОСШ. Большое количество NFrames
должны использоваться для получения значимых результатов производительности. SNRIn
может быть массивом значений или скаляром. Некоторые TM и некоторые схемы модуляции являются более устойчивыми к шуму и нарушениям канала, чем другие, поэтому различные значения ОСШ могут быть использованы для различных наборов параметров.
NFrames = 2; % Number of frames SNRIn = [10.3 12.3 14.3]; % SNR range in dB
Этот раздел выбирает интересующее TM и устанавливает параметры eNodeB. ТМ выбирается с помощью переменной txMode
, который может принимать значения TM1, TM2, TM3, TM4 и TM6.
txMode = 'TM4'; % TM1, TM2, TM3, TM4, TM6
Для простоты все TM, смоделированные в этом примере, имеют полосу пропускания 50 ресурсных блоков с полным выделением и кодовой скоростью 0,5. Отсутствие номера RMC гарантирует, что все подкадры нисходящего канала запланированы. Если RMC задан (например, 'R.0'), планирование субкадров такое, как определено в TS 36.101 [1], где субкадр 5 в большинстве случаев не запланирован.
Переменная txMode
выбирает TM через оператор switch. Для каждого ТМ задаются необходимые параметры. Этот пример не выполняет декодирование формата DCI, поэтому DCIFormat
поле не является строго необходимым. Однако, поскольку формат DCI тесно связан с ТМ, он включен для полноты.
simulationParameters = []; % clear simulationParameters simulationParameters.NDLRB = 50; simulationParameters.PDSCH.TargetCodeRate = 0.5; simulationParameters.PDSCH.PRBSet = (0:49)'; switch txMode % Single antenna (Port0) mode (TM1) case 'TM1' fprintf('\nTM1 - Single antenna (port 0)\n'); simulationParameters.PDSCH.TxScheme = 'Port0'; simulationParameters.PDSCH.DCIFormat = 'Format1'; simulationParameters.CellRefP = 1; simulationParameters.PDSCH.Modulation = {'16QAM'}; % Transmit diversity mode (TM2) case 'TM2' fprintf('\nTM2 - Transmit diversity\n'); simulationParameters.PDSCH.TxScheme = 'TxDiversity'; simulationParameters.PDSCH.DCIFormat = 'Format1'; simulationParameters.CellRefP = 2; simulationParameters.PDSCH.Modulation = {'16QAM'}; simulationParameters.PDSCH.NLayers = 2; % CDD mode (TM3) case 'TM3' fprintf('\nTM3 - CDD\n'); simulationParameters.PDSCH.TxScheme = 'CDD'; simulationParameters.PDSCH.DCIFormat = 'Format2A'; simulationParameters.CellRefP = 2; simulationParameters.PDSCH.Modulation = {'16QAM', '16QAM'}; simulationParameters.PDSCH.NLayers = 2; % Spatial multiplexing mode (TM4) case 'TM4' fprintf('\nTM4 - Codebook based spatial multiplexing\n'); simulationParameters.CellRefP = 2; simulationParameters.PDSCH.Modulation = {'16QAM', '16QAM'}; simulationParameters.PDSCH.DCIFormat = 'Format2'; simulationParameters.PDSCH.TxScheme = 'SpatialMux'; simulationParameters.PDSCH.NLayers = 2; % No codebook restriction simulationParameters.PDSCH.CodebookSubset = ''; % Single layer spatial multiplexing mode (TM6) case 'TM6' fprintf(... '\nTM6 - Codebook based spatial multiplexing with single layer\n'); simulationParameters.CellRefP = 4; simulationParameters.PDSCH.Modulation = {'QPSK'}; simulationParameters.PDSCH.DCIFormat = 'Format2'; simulationParameters.PDSCH.TxScheme = 'SpatialMux'; simulationParameters.PDSCH.NLayers = 1; % No codebook restriction simulationParameters.PDSCH.CodebookSubset = ''; otherwise error('Transmission mode should be one of TM1, TM2, TM3, TM4 or TM6.') end % Set other simulationParameters fields applying to all TMs simulationParameters.TotSubframes = 1; % Generate one subframe at a time simulationParameters.PDSCH.CSI = 'On'; % Soft bits are weighted by CSI
TM4 - Codebook based spatial multiplexing
Функции lteRMCDL
чтобы сгенерировать параметры eNodeB по умолчанию, не указанные в simulationParameters
. Они потребуются позже, чтобы сгенерировать форму волны с помощью lteRMCDLTool
.
enb = lteRMCDL(simulationParameters);
Область выхода enb
структура содержит, помимо других полей, размеры транспортных блоков и последовательность версий избыточности для каждого подкадра кодового слова в системе координат. Они будут использованы позже в симуляции.
rvSequence = enb.PDSCH.RVSeq; trBlkSizes = enb.PDSCH.TrBlkSizes;
Количество кодовых слов, ncw
, количество записей в enb.PDSCH.Modulation
поле.
ncw = length(string(enb.PDSCH.Modulation));
Установите задержку PMI для TM с обратной связью (TM4 и TM6). Это задержка между PMI, передаваемым от UE к eNodeB, как определено в TS36.101, таблица 8.2.1.4.2-1 [1].
pmiDelay = 8;
Далее мы печатаем сводные данные некоторых из наиболее релевантных параметров симуляции. Проверьте эти значения на соответствие требованиям. Отображаемая скорость кода может быть полезной, чтобы обнаружить проблемы, если вручную задавать размеры транспортных блоков. Типичными значениями являются 1/3, 1/2 и 3/4.
hDisplayENBParameterSummary(enb, txMode);
-- Parameter summary: -------------------------------------------- Duplexing mode: FDD Transmission mode: TM4 Transmission scheme: SpatialMux Number of downlink resource blocks: 50 Number of allocated resource blocks: 50 Cell-specific reference signal ports: 2 Number of transmit antennas: 2 Transmission layers: 2 Number of codewords: 2 Modulation codeword 1: 16QAM Transport block sizes codeword 1: 11448 11448 11448 11448 11448 11448 11448 11448 11448 11448 Code rate codeword 1: 0.515 0.48 0.48 0.48 0.48 0.4918 0.48 0.48 0.48 0.48 Modulation codeword 2: 16QAM Transport block sizes codeword 2: 11448 11448 11448 11448 11448 11448 11448 11448 11448 11448 Code rate codeword 2: 0.515 0.48 0.48 0.48 0.48 0.4918 0.48 0.48 0.48 0.48 ------------------------------------------------------------------
Структура channel
содержит параметры конфигурации модели канала.
channel.Seed = 6; % Channel seed channel.NRxAnts = 2; % 2 receive antennas channel.DelayProfile = 'EPA'; % Delay profile channel.DopplerFreq = 5; % Doppler frequency channel.MIMOCorrelation = 'Low'; % Multi-antenna correlation channel.NTerms = 16; % Oscillators used in fading model channel.ModelType = 'GMEDS'; % Rayleigh fading model type channel.InitPhase = 'Random'; % Random initial phases channel.NormalizePathGains = 'On'; % Normalize delay profile power channel.NormalizeTxAnts = 'On'; % Normalize for transmit antennas % Set the sampling rate for the channel model by using the value returned % by the lteOFDMInfo function. ofdmInfo = lteOFDMInfo(enb); channel.SamplingRate = ofdmInfo.SamplingRate;
Переменная perfectChanEstimator
управляет поведением оценщика канала. Допустимые значения true
или false
. Когда установлено значение true
В качестве оценки используют идеальную характеристику канала, в противном случае получают несовершенную оценку, основанную на значениях принятых пилот-сигналов.
% Perfect channel estimator flag
perfectChanEstimator = false;
Если perfectChanEstimator
установлено значение false в структуре строения cec
необходим, чтобы параметризовать оценщик канала. Канал изменяется медленно во времени и частоте, поэтому большое окно усреднения используется в порядок для усреднения шума.
% Configure channel estimator cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging cec.FreqWindow = 41; % Frequency window size in REs cec.TimeWindow = 27; % Time window size in REs cec.InterpType = 'Cubic'; % 2D interpolation type cec.InterpWindow = 'Centered'; % Interpolation window type cec.InterpWinSize = 1; % Interpolation window size
Переменная displaySimulationInformation
управляет отображением симуляции информации, такой как идентификатор процесса HARQ, используемый для каждого подкадра. В случае ошибки CRC также отображается значение индекса к RV последовательности.
displaySimulationInformation = true;
Чтобы определить пропускную способность в каждой точке ОСШ, данные PDSCH анализируются на субкадре по базису субкадров с помощью следующих шагов:
Обновление текущего процесса HARQ. Процесс HARQ или содержит новые транспортные данные или повторную передачу ранее отправленных транспортных данных в зависимости от подтверждения (ACK) или отрицательного подтверждения (NACK) на основе результатов CRC. Всем этим занимается планировщик HARQ, hHARQScheduling
. Данные PDSCH обновляются на основе состояния HARQ.
Установите PMI. Этот шаг применим только к TM4 и TM6 (закрытое циклом пространственное мультиплексирование и один слой закрытое циклом пространственное мультиплексирование). PMI берётся последовательно из набора PMI, txPMIs
каждый подкадр и используется eNodeB для выбора матрицы предварительного кодирования. PMI, рекомендованный UE, используется eNodeB для передачи данных. Существует задержка pmiDelay
подкадры между UE, рекомендующим PMI, и eNodeB, использующим его, чтобы выбрать матрицу предварительного кодирования. Первоначально набор pmiDelay
используются случайные PMI.
Создайте сигнал передачи. Данные, сгенерированные процессом HARQ, передаются в lteRMCDLTool
который формирует модулированную форму волны OFDM, содержащую физические каналы и сигналы.
Моделирование шумного канала. Форма волны передается через канал с замираниями и добавляется шум (AWGN).
Выполните синхронизацию и демодуляцию OFDM. Принятые символы смещены, чтобы принять во внимание комбинацию задержки реализации и расширения задержки канала. Символы затем демодулируются OFDM.
Выполните оценку канала. Оценка характеристик канала и уровня шума. Эти оценки используются для декодирования PDSCH.
Декодируйте PDSCH. Восстановленные символы PDSCH для всех пар передающей и приемной антенны вместе с оценкой шума демодулируются и дескремблируются ltePDSCHDecode
для получения оценки принятых кодовых слов.
Декодируйте нисходящий общий канал (DL-SCH) и сохраните ошибку CRC блока для процесса HARQ. Вектор декодированных мягких бит передается в lteDLSCHDecode
; это декодирует кодовое слово и возвращает ошибку CRC блока, используемую для определения пропускной способности системы. Содержимое нового мягкого буфера, harqProc(harqID).decState
, доступно на выходе этой функции, которая будет использоваться при декодировании следующего субкадра.
Обновление PMI. PMI выбирается и отправляется обратно в eNodeB для будущего использования. Этот шаг применим только к TM4 и TM6 (близкий цикл пространственное мультиплексирование и один слой закрытое циклом пространственное мультиплексирование).
% The number of transmit antennas P is obtained from the resource grid % dimensions. 'dims' is M-by-N-by-P where M is the number of subcarriers, N % is the number of symbols and P is the number of transmit antennas. dims = lteDLResourceGridSize(enb); P = dims(3); % Initialize variables used in the simulation and analysis % Array to store the maximum throughput for all SNR points maxThroughput = zeros(length(SNRIn),1); % Array to store the simulation throughput for all SNR points simThroughput = zeros(length(SNRIn),1); % Get the HARQ ID sequence for HARQ processing. This is a list of indices % for HARQ process scheduling. [~,~,enbOut] = lteRMCDLTool(enb, []); harqProcessSequence = enbOut.PDSCH.HARQProcessSequence; % Temporary variables 'enb_init', 'channel_init' and % 'harqProcessSequence_init' are used to optimize parallel processing (only % if running the example with Parallel Computing Toolbox) enb_init = enb; channel_init = channel; harqProcessSequence_init = harqProcessSequence; legendString = ['Throughput: ' char(enb.PDSCH.TxScheme)]; allRvSeqPtrHistory = cell(1,numel(SNRIn)); nFFT = ofdmInfo.Nfft; for snrIdx = 1:numel(SNRIn) % parfor snrIdx = 1:numel(SNRIn) % To enable the use of parallel computing for increased speed comment out % the 'for' statement above and uncomment the 'parfor' statement below. % This needs the Parallel Computing Toolbox. If this is not installed % 'parfor' will default to the normal 'for' statement. If 'parfor' is % used it is recommended that the variable 'displaySimulationInformation' % above is set to false, otherwise the simulation information displays for % each SNR point will overlap. % Set the random number generator seed depending to the loop variable % to ensure independent random streams rng(snrIdx,'combRecursive'); SNRdB = SNRIn(snrIdx); fprintf('\nSimulating at %g dB SNR for %d Frame(s)\n' ,SNRdB, NFrames); % Initialize variables used in the simulation and analysis offsets = 0; % Initialize frame offset value offset = 0; % Initialize frame offset value for radio frame blkCRC = []; % Block CRC for all considered subframes bitTput = []; % Number of successfully received bits per subframe txedTrBlkSizes = []; % Number of transmitted bits per subframe enb = enb_init; % Initialize RMC configuration channel = channel_init; % Initialize channel configuration harqProcessSequence = harqProcessSequence_init; % Initialize HARQ process sequence pmiIdx = 0; % PMI index in delay queue % The variable harqPtrTable stores the history of the value of the % pointer to the RV sequence values for all the HARQ processes. % Pre-allocate with NaNs as some subframes do not have data rvSeqPtrHistory = NaN(ncw, NFrames*10); % Initialize state of all HARQ processes harqProcesses = hNewHARQProcess(enb); % Use random PMIs for the first 'pmiDelay' subframes until feedback is % available from the UE; note that PMI feedback is only applicable for % spatial multiplexing TMs (TM4 and TM6), but the code here is required % for complete initialization of variables in the SNR loop when using % the Parallel Computing Toolbox. pmidims = ltePMIInfo(enb,enb.PDSCH); txPMIs = randi([0 pmidims.MaxPMI], pmidims.NSubbands, pmiDelay); for subframeNo = 0:(NFrames*10-1) % Update subframe number enb.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) = hHARQScheduling( ... harqProcesses(harqID), subframeNo, rvSequence); % Extract the current subframe transport block size(s) trBlk = trBlkSizes(:, mod(subframeNo, 10)+1).'; % Display run time information if displaySimulationInformation disp(' '); disp(['Subframe: ' num2str(subframeNo)... '. HARQ process ID: ' num2str(harqID)]); end % Update RV sequence pointer table rvSeqPtrHistory(:,subframeNo+1) = ... harqProcesses(harqID).txConfig.RVIdx.'; % Update the PDSCH transmission config with HARQ process state enb.PDSCH = harqProcesses(harqID).txConfig; data = harqProcesses(harqID).data; % Set the PMI to the appropriate value in the delay queue if strcmpi(enb.PDSCH.TxScheme,'SpatialMux') pmiIdx = mod(subframeNo, pmiDelay); % PMI index in delay queue enb.PDSCH.PMISet = txPMIs(:, pmiIdx+1); % Set PMI end % Generate transmit waveform txWaveform = lteRMCDLTool(enb, data); % 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, P)]; %#ok<AGROW> % Get the HARQ ID sequence from 'enbOut' for HARQ processing harqProcessSequence = enbOut.PDSCH.HARQProcessSequence; % Initialize channel time for each subframe channel.InitTime = subframeNo/1000; % Pass data through channel model rxWaveform = lteFadingChannel(channel, txWaveform); % Calculate noise gain including compensation for downlink power % allocation SNR = 10^((SNRdB-enb.PDSCH.Rho)/20); % Normalize noise power to take account of sampling rate, which is % a function of the IFFT size used in OFDM modulation, and the % number of antennas N0 = 1/(sqrt(2.0*enb.CellRefP*double(nFFT))*SNR); % Create additive white Gaussian noise noise = N0*complex(randn(size(rxWaveform)), ... randn(size(rxWaveform))); % Add AWGN to the received time domain waveform rxWaveform = rxWaveform + noise; % Once every frame, on subframe 0, calculate a new synchronization % offset if (mod(subframeNo,10) == 0) offset = lteDLFrameOffset(enb, rxWaveform); if (offset > 25) offset = offsets(end); end offsets = [offsets offset]; %#ok end % Synchronize the received waveform rxWaveform = rxWaveform(1+offset:end, :); % Perform OFDM demodulation on the received data to recreate the % resource grid rxSubframe = lteOFDMDemodulate(enb, rxWaveform); % Channel estimation if(perfectChanEstimator) estChannelGrid = lteDLPerfectChannelEstimate(enb, channel, offset); %#ok noiseGrid = lteOFDMDemodulate(enb, noise(1+offset:end ,:)); noiseEst = var(noiseGrid(:)); else [estChannelGrid, noiseEst] = lteDLChannelEstimate( ... enb, enb.PDSCH, cec, rxSubframe); end % Get PDSCH indices pdschIndices = ltePDSCHIndices(enb, enb.PDSCH, enb.PDSCH.PRBSet); % Get PDSCH resource elements from the received subframe. Scale the % received subframe by the PDSCH power factor Rho. The PDSCH is % scaled by this amount, while the cell reference symbols used for % channel estimation (used in the PDSCH decoding stage) are not. [pdschRx, pdschHest] = lteExtractResources(pdschIndices, ... rxSubframe*(10^(-enb.PDSCH.Rho/20)), estChannelGrid); % Decode PDSCH dlschBits = ltePDSCHDecode(... enb, enb.PDSCH, pdschRx, pdschHest, noiseEst); % Decode the DL-SCH [decbits, harqProcesses(harqID).blkerr,harqProcesses(harqID).decState] = ... lteDLSCHDecode(enb, enb.PDSCH, trBlk, dlschBits, ... harqProcesses(harqID).decState); % Display block errors if displaySimulationInformation if any(harqProcesses(harqID).blkerr) disp(['Block error. RV index: ' num2str(harqProcesses(harqID).txConfig.RVIdx)... ', CRC: ' num2str(harqProcesses(harqID).blkerr)]) else disp(['No error. RV index: ' num2str(harqProcesses(harqID).txConfig.RVIdx)... ', CRC: ' num2str(harqProcesses(harqID).blkerr)]) end end % Store values to calculate throughput % Only for subframes with data if any(trBlk) blkCRC = [blkCRC harqProcesses(harqID).blkerr]; %#ok<AGROW> bitTput = [bitTput trBlk.*(1- ... harqProcesses(harqID).blkerr)]; %#ok<AGROW> txedTrBlkSizes = [txedTrBlkSizes trBlk]; %#ok<AGROW> end % Provide PMI feedback to the eNodeB if strcmpi(enb.PDSCH.TxScheme,'SpatialMux') PMI = ltePMISelect(enb, enb.PDSCH, estChannelGrid, noiseEst); txPMIs(:, pmiIdx+1) = PMI; end end % Calculate maximum and simulated throughput maxThroughput(snrIdx) = sum(txedTrBlkSizes); % Max possible throughput simThroughput(snrIdx) = sum(bitTput,2); % Simulated throughput % Display the results dynamically in the command window fprintf([['\nThroughput(Mbps) for ', num2str(NFrames) ' Frame(s) '],... '= %.4f\n'], 1e-6*simThroughput(snrIdx)/(NFrames*10e-3)); fprintf(['Throughput(%%) for ', num2str(NFrames) ' Frame(s) = %.4f\n'],... simThroughput(snrIdx)*100/maxThroughput(snrIdx)); allRvSeqPtrHistory{snrIdx} = rvSeqPtrHistory; end % Plot the RV sequence for all HARQ processes hPlotRVSequence(SNRIn,allRvSeqPtrHistory,NFrames);
Simulating at 10.3 dB SNR for 2 Frame(s) Subframe: 0. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 1 1 Subframe: 1. HARQ process ID: 2 Block error. RV index: 1 1, CRC: 1 1 Subframe: 2. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 1 1 Subframe: 3. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Subframe: 4. HARQ process ID: 5 Block error. RV index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 1 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 1 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 1 1 Subframe: 8. HARQ process ID: 1 Block error. RV index: 2 2, CRC: 0 1 Subframe: 9. HARQ process ID: 2 Block error. RV index: 2 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 2 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 Block error. RV index: 1 2, CRC: 0 1 Subframe: 12. HARQ process ID: 5 Block error. RV index: 1 2, CRC: 0 1 Subframe: 13. HARQ process ID: 6 Block error. RV index: 2 2, CRC: 0 1 Subframe: 14. HARQ process ID: 7 Block error. RV index: 2 2, CRC: 0 1 Subframe: 15. HARQ process ID: 8 Block error. RV index: 2 2, CRC: 0 1 Subframe: 16. HARQ process ID: 1 No error. RV index: 1 3, CRC: 0 0 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 Block error. RV index: 1 3, CRC: 0 1 Throughput(Mbps) for 2 Frame(s) = 9.7308 Throughput(%) for 2 Frame(s) = 42.5000 Simulating at 12.3 dB SNR for 2 Frame(s) Subframe: 0. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 1 1 Subframe: 1. HARQ process ID: 2 Block error. RV index: 1 1, CRC: 0 1 Subframe: 2. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 1 1 Subframe: 3. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Subframe: 4. HARQ process ID: 5 Block error. RV index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 0 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 0 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 0 1 Subframe: 8. HARQ process ID: 1 Block error. RV index: 2 2, CRC: 0 1 Subframe: 9. HARQ process ID: 2 Block error. RV index: 1 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 2 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 Block error. RV index: 1 2, CRC: 0 1 Subframe: 12. HARQ process ID: 5 Block error. RV index: 1 2, CRC: 0 1 Subframe: 13. HARQ process ID: 6 Block error. RV index: 1 2, CRC: 0 1 Subframe: 14. HARQ process ID: 7 Block error. RV index: 1 2, CRC: 0 1 Subframe: 15. HARQ process ID: 8 No error. RV index: 1 2, CRC: 0 0 Subframe: 16. HARQ process ID: 1 No error. RV index: 1 3, CRC: 0 0 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 No error. RV index: 1 3, CRC: 0 0 Throughput(Mbps) for 2 Frame(s) = 13.1652 Throughput(%) for 2 Frame(s) = 57.5000 Simulating at 14.3 dB SNR for 2 Frame(s) Subframe: 0. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 0 1 Subframe: 1. HARQ process ID: 2 Block error. RV index: 1 1, CRC: 0 1 Subframe: 2. HARQ process ID: 3 Block error. RV index: 1 1, CRC: 0 1 Subframe: 3. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Subframe: 4. HARQ process ID: 5 Block error. RV index: 1 1, CRC: 0 1 Subframe: 5. HARQ process ID: 6 Block error. RV index: 1 1, CRC: 0 1 Subframe: 6. HARQ process ID: 7 Block error. RV index: 1 1, CRC: 0 1 Subframe: 7. HARQ process ID: 8 Block error. RV index: 1 1, CRC: 0 1 Subframe: 8. HARQ process ID: 1 No error. RV index: 1 2, CRC: 0 0 Subframe: 9. HARQ process ID: 2 Block error. RV index: 1 2, CRC: 0 1 Subframe: 10. HARQ process ID: 3 Block error. RV index: 1 2, CRC: 0 1 Subframe: 11. HARQ process ID: 4 No error. RV index: 1 2, CRC: 0 0 Subframe: 12. HARQ process ID: 5 No error. RV index: 1 2, CRC: 0 0 Subframe: 13. HARQ process ID: 6 No error. RV index: 1 2, CRC: 0 0 Subframe: 14. HARQ process ID: 7 No error. RV index: 1 2, CRC: 0 0 Subframe: 15. HARQ process ID: 8 No error. RV index: 1 2, CRC: 0 0 Subframe: 16. HARQ process ID: 1 Block error. RV index: 1 1, CRC: 0 1 Subframe: 17. HARQ process ID: 2 No error. RV index: 1 3, CRC: 0 0 Subframe: 18. HARQ process ID: 3 No error. RV index: 1 3, CRC: 0 0 Subframe: 19. HARQ process ID: 4 Block error. RV index: 1 1, CRC: 0 1 Throughput(Mbps) for 2 Frame(s) = 16.0272 Throughput(%) for 2 Frame(s) = 70.0000
Приведенный выше код также генерирует графики со значением указателей на элементы в последовательности RV для моделируемых субкадров. Это дает представление о необходимых повторных передачах. Строим график указателей и отмечаем значения RV, используемые в случае, если они не организованы в порядке возрастания. Для примера в некоторых случаях RV-последовательность может быть [0, 2, 3, 1]. Построение графиков этих значений по мере их использования не даст четкого представления о количестве необходимых повторных передач.
При передаче нового транспортного блока используется первый элемент RV-последовательности. На графиках выше значение 1 показано для этого подрамника. Это происходит в начале симуляции. Если требуется повторная передача, выбирается следующий элемент в RV-последовательности, и указатель увеличивается. Значение 2 будет нанесено на график для подрамника, где происходит повторная передача. Если требуются дальнейшие повторные передачи, значение указателя будет увеличиваться дополнительно. Обратите внимание, что графики не показывают никакого значения в подкадре 5 последовательных систем координат. Это связано с тем, что данные не передаются в этих подкадрах.
Рисунок, показанный ниже, был получен с имитацией 10 систем координат. Обратите внимание, что в некоторых случаях требуется до 3 повторных передач.
Результаты пропускной способности для симуляции отображаются в командном окне MATLAB ® после завершения каждой точки ОСШ. Они также захвачены в simThroughput
и maxThroughput
. simThroughput
- массив с измеренной пропускной способностью в количестве бит для всех моделируемых точек ОСШ. maxThroughput
сохраняет максимально возможную пропускную способность в количестве бит для каждой моделируемой точки ОСШ.
% Plot throughput figure plot(SNRIn, simThroughput*100./maxThroughput,'*-.'); xlabel('SNR (dB)'); ylabel('Throughput (%)'); title('Throughput vs. SNR') legend(legendString,'Location','NorthWest'); grid on;
Сгенерированный график был получен с низким количеством систем координат, поэтому показанные результаты не являются показательными. Более длинная симуляция, полученная с 1000 системами координат, дала результаты, показанные ниже.
Этот пример использует эти вспомогательные функции.
3GPP TS 36.101 «Радиопередача и прием пользовательского оборудования (UE)»