Временное различие позиционирования прибытия с использованием PRS

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

Введение

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

Строение передатчика

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

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

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

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

hPositioningPlotPositions(enb);

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

Для каждого eNodeB осуществляется передача, состоящая из PRS, первичного сигнала синхронизации (PSS), вторичного сигнала синхронизации (SSS) и опорного сигнала конкретной ячейки (Cell RS). Создается пустая ресурсная сетка, и PRS генерируется и сопоставляется с сеткой с помощью ltePRS и ltePRSIndices. PSS, SSS и Cell 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

Вычисление задержек от eNodeB до UE

Используя известные позиции e Node B, временная задержка от каждого e Node B к UE вычисляется с использованием расстояния между UE и e Node B <reservedrangesplaceholder0>, и скорость распространения (скорость света). Используя знания о частоте дискретизации, info.SamplingRate, задержка выборки вычисляется и сохраняется в sampleDelay. Эти переменные будут использоваться для моделирования окружения между eNodeB и 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] Urban Macro Line Of Sight (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 для eNodeB затем создается на основе обнаруженных тождеств камер и принимая, что строение PRS была задаваемо сигнализацией более высокого уровня и, следовательно, известна UE. Ряд других параметров физического слоя, таких как длина циклического префикса и дуплексный режим, приняты известными и приняты равными для каждого eNodeB. Смотрите пример Cell Search, MIB и SIB1 Recovery для получения дополнительной информации об обнаружении этих параметров.

% 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, чтобы вычислить его положение, так как он не знает, как далеко находятся eNodeB, только различие расстояний, заданная различием во времени прибытия. Поэтому пиковая корреляция для каждого 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 и Plot Constant TDOA

Используя время прибытия, временные различия прибытия между каждой парой eNodeB вычисляются с помощью hPositioningTDOA функция. Конкретное различие во времени прибытия между парой eNodeB может быть результатом того, что UE находится в любом положении, где пересекаются два круга, каждый с центром на eNodeB. Две окружности имеют радиусы, которые различаются расстоянием, пройденным со скоростью света в заданном временном различии. Полный набор возможных положений UE через все возможные радиусы для одного круга (с другим кругом, поддерживающим радиус, соответствующий различию во времени, как уже описано) образует гиперболу. «Гиперболы постоянного различия задержек» для всех различных пар eNodeB строятся относительно известных позиций 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»