Разница во времени расположения прибытия Используя PRS

Этот пример показывает, как использовать подход расположения Разницы во времени прибытия (TDOA) в сочетании с Расположением ссылочного сигнала (PRS) Релиза 9, чтобы вычислить положение Оборудования пользователя (UE) в сети eNodeBs использование LTE Toolbox™.

Введение

В этом примере много eNodeB передач созданы и объединены с различными задержками и полученными степенями смоделировать прием всех eNodeB форм волны одним UE. UE выполняет корреляцию с Расположением ссылочного сигнала (PRS), чтобы установить задержку от каждого eNodeB и впоследствии различия в задержке между всеми парами eNodeBs. Эти различия в задержке используются, чтобы вычислить гиперболы постоянного различия в задержке, которые построены относительно известных eNodeB положений и пересекаются в положении UE.

Настройка передатчика

Набор (массив ячеек) eNodeB настроек enb создается с количеством eNodeBs, заданного NeNodeB. Настройки выведены от Reference Measurement Channel (RMC) R.5 с помощью lteRMCDL. R.5 описывает Нисходящий канал пропускной способности на 3 МГц Разделяемый Канал (PDSCH) передача с помощью 64-QAM модуляции. Для каждого eNodeB настройка обновляется, чтобы сделать идентичность ячейки NCellID уникальный и параметры PRS, NPRSRB, IPRS и PRSPeriod установлены.

Случайное положение, данное координатой X и Y для каждого eNodeB, сгенерировано hPositioningPosition.m.

rng('default'); % Initialize the random number generator stream
NeNodeB = 5;    % Number of eNodeB

% Create eNodeB configurations
enb = cell(1,NeNodeB);
for i=1:NeNodeB
   enb{i}=lteRMCDL('R.5');            % Get configuration based on RMC
   enb{i}.NCellID = mod((i-1)*2,504); % Set arbitrary cell identity
   enb{i}.TotSubframes = 1;           % Number of subframes to generate
   enb{i}.NPRSRB = 2;                 % Bandwidth of PRS in resource blocks
   enb{i}.IPRS = 0;                   % PRS configuration index
   enb{i}.PRSPeriod = 'On';           % PRS present in all subframes
   enb{i}.Position = hPositioningPosition(i-1, NeNodeB); % eNodeB position
end

% Use the first eNodeB configuration for general settings
info = lteOFDMInfo(enb{1});

Постройте Местоположение eNodeBs и UE

Положения eNodeBs и UE построены для ссылки. UE находится в (0,0), и eNodeBs распределяются вокруг UE.

hPositioningPlotPositions(enb);

Сгенерируйте передачи

Для каждого eNodeB передача сделана состоящий из PRS, Первичного сигнала синхронизации (PSS), Вторичного сигнала синхронизации (SSS) и Специфичного для ячейки Ссылочного Сигнала (Ячейка RS). Пустая сетка ресурса создается, и PRS сгенерирован и сопоставлен на сетку с помощью ltePRS и ltePRSIndices. PSS, SSS и Ячейка RS добавляются подобным способом. Результирующая сетка является OFDM, модулируемым, чтобы произвести форму волны передачи.

tx = cell(1,NeNodeB);
for i = 1:NeNodeB
    grid = [];
    for nsf = 0:19
        enb{i}.NSubframe = mod(nsf,10);
        sfgrid = lteDLResourceGrid(enb{i});       % Empty subframe
        sfgrid(ltePRSIndices(enb{i})) = ltePRS(enb{i});       % PRS REs
        sfgrid(ltePSSIndices(enb{i})) = ltePSS(enb{i});       % PSS REs
        sfgrid(lteSSSIndices(enb{i})) = lteSSS(enb{i});       % SSS REs
        sfgrid(lteCellRSIndices(enb{i})) = lteCellRS(enb{i}); % Cell RS REs
        grid = [grid sfgrid]; %#ok<AGROW>
    end
    enb{i}.NSubframe = 0;
    tx{i} = lteOFDMModulate(enb{i}, grid);        % OFDM modulate
