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