Этот пример демонстрирует, как измерить пропускную способность физического совместно используемого канала нисходящей линии связи (PDSCH) цепи передачи/приема с помощью LTE Toolbox™.
Пример использует функции LTE Toolbox, чтобы сгенерировать несколько антенн нисходящего опорного канала измерения (RMC) R.12. Передача моделируется с помощью модели канала распространения Extended Pedestrian 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
Чтобы уменьшить влияние шума на пилотные оценки, используется окно усреднения ресурсных элементов (RE) 15 на 141. Профиль задержки 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
Для каждой точки ОСШ для каждой системы координат выполняются следующие операции:
Генерация 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)
Первый график показывает пропускную способность как общее количество бит в секунду по сравнению с областью значений ОСШ, второй строит суммарную пропускную способность как процент блочных ошибок CRC по отношению к области значений ОСШ.
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 TS 36.101 «Радиопередача и прием пользовательского оборудования (UE)»