Этот пример демонстрирует, как измерить Физический Нисходящий Разделяемый Канал (PDSCH) пропускная способность передать/получить цепочки с помощью LTE Toolbox™.
Пример использует функции LTE Toolbox, чтобы сгенерировать много нисходящий канал антенны Reference Measurement Channel (RMC) R.12. Передача моделируется с помощью модели канала распространения Расширенного пешехода А. (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 Элементов Ресурса (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 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) и прием"