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

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

Введение

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

eNodeB Setup

% 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 Элементов Ресурса (REs) используется. Профиль задержки EPA заставляет ответ канала медленно изменяться по частоте. Поэтому большое окно усреднения частоты 15 REs используется. Доплеровская частота составляет 5 Гц, заставляя канал исчезать очень медленно в зависимости от времени. Поэтому большое окно усреднения во времени также используется. Канал оценивается покадровый, поэтому пилоты в предыдущем и после пяти подкадров включены в среднее значение, если это возможно, путем установки окна времени на 141 REs.

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

Интерполяция выполняется средством оценки канала между экспериментальными оценками, чтобы создать оценку канала для всего REs. Чтобы улучшить оценку, несколько подкадров могут использоваться при интерполяции. Окно интерполяции 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, какой deprecodes данные 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)

Постройте результаты

Первый график показывает пропускную способность общими битами в секунду против области значений SNRs, вторая общая пропускная способность графиков как процент ошибок блока 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 object. The axes object 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 object. The axes object 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) и прием"