end

Вычислите Задержки от eNodeBs до UEs

Используя известные eNodeB положения, задержка от каждого eNodeB до UE вычисляется с помощью расстояния между UE и eNodeB, radius и скоростью распространения (скорость света). Используя знание уровня выборки, info.SamplingRate, демонстрационная задержка вычисляется и хранится в sampleDelay. Эти переменные будут использоваться, чтобы смоделировать среду между eNodeBs и UE, но информация НЕ будет предоставлена UE.

speedOfLight = 299792458.0; % Speed of light in m/s

sampleDelay = zeros(1, NeNodeB);
radius = cell(1, NeNodeB);
for i = 1:NeNodeB
   [~, radius{i}] = cart2pol(enb{i}.Position(1), enb{i}.Position(2));
   delay = radius{i}/speedOfLight;                  % Delay in seconds
   sampleDelay(i) = round(delay*info.SamplingRate); % Delay in samples
end

Создайте сумму полученных форм волны и постройте полученные формы волны

Полученный сигнал в UE моделируется путем задержки каждой eNodeB передачи согласно значениям в sampleDelay и ослабления полученного сигнала от каждого eNodeB использование значений в radius в сочетании с реализацией TR 36.814 [1] Городская Макро-модель пути к Углу обзора (LOS) потерь. Полученная форма волны от каждого eNodeB дополнена нулями, чтобы гарантировать, что все формы волны являются той же длиной.

sumrx = zeros(length(tx{1})+max(sampleDelay), 1);
rx = cell(1, NeNodeB);
for i = 1:NeNodeB
    % Urban Macro LOS path loss per TR36.814
    PLdB = hPositioningPathLoss(radius{i}, 2.1e9);
    PL = 10^(PLdB/10);

    % Add delay, pad and attenuate
    rx{i} = [zeros(sampleDelay(i), 1); tx{i}; ...
                zeros(max(sampleDelay)-sampleDelay(i), 1)]/ sqrt(PL);

    % Sum waveforms from all eNodeBs
    sumrx = sumrx + rx{i};
end

% Plot received waveforms
hPositioningPlotRx(enb, rx, info.SamplingRate);

Выполните поиск ячейки, чтобы установить тождества ячейки

Многоэлементный поиск выполняется в порядке идентифицировать идентичность ячейки каждого eNodeB. Массив настроек, rxcfg для eNodeBs затем создается на основе обнаруженных тождеств ячейки и принимая, что настройка PRS была дана сигнализацией более высокого слоя и поэтому известна UE. Много других параметров физического уровня, таких как циклическая длина префикса и дуплексный режим приняты, чтобы быть известными и приняты, чтобы быть равными для каждого eNodeB. Смотрите Поиск Ячейки, MIB и пример Восстановления SIB1 для получения дополнительной информации об обнаружении этих параметров.

% Assumed parameters for cell search
searchcfg.CyclicPrefix = enb{1}.CyclicPrefix;
searchcfg.DuplexMode = enb{1}.DuplexMode;
searchcfg.NDLRB = enb{1}.NDLRB;

% Perform multi-cell search
searchalg.MaxCellCount = NeNodeB;
searchalg.SSSDetection = 'PostFFT';
[cellIDs,offsets] = lteCellSearch(searchcfg,sumrx,searchalg);

% Set up configurations for each detected cell; cells are considered as
% detected here if they meet a minimum RSRQ threshold Qqualmin
Qqualmin = -20;
RSRQdB = zeros(1,searchalg.MaxCellCount);
rxcfg = cell(1,searchalg.MaxCellCount);
for i = 1:searchalg.MaxCellCount
    % Assumed parameters
    rxcfg{i} = enb{1};
    % Use cell identity that was detected
    rxcfg{i}.NCellID = cellIDs(i);
    % Measure RSRQ
    rxgrid = lteOFDMDemodulate(rxcfg{i},sumrx(1+offsets(i):end,:));
    meas = hRSMeasurements(rxcfg{i},rxgrid);
    RSRQdB(i) = meas.RSRQdB;
