В этом примере показано, как измерить пропускную способность физического общего канала нисходящей линии связи (PDSCH) цепочки передачи/приема с использованием Toolbox™ LTE.
В примере используются функции LTE Toolbox для генерации многоантенного R.12 опорного измерительного канала нисходящей линии связи (RMC). Передача моделируется с использованием модели канала распространения расширенного пешехода A (EPA). Шум канала добавляется к принятому сигналу, который затем демодулируется OFDM, в результате чего получается сетка принятых ресурсов для каждой приемной антенны. Оценка канала выполняется для определения канала между каждой парой передающих/приемных антенн. Затем данные PDSCH извлекаются и декодируются из принятой сетки ресурсов. Используя результат блочного CRC, определяют пропускную способность цепочки передачи/приема.
% eNodeB Configuration enb = struct; % eNodeB config structure enb.RC = 'R.12'; % RMC number enb.NCellID = 10; % Cell ID % Total number of subframes lteRMCDLTool will generate per call. This % example generates 1 frame (10 subframes) worth of data each call within % the processing loop. lteRMCDLTool will be called 10 (NFrames) times. enb.TotSubframes = 10; enb.PDSCH.TxScheme = 'TxDiversity'; % Transmission scheme enb.PDSCH.RNTI = 1; % 16-bit UE specific mask enb.PDSCH.Rho = -3; % Downlink power allocation enb.PDSCH.CSI = 'On'; % CSI scaling of soft bits enb.PDSCH.RVSeq = 0; % Disable HARQ NFrames = 10; % Number of frames to simulate SNRIn = [-2 2]; % SNR points to simulate
Сформировать конфигурацию для указанного RMC и получить соответствующую информацию: количество битов в транспортном блоке для каждого подкадра; количество символов OFDM на подкадр и количество передающих антенн.
% Generate RMC configuration for test model specified in enb structure rmc = lteRMCDL(enb); % Transport block sizes of each subframe within a frame trblksize = rmc.PDSCH.TrBlkSizes; ncw = size(trblksize,1); % no of codewords associated to RMC % dims is a three element vector [K; L; P]: where K = no of subcarriers, % L = no of OFDM symbols and P = no of transmit antennas dims = lteDLResourceGridSize(rmc); % Determine resource grid dimensions L = dims(2); % Number of OFDM symbols per subframe P = dims(3); % Number of transmit antennas
cfg = struct; % Channel config structure cfg.Seed = 2; % Channel seed cfg.NRxAnts = 2; % 2 receive antennas cfg.DelayProfile ='EPA'; % Delay profile cfg.DopplerFreq = 5; % Doppler frequency in Hz cfg.MIMOCorrelation = 'Medium'; % Multi-antenna correlation cfg.NTerms = 16; % Oscillators used in fading model cfg.ModelType = 'GMEDS'; % Rayleigh fading model type cfg.InitPhase = 'Random'; % Random initial phases cfg.NormalizePathGains = 'On'; % Normalize delay profile power cfg.NormalizeTxAnts = 'On'; % Normalize for transmit antennas
Для уменьшения влияния шума на оценки пилот-сигнала используется окно усреднения 15 на 141 элементов ресурсов (RE). Профиль задержки EPA вызывает медленное изменение отклика канала по частоте. Поэтому используется большое окно усреднения частоты из 15 RE. Доплеровская частота составляет 5 Гц, что приводит к очень медленному замиранию канала с течением времени. Поэтому также используется большое окно усреднения времени. Канал оценивается покадрово, поэтому пилот-сигналы в предыдущем и последующих пяти подкадрах включаются в среднее значение, когда это возможно, путем установки временного окна в 141 RE.
cec = struct; % Channel estimation config structure cec.PilotAverage = 'UserDefined'; % Type of pilot symbol averaging cec.FreqWindow = 15; % Frequency window size in REs cec.TimeWindow = 141; % Time window size in REs
Интерполяция выполняется блоком оценки канала между оценками пилот-сигнала для создания оценки канала для всех RE. Для улучшения оценки можно использовать несколько подкадров при интерполяции. Окно интерполяции из 3 подкадров с центрированным окном интерполяции использует оценки пилот-сигнала из 3 последовательных подкадров для оценки центрального подкадра.
cec.InterpType = 'Cubic'; % Cubic interpolation cec.InterpWinSize = 3; % Interpolate up to 3 subframes % simultaneously cec.InterpWindow = 'Centred'; % Interpolation windowing method
Для каждой точки SNR для каждого кадра выполняются следующие операции:
Генерация RMC и модуляция OFDM: генерация OFDM модулированной формы сигнала для RMC с использованием случайных данных.
Модель канала распространения: Модулированный сигнал OFDM передается через канал распространения. Канальная модель инициализируется соответствующим образом, чтобы гарантировать непрерывность сигналов замирания между кадрами. Выход канала rxWaveform имеет два столбца, по одному на приемную антенну.
Добавить шум канала: Шум канала моделируется AWGN.
Синхронизация приемника и демодуляция OFDM: определение задержки, полученной во время распространения. Это вычисляется путем вызова lteDLFrameOffset, который использует первичный и вторичный сигналы синхронизации. Если не удалось обнаружить первичный и вторичный сигналы синхронизации из-за экстремальных условий канала или шума, то используется ранее рассчитанное значение смещения кадра. Демодуляция OFDM выполняется после синхронизации.
Оценка канала: обеспечивает оценку отклика канала в каждом элементе ресурсной сетки для пары передающая/принимающая антенна. Эта оценка затем используется для устранения влияния канала на передаваемый сигнал. Оценка канала также направлена на уменьшение шума канала, возникающего во время передачи, путем усреднения опорных сигналов (пилот-символов).
Измерение пропускной способности: данные PDSCH анализируются на основе подкадра за подкадром. Как определено RMC R.12 данные PDSCH не передаются на подкадре 5. Поэтому он не декодируется и не учитывается при вычислении пропускной способности. Конкретное значение подкадра данных для всех приемных антенн извлекают из решетки принятых сеток, одно и то же определенное значение подкадра информации извлекают из оценки отклика канала для всех пар передающих и приемных антенн. Они вместе с оценкой шума вводятся в функцию ltePDSCHDecode, которая обесценивает данные PDSCH с использованием декодера ортогонального пространственно-частотного блочного кода (OSFBC). Это возвращает массив ячеек из мягких битовых векторов (кодовых слов), которые вводятся в lteDLSCHDecode функция; это декодирует кодовое слово и возвращает ошибку блочного CRC, которая используется для определения пропускной способности системы.
% Initialize the variables used in the simulation and analysis resultIndex = 1; % Initialize SNR counter index offsets = 0; % Initialize offset vector crc = []; % Define CRC error per frame trSizes = []; % Define transport sizes per frame % Set the random number generator to default value rng('default'); % Number of subframes carrying transport blocks with data within a frame. % For RMC R.12 this should be 9, of the 10 subframes in a frame subframe 5 % does not carry any data nDataTBSPerFrame = sum(trblksize(:) ~= 0); % Total block CRC vector TotalBLKCRC = zeros(numel(SNRIn),nDataTBSPerFrame*NFrames); % Bit throughput vector BitThroughput = zeros(numel(SNRIn),nDataTBSPerFrame*NFrames); for SNRdB = SNRIn fprintf('\nSimulating at %gdB SNR for a total %d Frame(s)\n',... SNRdB,NFrames); % Initialize result store for each SNR point TotalBLKCRCcws = zeros(NFrames,nDataTBSPerFrame);% Total block CRC % vector BitTput = zeros(NFrames,nDataTBSPerFrame); % Bit throughput vector for FrameNo = 1:NFrames % Generate random bits for the frame. The number of bits to % generate for each subframe is specified by each element of % trblksize. For a full frame generate sum(trblksize) bits trdata = randi([0 1], sum(trblksize), 1); % Generate populated LTE resource grid using RMC generator and OFDM % modulate. info is a structure containing the sampling rate used % for OFDM modulation [txWaveform,txGrid,info] = lteRMCDLTool(rmc,trdata); % Initialize result store for frame crc = zeros(nDataTBSPerFrame/ncw,ncw); % Intermediate block CRC trSizes = zeros(nDataTBSPerFrame/ncw,ncw);% Intermediate throughput dataSubframeIndex = 1; % Set sampling rate of channel to that of OFDM modulation cfg.SamplingRate = info.SamplingRate; % Set channel offset to current frame (1 frame = 10ms) cfg.InitTime = (FrameNo-1)*(rmc.TotSubframes)/1000; % Pass data through the fading channel model. % An additional 25 samples are added to the end of the waveform. % These are to cover the range of delays expected from the channel % modeling (a combination of implementation delay and channel % delay spread). rxWaveform = lteFadingChannel(cfg,[txWaveform ; zeros(25,P)]); % Noise setup SNR = 10^(SNRdB/20); % Linear SNR % 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*rmc.CellRefP*double(info.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; % Perform receiver synchronization offset = lteDLFrameOffset(rmc,rxWaveform); % Determine if frame synchronization was successful if (offset > 25) offset = offsets(end); else offsets = [offsets offset]; %#ok end if (offset>0) rxWaveform = rxWaveform(1+offset:end,:); end % Perform OFDM demodulation on the received data to recreate the % resource grid rxGrid = lteOFDMDemodulate(rmc,rxWaveform); % Perform channel estimation [estChannelGrid, noiseest] = lteDLChannelEstimate(rmc,cec,rxGrid); % Process subframes 0 to 9 within received frame for sf = 0:rmc.TotSubframes-1 % Increment NSubframe for correct decoding of data rmc.NSubframe = mod(sf,10); % Extract one subframe for analyzing at a time from the % received grid rxSubframe = rxGrid(:,L*sf+1:L*(sf+1),:); % Extract the estimated channel response for the subframe % being analyzed chSubframe = estChannelGrid(:,L*sf+1:L*(sf+1),:,:); % Perform deprecoding, layer demapping, demodulation and % descrambling on the received data using the estimate of % the channel rxEncodedBits = ltePDSCHDecode(rmc,rmc.PDSCH,... rxSubframe*(10^(-rmc.PDSCH.Rho/20)),chSubframe,noiseest); % Transport block sizes outLen = ones(1,ncw)*trblksize(rmc.NSubframe+1); % Decode DownLink Shared Channel (DL-SCH) [decbits,blkcrc] = lteDLSCHDecode(rmc,rmc.PDSCH,outLen,... rxEncodedBits); % Skip empty transport blocks, this will be the case of % subframe 5, where no data is transmitted in RMC R.12 if(outLen ~= 0) trSizes(dataSubframeIndex, :) = outLen; crc(dataSubframeIndex, :) = blkcrc; dataSubframeIndex = dataSubframeIndex + 1; end end % Store resulting block CRC results and bit throughput vector % for analysis TotalBLKCRCcws(FrameNo,:) = crc(:); BitTput(FrameNo,:) = trSizes(:).*(1 - crc(:)); rmc.NSubframe = 0; end % Record the block CRC and bit throughput for the total number of % frames simulated at a particular SNR TotalBLKCRC(resultIndex,:) = TotalBLKCRCcws(:); % CRC BitThroughput(resultIndex,:) = BitTput(:); % successfully decoded bits resultIndex = resultIndex + 1; offsets = 0; end
Simulating at -2dB SNR for a total 10 Frame(s) Simulating at 2dB SNR for a total 10 Frame(s)
Первый график показывает пропускную способность как суммарные биты в секунду по отношению к диапазону SNR, второй график общей пропускной способности как процент ошибок CRC блока по отношению к диапазону SNR.
figure plot(SNRIn,mean(BitThroughput,2),'-*') title(['Throughput for ', num2str(NFrames) ' frame(s)'] ) xlabel('SNRdB'); ylabel('Throughput (kbps)'); grid on; hold on; plot(SNRIn,mean([trblksize(1:5) trblksize(7:end)])*0.7*... ones(1,numel(SNRIn)),'--rs'); legend('Simulation Result','70 Percent Throughput','Location',... 'SouthEast')

figure plot(SNRIn,100*(1-mean(TotalBLKCRC,2)),'-*') title(['Throughput for ', num2str(NFrames) ' frame(s)'] ) xlabel('SNRdB'); ylabel('Throughput (%)'); grid on; hold on; plot(SNRIn,70*ones(1,numel(SNRIn)),'--rs'); legend('Simulation Result','70 Percent Throughput','Location',... 'SouthEast') ylim([0 100])

Можно изменить части этого примера, чтобы поэкспериментировать с различным количеством кадров и различными значениями SNR. SNR может быть вектором значений или одним значением. Пример должен выполняться для большего числа кадров, чтобы получить значимые измерения пропускной способности.
Демонстрация может быть легко сконфигурирована для анализа производительности системы для сценария с 2 кодовыми словами. Например, если мы хотим сконфигурировать систему для схемы пространственного мультиплексирования с разомкнутым контуром с передачей 2-кодового слова, потребуются следующие изменения в структуре конфигурации PDSCH:
enb.PDSCH.TxScheme = 'CDD'; % Transmission scheme enb.PDSCH.Rho = -6; % Downlink power allocation enb.RC = 'R.14'; % RMC number
Затем параметры блока оценки канала также могут быть настроены в соответствии с уровнем шума и используемой схемой модуляции.
3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»