Этот пример показов, как использовать подход позиционирования временного Различия прибытия (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});
Положения 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
Используя известные позиции 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
Используя время прибытия, временные различия прибытия между каждой парой 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);
Этот пример использует эти вспомогательные функции.
3GPP TR 36.814 «Дальнейшие достижения в аспектах физического слоя E-UTRA»