end
rxcfg(RSRQdB<Qqualmin) = [];
Ndetected = numel(rxcfg);

Оцените время поступления

Время поступления сигналов от каждого eNodeB устанавливается в UE путем корреляции входящего сигнала с локальным PRS, сгенерированным с идентичностью ячейки каждого eNodeB. Обратите внимание на то, что абсолютное время поступления не может использоваться в UE, чтобы вычислить его положение, когда он не знает о том, как далеко далеко eNodeBs, только различие в расстояниях, данных различием во время поступления. Поэтому пиковая корреляция для каждого eNodeB используется в качестве оценки задержки, чтобы позволить сравнение.

ref = cell(1, Ndetected);
corr = cell(1, Ndetected);
delayEst = zeros(1, Ndetected);
for i = 1:Ndetected
    % Generate reference PRS
    sfgrid = lteDLResourceGrid(rxcfg{i});
    sfgrid(ltePRSIndices(rxcfg{i})) = ltePRS(rxcfg{i});
    ref{i} = lteOFDMModulate(rxcfg{i},sfgrid);

    % Correlate received signal with each reference PRS
    c = abs(xcorr(sumrx,ref{i}));

    % Reduced length of correlation vector for positioning and plotting
    c(1:length(sumrx)) = [];    % Remove meaningless result at beginning
    corr{i} = c(1:info.Nfft);   % Extract an OFDM symbol's worth of data

    % Delay estimate is at point of maximum correlation
    delayEst(i) = find(corr{i}==max(corr{i}));
end

% Plot correlation
if (Ndetected>0)
    hPositioningPlotCorr(rxcfg, corr, info.SamplingRate);
end

Вычислите TDOA и постройте постоянные гиперболы TDOA

Используя время поступления, разница во времени прибытия между каждой парой eNodeBs вычисляется с помощью hPositioningTDOA.m. Различие определенного времени прибытия между парой eNodeBs может следовать из UE, располагаемого в любом положении, где два круга, каждый сосредоточенный на eNodeB, пересекаются. Эти два круга имеют радиусы, которые отличаются дистанцией, преодоленной со скоростью света в данной разнице во времени. Полный набор возможных положений UE через все возможные радиусы для одного круга (с другим кругом, поддерживающим радиус, соответствующий разнице во времени, как уже описано), формирует гиперболу. "Гиперболы постоянного различия в задержке" для всех различных пар eNodeBs построены относительно известных eNodeB положений и пересекаются в положении UE.

% Estimate time difference of arrival from each eNodeB
tdoa = hPositioningTDOA(delayEst,info.SamplingRate);

% Plot hyperbolas
figure(1);
legendstr = feval(@(x)x.String,legend);
enbs = [enb{:}];
txCellIDs = [enbs.NCellID];
for j = 1:Ndetected
    for i = (j+1):Ndetected
        dd = tdoa(i,j)*speedOfLight; % Delay distance
        % establish the eNodeBs for which the delay distance
        % is applicable by examining the detected cell identities
        txi = find(txCellIDs==rxcfg{i}.NCellID);
        txj = find(txCellIDs==rxcfg{j}.NCellID);
        if (~isempty(txi) && ~isempty(txj))
            % plot TDOA curve
            [x, y] = hPositioningTDOACurve(enb{txi}.Position, ...
                enb{txj}.Position, dd);
            plot(x, y, 'k:', 'LineWidth', 2);
        end
    end
end
legend(legendstr);

Приложение

Этот пример использует функции помощника:

Выбранная библиография

  1. 3GPP TR 36.814 "Дальнейшие продвижения для аспектов физического уровня E-UTRA"

Для просмотра документации необходимо авторизоваться на сайте