В этом примере показано, как использовать Toolbox™ LTE для создания кадра данных, передачи его через канал замирания и выполнения оценки и выравнивания канала. Создаются две фигуры, иллюстрирующие принятый и выровненный кадр.
В этом примере показано, как можно создать простое моделирование «передатчик-канал-приемник» с использованием функций из панели инструментов LTE. В примере генерируется кадр данных на одном антенном порту. Поскольку в этом примере транспортный канал не создается, данные являются случайными битами, 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
Рабочее SNR конфигурируется в децибелах на значение SNRdB который также преобразуется в линейный SNR.
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 и доплеровская частота на 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
Интерполяция выполняется блоком оценки канала между оценками пилот-сигнала для создания оценки канала для всех 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 обеспечивает генерацию пустых сигналов и индексов в других подкадрах, так что синтаксис вызова здесь может быть полностью однородным по всем подкадрам.
% 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);SNR задается Es/N0, Es - энергия интересующего сигнала, N0 - мощность шума. Шум, добавленный перед демодуляцией OFDM, будет усилен БПФ. Поэтому для нормализации SNR в приемнике (после демодуляции OFDM) шум должен быть масштабирован. Усиление представляет собой квадратный корень размера БПФ. Размер БПФ может быть определен из частоты дискретизации формы сигнала во временной области (info.SamplingRateи интервал между поднесущими (15 кГц). Мощность добавляемого шума может быть масштабирована так, чтобы и нормализовались после демодуляции OFDM для достижения требуемого SNR (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 матрицу комплексных весов, которые канал применяет к каждому ресурсному элементу в передаваемой сетке для каждой возможной комбинации передающей и приемной антенны. Возможные комбинации основаны на конфигурации eNireB. enb и количество приемных антенн (определяемое размером принятой сетки ресурсов). Первое измерение является поднесущей, второе измерение является символом OFDM, третье измерение является приемной антенной, а четвертое измерение является передающей антенной. В этом примере используется одна передающая и одна приемная антенны, поэтому размер 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);

В этом примере используется вспомогательная функция: