PDSCH Пропускная способность разнесения передачи Симуляции

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

Введение

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

Setup eNodeB

% 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

Оценка канала Строения

Чтобы уменьшить влияние шума на пилотные оценки, используется окно усреднения ресурсных элементов (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 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 TS 36.101 «Радиопередача и прием пользовательского оборудования (UE)»