Этот пример демонстрирует, как измерить Физический Нисходящий Разделяемый Канал (PDSCH) производительность пропускной способности с помощью LTE Toolbox™ для следующих режимов передачи (TM):
TM1: Одна антенна (Порт 0)
TM2: Передайте разнообразие
TM3: Разомкнутый цикл основанное на книге шифров предварительное кодирование: Циклическое разнообразие задержки (CDD)
TM4: книга шифров Замкнутого цикла основывала пространственное мультиплексирование
TM6: книга шифров замкнутого цикла Единственного слоя основывала пространственное мультиплексирование
Пример также показывает, как параметризовать и настроить настройки для различных ТМ. Это также поддерживает использование 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 при выводе декодера канала.
Обратная связь Матричной индикации перед кодером (PMI) реализована для ТМ, требующих обратной связи матрицы перед кодированием (TM4 и TM6).
Цикл parfor может использоваться вместо цикла for для вычисления ОСШ. Это обозначается в примере. parfor оператор является частью Parallel Computing Toolbox и выполняет цикл ОСШ параллельно, чтобы уменьшать общее время симуляции.
Пример выполняется в течение продолжительности симуляции 2 кадров для многих точек ОСШ. Большое количество NFrames
должно использоваться, чтобы привести к значимым результатам пропускной способности. SNRIn
может быть массивом значений или скаляра. Некоторые ТМ и определенные схемы модуляции более устойчивы к шуму и нарушениям канала, чем другие, поэтому различные значения ОСШ, вероятно, придется использовать для различных наборов параметра.
NFrames = 2; % Number of frames SNRIn = [10.3 12.3 14.3]; % SNR range in dB
Этот раздел выбирает TM интереса и устанавливает eNodeB параметры. TM выбран с помощью переменной txMode
, которая может принять значения TM1, TM2, TM3, TM4 и TM6.
txMode = 'TM4'; % TM1, TM2, TM3, TM4, TM6
Для простоты все ТМ, смоделированные в этом примере, имеют пропускную способность 50 блоков ресурса с полным выделением и уровнем кода 0,5. Определение номера RMC гарантирует, что планируются все нисходящие подкадры. Если RMC задан (например, 'R.0'), планирование подкадра как задано в TS 36.101 [1], где подкадр 5 не планируется в большинстве случаев.
Переменная txMode
выбирает TM через оператор switch. Для каждого TM заданы обязательные параметры. Этот пример не выполняет декодирование формата DCI, таким образом, поле DCIFormat
не строго необходимо. Однако, поскольку формат DCI тесно соединяется с TM, он включен для полноты.
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 ТМ с обратной связью (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 % The sampling rate for the channel model is set using the value returned % from <matlab:doc('lteOFDMInfo') lteOFDMInfo>. ofdmInfo = lteOFDMInfo(enb); channel.SamplingRate = ofdmInfo.SamplingRate;
Переменная perfectChanEstimator
управляет поведением средства оценки канала. Допустимыми значениями является true
или false
. Когда установлено в true
совершенный ответ канала используется в качестве оценки, в противном случае несовершенная оценка на основе значений полученных экспериментальных сигналов получена.
% Perfect channel estimator flag
perfectChanEstimator = false;
Если perfectChanEstimator
установлен в ложь конфигурационная структура, 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
управляет отображением информации о симуляции, такой как ID процесса HARQ, используемый для каждого подкадра. В случае ошибки CRC также отображено значение индекса к последовательности RV.
displaySimulationInformation = true;
Чтобы определить пропускную способность в каждой точке ОСШ, данные PDSCH анализируются на подкадре основанием подкадра с помощью следующих шагов:
Обновите Текущий Процесс HARQ. Процесс HARQ или несет новые транспортные данные или повторную передачу ранее отправленных транспортных данных в зависимости от Подтверждения (ACK) или Отрицательное Подтверждение (NACK) на основе результатов CRC. Все это обработано планировщиком HARQ, hHARQScheduling.m. Данные PDSCH обновляются на основе состояния HARQ.
Установите PMI. Этот шаг только применим к TM4 и TM6 (замкнутый цикл пространственное мультиплексирование и замкнутый цикл единственного слоя пространственное мультиплексирование). PMI берется последовательно из набора PMIs, txPMIs
, каждого подкадра и используется eNodeB, чтобы выбрать матрицу перед кодированием. PMI, рекомендуемая UE, используется eNodeB для передачи данных. Существует задержка подкадров pmiDelay
между UE рекомендация PMI и eNodeB использование его, чтобы выбрать матрицу перед кодированием. Первоначально набор pmiDelay
случайный PMIs используется.
Создайте Форму волны Передачи. Данные, сгенерированные процессом 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); % The temporary variables 'enb_init' and 'channel_init' are used to create % the temporary variables 'enb' and 'channel' within the SNR loop to create % independent simulation loops for the 'parfor' loop enb_init = enb; channel_init = channel; 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 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); % 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; 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 % Create transmit waveform and get the HARQ scheduling ID sequence % from 'enbOut' structure output which also contains the waveform % configuration and OFDM modulation parameters [txWaveform,~,enbOut] = 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 (%)'); legend(legendString,'Location','NorthWest'); grid on;
Сгенерированный график был получен с небольшим числом кадров, поэтому показанные результаты не являются представительными. Более длительная симуляция, полученная с 1 000 кадров, привела к результатам, показанным ниже.
Этот пример использует функции помощника:
3GPP TS 36.101 "Передача радио оборудования пользователя (UE) и прием"