В этом примере показано, как использовать LTE Toolbox™, чтобы создать ценность системы координат данных, передайте его через исчезающий канал и выполните оценку канала и эквализацию. Две фигуры создаются, иллюстрируя принятый и компенсируемый кадр.
В этом примере показано, как простая симуляция приемника канала передатчика может быть создана с помощью функций из LTE Toolbox. Пример генерирует ценность системы координат данных по одному порту антенны. Когда никакой транспортный канал не создается в этом примере, данные являются случайными битами, QPSK, модулируемый и сопоставленный с каждым символом в подкадре. Ячейка определенный опорный сигнал и первичные и вторичные сигналы синхронизации создана и сопоставлена с подкадром. 10 подкадров индивидуально сгенерированы, чтобы создать систему координат. Система координат является модулируемым OFDM, прошел через Расширенное Автомобильное Модель (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) и 120 Гц используется Доплеровская частота. Эти параметры наряду с корреляцией 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
Определяемое пользователем окно используется к средним экспериментальным символам, чтобы уменьшать эффект шума. Размер окна усреднения сконфигурирован в терминах элементов ресурса (REs), вовремя и частоты. Консерватор 9 9 окно используется в этом примере в качестве профиля задержки EVA и 120 Гц Доплеровская причина частоты, которую канал изменяет быстро в зависимости от времени и частота. 9 9 окно включает эти 4 пилотов, сразу окружающих пилота интереса при усреднении. Выбор окна усреднения обсужден по Оценке Канала.
cec.PilotAverage = 'UserDefined'; % Pilot averaging method cec.FreqWindow = 9; % Frequency averaging window in REs cec.TimeWindow = 9; % Time averaging window 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
В этом примере полезно иметь доступ к размерностям сетки ресурса подкадра. Они определяются с помощью 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 подкадров сгенерированы всего. Для каждого подкадра добавляется Специфичный для ячейки Опорный сигнал (Ячейка 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
. Получившаяся сетка является 3-мерной матрицей. Количество строк представляет количество поднесущих. Количество столбцов равняется количеству символов 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);
Этот пример использует функцию помощника: