Этот пример показывает, как использовать подход позиционирования временной разности прибытия (TDOA) в сочетании с опорным сигналом позиционирования (PRS) версии 9 для вычисления местоположения пользовательского оборудования (UE) в сети eNireB с использованием Toolbox™ LTE.
В этом примере создается и комбинируется с различными задержками и принимаемыми степенями для моделирования приема всех сигналов eNireB одним UE. UE выполняет корреляцию с опорным сигналом позиционирования (PRS), чтобы установить задержку от каждого eNireB и затем разность задержек между всеми парами eNireB. Эти разности задержек используются для вычисления гипербол постоянной разности задержек, которые строятся относительно известных положений eNireB и пересекаются в положении UE.
Набор (массив ячеек) конфигураций eNireB enb создается, с количеством eNeyB, указанным NeNodeB. Конфигурации получаются из опорного канала измерения (RMC) R.5 используя lteRMCDL. R.5 описывает передачу общего канала (PDSCH) с полосой пропускания 3 МГц с использованием 64-QAM модуляции. Для каждого eNireB конфигурация обновляется для идентификации соты. NCellID уникальные и параметры PRS NPRSRB, IPRS и PRSPeriod установлены.
Случайное положение, задаваемое координатами X и Y для каждого eNireB, генерируется посредством 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});
Позиции eNireB и UE строятся для ссылки. UE находится в (0,0), и eNireB распределены по UE.
hPositioningPlotPositions(enb);

Для каждого eNireB осуществляется передача, состоящая из PRS, первичного сигнала синхронизации (PSS), вторичного сигнала синхронизации (SSS) и опорного сигнала, специфичного для соты (Cell 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
Используя известные позиции eNireB, временная задержка от каждого eNireB к UE вычисляется с использованием расстояния между UE и eNireB, radiusи скорость распространения (скорость света). Использование знаний о частоте выборки, info.SamplingRate, задержка выборки вычисляется и сохраняется в sampleDelay. Эти переменные будут использоваться для моделирования среды между eNireB и 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 моделируется путем задержки каждой передачи eNireB в соответствии со значениями в sampleDelayи ослабление принятого сигнала от каждого eNeyB с использованием значений в radius в сочетании с реализацией модели потерь в тракте TR 36.814 [1] Городская макролиния визирования (LOS). Принятый сигнал от каждого eNireB дополняется нулями, чтобы гарантировать, что все сигналы имеют одинаковую длину.
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);

Многоячеечный поиск выполняется для того, чтобы идентифицировать идентичность ячейки каждого eNireB. Массив конфигураций rxcfg для eNeyB затем создается на основе обнаруженных идентификаторов соты и предположения, что конфигурация PRS была задана сигнализацией более высокого уровня и поэтому известна UE. Предполагается, что ряд других параметров физического уровня, таких как длина циклического префикса и дуплексный режим, известны и считаются равными для каждого eNireB. Для получения дополнительной информации об обнаружении этих параметров см. пример поиска ячеек, 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);
Время поступления сигналов из каждого eNireB устанавливается в UE путем корреляции входящего сигнала с локальным PRS, сгенерированным с идентификацией соты каждого eNireB. Следует отметить, что абсолютные времена прихода не могут быть использованы в UE для вычисления его положения, поскольку он не знает, как далеко находятся eNireB, только разность расстояний, заданная разницей времен прихода. Следовательно, пиковая корреляция для каждого eNireB используется в качестве оценки задержки для обеспечения возможности сравнения.
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

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

В этом примере используются эти вспомогательные функции.
3GPP TR 36.814 «Дальнейшие усовершенствования для аспектов физического уровня E-UTRA»