Этот пример показов, как использовать LTE Toolbox™, чтобы создать систему координат количество данных, передать его через канал с замираниями и выполнить оценку канала и эквализацию. Создаются два рисунков, иллюстрирующие принятый и выравниваемую систему координат.
Этот пример показывает, как простая симуляция канала-передатчика-приемника может быть создано с использованием функций из LTE Toolbox. Пример генерирует системы координат данные на одном порту антенны. Поскольку в этом примере транспортный канал не создается, данные являются случайными битами, QPSK модулирует и преобразует в каждый символ в субкадре. Создаются и отображаются в камеру кадр опорного сигнала и первичные и вторичные сигналы синхронизации. 10 подкадров генерируются индивидуально, чтобы создать систему координат. Система координат модулируется OFDM, передается через канал с расширенной моделью A (EVA5) с замираниями, добавляется аддитивный белый Гауссов шум и демодулируется. Применяется выравнивание MMSE с помощью оценки канала и шума, и, наконец, строятся полученные и выравненные ресурсные сетки.
Настройки всей ячейки заданы в структуре enb
. Для ряда функций, используемых в этом примере, требуется подмножество настроек, указанных ниже. В этом примере используется только одна передающая антенна.
enb.NDLRB = 15; % Number of resource blocks enb.CellRefP = 1; % One transmit antenna port enb.NCellID = 10; % Cell ID enb.CyclicPrefix = 'Normal'; % Normal cyclic prefix enb.DuplexMode = 'FDD'; % FDD
Операционный ОСШ сконфигурирован в децибелах на значение SNRdB
который также преобразуется в линейный ОСШ.
SNRdB = 22; % Desired SNR in dB SNR = 10^(SNRdB/20); % Linear SNR rng('default'); % Configure random number generators
Модель канала сконфигурирована с помощью структуры. В этом примере используется канал с замираниями с расширенным профилем задержки транспортного средства A (EVA) и 120Hz доплеровской частотой. Эти параметры наряду с корреляцией MIMO и другими параметрами модели канала установлены.
cfg.Seed = 1; % Channel seed cfg.NRxAnts = 1; % 1 receive antenna cfg.DelayProfile = 'EVA'; % EVA delay spread cfg.DopplerFreq = 120; % 120Hz Doppler frequency cfg.MIMOCorrelation = 'Low'; % Low (no) MIMO correlation cfg.InitTime = 0; % Initialize at time zero 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), по времени и частоте. Консервативное окно 9 на 9 используется в этом примере как профиль задержки EVA 120Hz и доплеровская частота вызывает быстрые изменения канала с течением времени и частоты. Окно 9 на 9 включает 4 пилота, непосредственно окружающих интересующий пилот при усреднении. Выбор окна усреднения рассматривается в Channel Estimation.
cec.PilotAverage = 'UserDefined'; % Pilot averaging method cec.FreqWindow = 9; % Frequency averaging window in REs cec.TimeWindow = 9; % Time averaging window 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
В этом примере полезно иметь доступ к размерностям сетки ресурсов подкадров. Они определяются с помощью lteDLResourceGridSize
. Эта функция возвращает массив, содержащую количество поднесущих, количество символов OFDM и количество портов передающей антенны в этом порядке.
gridsize = lteDLResourceGridSize(enb); K = gridsize(1); % Number of subcarriers L = gridsize(2); % Number of OFDM symbols in one subframe P = gridsize(3); % Number of transmit antenna ports
Пустая сетка ресурсов txGrid
создается, который будет заполнен подкадрами.
txGrid = [];
Поскольку в этом примере транспортный канал не используется, данные, переданные по каналу, будут представлять собой случайные модулированные символы QPSK. Для преобразования символа в каждый ресурсный элемент создается подрамник. Другие сигналы, необходимые для передачи и приема, будут перезаписывать эти символы в ресурсной сетке.
% Number of bits needed is size of resource grid (K*L*P) * number of bits % per symbol (2 for QPSK) numberOfBits = K*L*P*2; % Create random bit stream inputBits = randi([0 1], numberOfBits, 1); % Modulate input bits inputSym = lteSymbolModulate(inputBits,'QPSK');
Система координат будет создаваема путем генерации отдельных подкадров в цикле и добавления каждого созданного подкадра к предыдущим подкадрам. Набор добавленных подкадров содержится в txGrid
. Это добавление повторяется десять раз, чтобы создать систему координат. Когда сигнал модулированного временного интервала OFDM передается через канал, сигнал испытывает задержку. Чтобы избежать пропуска любых выборок из-за этой задержки, генерируется дополнительный подкадр, поэтому всего генерируется 11 подкадров. Для каждого субкадра добавляется специфический для ячейки опорный сигнал (Cell RS). Также добавляются основной сигнал синхронизации (PSS) и вторичный сигнал синхронизации (SSS). Обратите внимание, что эти сигналы синхронизации происходят только в подкадрах 0 и 5, но LTE Toolbox заботится о генерации пустых сигналов и индексов в других подкадрах, так что синтаксис вызова здесь может быть полностью равномерным для всех подкадров.
% For all subframes within the frame for sf = 0:10 % Set subframe number enb.NSubframe = mod(sf,10); % Generate empty subframe subframe = lteDLResourceGrid(enb); % Map input symbols to grid subframe(:) = inputSym; % Generate synchronizing signals pssSym = ltePSS(enb); sssSym = lteSSS(enb); pssInd = ltePSSIndices(enb); sssInd = lteSSSIndices(enb); % Map synchronizing signals to the grid subframe(pssInd) = pssSym; subframe(sssInd) = sssSym; % Generate cell specific reference signal symbols and indices cellRsSym = lteCellRS(enb); cellRsInd = lteCellRSIndices(enb); % Map cell specific reference signal to grid subframe(cellRsInd) = cellRsSym; % Append subframe to grid to be transmitted txGrid = [txGrid subframe]; %#ok end
В порядок преобразования частотного диапазона символов OFDM в временной интервал, требуется модуляция OFDM. Это достигается с помощью lteOFDMModulate
. Функция возвращает два значения; матрица txWaveform
и структура info
содержит частоту дискретизации. txWaveform
является полученной временным интервалом формой волны. Каждый столбец содержит сигнал временного интервала для каждого порта антенны. В этом примере, поскольку используется только один порт антенны, возвращается только один столбец. info.SamplingRate
- скорость дискретизации, с которой была создаваем временной интервал форма волны. Это значение требуется для модели канала.
[txWaveform,info] = lteOFDMModulate(enb,txGrid); txGrid = txGrid(:,1:140);
Форма волны во временном интервале передается через модель канала (lteFadingChannel
) конфигурируется структурой cfg
. Модель канала требует частоты дискретизации временного интервала волны, так что параметр cfg.SamplingRate
устанавливается в значение, возвращаемое lteOFDMModulate
. Форма волны, сгенерированная функцией модели канала, содержит по одному столбцу на приемную антенну. В этом примере используется одна приемная антенна, поэтому возвращенная форма волны имеет один столбец.
cfg.SamplingRate = info.SamplingRate;
% Pass data through the fading channel model
rxWaveform = lteFadingChannel(cfg,txWaveform);
ОСШ задается как где - энергия интересующего сигнала и - степень шума. Шум, добавленный перед демодуляцией OFDM, будет усилен БПФ. Поэтому, чтобы нормализовать ОСШ в приемник (после демодуляции OFDM), шум должен быть масштабирован. Усиление является квадратным корнем из размера БПФ. Размер БПФ может быть определен из частоты дискретизации временного интервала волны (info.SamplingRate
) и интервалы между поднесущими (15 кГц). Степень добавляемого шума может быть масштабирована так, что и нормализуются после демодуляции OFDM для достижения желаемого ОСШ (SNRdB
).
% Calculate noise gain N0 = 1/(sqrt(2.0*enb.CellRefP*double(info.Nfft))*SNR); % Create additive white Gaussian noise noise = N0*complex(randn(size(rxWaveform)),randn(size(rxWaveform))); % Add noise to the received time domain waveform rxWaveform = rxWaveform + noise;
Смещение, вызванное каналом в принятом сигнале временного интервала, получается с помощью lteDLFrameOffset
. Эта функция возвращает значение offset
который указывает, сколько выборок задержана форма волны. Смещение рассматривается идентичным для формы волны, полученной на всех антеннах. Затем можно манипулировать принимаемой временным интервалом формой волны, чтобы удалить задержку с помощью offset
.
offset = lteDLFrameOffset(enb,rxWaveform); rxWaveform = rxWaveform(1+offset:end,:);
Сигнал временного интервала подвергается демодуляции OFDM, чтобы преобразовать его в частотный диапазон и воссоздать ресурсную сетку. Это достигается с помощью lteOFDMDemodulate
. Получившаяся сетка является трехмерной матрицей. Количество строк представляет количество поднесущих. Количество столбцов равняется количеству символов OFDM в подкадре. Количество поднесущих и символов одинаковое для возвращенной сетки из демодуляции OFDM, когда сетка перешла в lteOFDMModulate
. Количество плоскостей (3-ья размерность) в сетке соответствует количеству приемных антенн.
rxGrid = lteOFDMDemodulate(enb,rxWaveform);
Чтобы создать оценку канала в течение длительности переданной ресурсной сетки lteDLChannelEstimate
используется. Функция оценки канала сконфигурирована структурой cec
. lteDLChannelEstimate
принимает, что первый подкадр в ресурсной сетке является номером подкадра enb.NSubframe
и поэтому номер подкадра должен быть установлен перед вызовом функции. В этом примере весь принятая система координат будет оцениваема в один вызов, а первый подкадр внутри системы координат является номером подкадра 0. Функция возвращает 4-D массив комплексных весов, которые канал применяет к каждому ресурсному элементу в переданной сетке для каждой возможной комбинации передающей и приемной антенны. Возможные комбинации основаны на строении eNodeB enb
и количество приемных антенн (определяется размером полученной ресурсной сетки). 1-ая размерность - поднесущая, 2-ая размерность - символ OFDM, 3-ья размерность - приемная антенна и 4-ая размерность - передающая антенна. В этом примере используются одна передающая и одна приемная антенны, поэтому размер estChannel
180 на 140 на 1 на 1.
enb.NSubframe = 0; [estChannel, noiseEst] = lteDLChannelEstimate(enb,cec,rxGrid);
Эффекты канала на полученной ресурсной сетке выравниваются с помощью lteEqualizeMMSE
. Эта функция использует оценку канала estChannel
и шумовые noiseEst
выравнивание полученной ресурсной сетки rxGrid
. Функция возвращается eqGrid
который является выравниваемой сеткой. Размерности выравниваемой сетки те же, что и исходной переданной сетки (txGrid
) перед OFDM модуляцией.
eqGrid = lteEqualizeMMSE(rxGrid, estChannel, noiseEst);
Полученная ресурсная сетка сравнивается с выровненной ресурсной сеткой. Вычисляется ошибка между переданной и уравненной сеткой и переданной и принятой сетками. Это создает две матрицы (тот же размер, что и массивы ресурсов), которые содержат ошибку для каждого символа. Для простого осмотра полученные и уравненные сетки строятся по логарифмической шкале с помощью surf
в пределах hDownlinkEstimationEqualizationResults.m
. Эти схемы показывают, что выполнение эквализации канала резко уменьшает ошибку в полученной ресурсной сетке.
% Calculate error between transmitted and equalized grid eqError = txGrid - eqGrid; rxError = txGrid - rxGrid; % Compute EVM across all input values % EVM of pre-equalized receive signal EVM = comm.EVM; EVM.AveragingDimensions = [1 2]; preEqualisedEVM = EVM(txGrid,rxGrid); fprintf('Percentage RMS EVM of Pre-Equalized signal: %0.3f%%\n', ... preEqualisedEVM);
Percentage RMS EVM of Pre-Equalized signal: 124.133%
% EVM of post-equalized receive signal postEqualisedEVM = EVM(txGrid,eqGrid); fprintf('Percentage RMS EVM of Post-Equalized signal: %0.3f%%\n', ... postEqualisedEVM);
Percentage RMS EVM of Post-Equalized signal: 15.598%
% Plot the received and equalized resource grids
hDownlinkEstimationEqualizationResults(rxGrid, eqGrid);
В этом примере используется функция helper: