exponenta event banner

Моделирование пропускной способности с разнесением передачи PDSCH

В этом примере показано, как измерить пропускную способность физического общего канала нисходящей линии связи (PDSCH) цепочки передачи/приема с использованием Toolbox™ LTE.

Введение

В примере используются функции LTE Toolbox для генерации многоантенного R.12 опорного измерительного канала нисходящей линии связи (RMC). Передача моделируется с использованием модели канала распространения расширенного пешехода A (EPA). Шум канала добавляется к принятому сигналу, который затем демодулируется OFDM, в результате чего получается сетка принятых ресурсов для каждой приемной антенны. Оценка канала выполняется для определения канала между каждой парой передающих/приемных антенн. Затем данные PDSCH извлекаются и декодируются из принятой сетки ресурсов. Используя результат блочного CRC, определяют пропускную способность цепочки передачи/приема.

Настройка eNaseB

% 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

Сформировать конфигурацию для указанного 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 contains an axes. The axes with title Throughput for 10 frame(s) contains 2 objects of type line. These objects represent Simulation Result, 70 Percent Throughput.

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])

Figure contains an axes. The axes with title Throughput for 10 frame(s) contains 2 objects of type line. These objects represent Simulation Result, 70 Percent Throughput.

Дальнейшие исследования

Можно изменить части этого примера, чтобы поэкспериментировать с различным количеством кадров и различными значениями SNR. SNR может быть вектором значений или одним значением. Пример должен выполняться для большего числа кадров, чтобы получить значимые измерения пропускной способности.

Демонстрация может быть легко сконфигурирована для анализа производительности системы для сценария с 2 кодовыми словами. Например, если мы хотим сконфигурировать систему для схемы пространственного мультиплексирования с разомкнутым контуром с передачей 2-кодового слова, потребуются следующие изменения в структуре конфигурации PDSCH:

enb.PDSCH.TxScheme = 'CDD';         % Transmission scheme
enb.PDSCH.Rho = -6;                 % Downlink power allocation
enb.RC = 'R.14';                    % RMC number

Затем параметры блока оценки канала также могут быть настроены в соответствии с уровнем шума и используемой схемой модуляции.

Избранная библиография

  1. 3GPP ТС 36.101 «Радиопередача и прием пользовательского оборудования (UE)»