Индивидуальная настройка модели канала CDL с трассировкой лучей

В этом примере показано, как настроить параметры модели канала CDL при помощи выхода анализа трассировки лучей. Пример показывает как:

  • Задайте местоположение передатчика и приемника в 3D среде.

  • Используйте трассировку лучей, чтобы вычислить геометрические аспекты канала: количество лучей, углов, задержек и затуханий.

  • Сконфигурируйте модель канала CDL результатом анализа трассировки лучей.

  • Задайте антенные решетки канала с помощью Phased Array System Toolbox™.

  • Визуализируйте передачу и получите диаграммы направленности массивов на основе сингулярного разложения совершенной оценки канала.

Базовая станция и настройка UE

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

fc = 6e9;                             % carrier frequency (Hz)
bsPosition = [22.287495, 114.140706]; % lat, lon
bsAntSize = [8 8];                    % number of rows and columns in rectangular array (base station)
bsArrayOrientation = [-30 0].';       % azimuth (0 deg is East, 90 deg is North) and elevation (positive points upwards) in deg
uePosition = [22.287323,114.140859];  % lat, lon
ueAntSize = [2 2];                    % number of rows and columns in rectangular array (UE).
ueArrayOrientation = [180 45].';      % azimuth (0 deg is East, 90 deg is North) and elevation (positive points upwards)  in deg
reflectionsOrder = 1;                 % number of reflections for ray tracing analysis (0 for LOS)
 
% Bandwidth configuration, required to set the channel sampling rate and for perfect channel estimation
SCS = 15; % subcarrier spacing
NRB = 52; % number of resource blocks, 10 MHz bandwidth

Импортируйте и визуализируйте 3-D среду с созданиями для трассировки лучей

Средство просмотра Стартовой площадки с созданиями в Гонконге. Для получения дополнительной информации о osm файле, см. [1].

if exist('viewer','var') && isvalid(viewer) % viewer handle exists and viewer window is open
    viewer.clearMap();
else
    viewer = siteviewer("Basemap","openstreetmap","Buildings","hongkong.osm");    
end

Создайте базовую станцию и UE

Найдите базовую станцию и UE на карте.

bsSite = txsite("Name","Base station", ...
    "Latitude",bsPosition(1),"Longitude",bsPosition(2),...
    "AntennaAngle",bsArrayOrientation(1:2),...
    "AntennaHeight",4,...  % in m
    "TransmitterFrequency",fc);

ueSite = rxsite("Name","UE", ...
    "Latitude",uePosition(1),"Longitude",uePosition(2),...
    "AntennaHeight",1,... % in m
    "AntennaAngle",ueArrayOrientation(1:2));

Визуализируйте местоположение базовой станции и UE. Базовая станция сверх создания.

bsSite.show();
ueSite.show();

Анализ трассировки лучей

Выполните анализ трассировки лучей с помощью стрельбы и возврата лучей (SBR) метод. Метод SBR включает эффекты от поверхностных отражений и дифракций, но не включает эффекты от преломления или рассеивания.

pm = propagationModel("raytracing","Method","sbr","MaxNumReflections",reflectionsOrder);
rays = raytrace(bsSite,ueSite,pm,"Type","pathloss");

Отобразите лучи в Средстве просмотра Сайта.

plot(rays{1})

От полученных лучей получите времена прибытия, средних усилений пути и углов отъезда и прибытия. Для простоты нормируйте задержку распространения так, чтобы первый путь произошел во время 0 секунд, не соответствуя никакой задержке. Используйте потерю на пути, чтобы получить средние усиления пути.

pathToAs = [rays{1}.PropagationDelay]-min([rays{1}.PropagationDelay]);  % Time of arrival of each ray (normalized to 0 sec)
avgPathGains  = -[rays{1}.PathLoss];                                    % Average path gains of each ray
pathAoDs = [rays{1}.AngleOfDeparture];                                  % AoD of each ray
pathAoAs = [rays{1}.AngleOfArrival];                                    % AoA of each ray
isLOS = any([rays{1}.LineOfSight]);                                     % Line of sight flag

Настройте модель канала CDL

Сконфигурируйте модель канала CDL с информацией, сгенерированной анализом трассировки лучей. Установите DelayProfile свойство к 'Custom' задавать задержки пути, средние усиления пути и углы прибытия и отъезда (и в азимуте и в зените).

При конфигурировании модели канала учтите что:

  • Трассировщик лучей находит отдельные лучи между базовой станцией и UE, в то время как кластеры моделей канала CDL лучей, свойства которых определяются кластерным средним усилением пути (AveragePathGains), средние углы прибытия и отъезда (AnglesAoA, AnglesZoA, AnglesAoD, и AnglesZoD), и распространение лучей в кластере (AngleSpreads). Информация, полученная из анализа трассировки лучей для отдельных лучей, конфигурирует кластерные средние значения канала CDL.

  • Трассировщик лучей выполняет статический анализ, в то время как перемещение моделей UE канала CDL. Поэтому канал CDL вводит небольшое исчезновение.

  • Усиления пути, полученные из трассировки лучей, рассматриваются как средние усиления пути. Поэтому из-за исчезновения, мгновенные усиления пути к каналу будут отличаться от средних значений, но по долгим симуляциям их среднее значение будет совпадать с заданными средними усилениями пути при использовании изотропных антенн.

  • Канал CDL использует углы зенита, в то время как анализ трассировки лучей возвращает углы возвышения, поэтому необходимо преобразовать между двумя.

  • Если какой-либо из расчетных лучей является лучом угла обзора (LOS) (никакое отражение), установите HasLOSCluster Свойство канала CDL к true. Для случаев LOS модель CDL разделяет первый путь на два компонента, один являющийся LOS и другим наличием характеристики Релеевского замирания. Это приводит к объединенному Ricean, исчезающему характеристика. Поэтому в случаях LOS, когда вы задаете лучи N, пути к моделям N+1 канала CDL внутренне.

channel = nrCDLChannel;
channel.DelayProfile = 'Custom';
channel.PathDelays = pathToAs;
channel.AveragePathGains = avgPathGains;
channel.AnglesAoD = pathAoDs(1,:);       % azimuth of departure
channel.AnglesZoD = 90-pathAoDs(2,:);    % channel uses zenith angle, rays use elevation
channel.AnglesAoA = pathAoAs(1,:);       % azimuth of arrival
channel.AnglesZoA = 90-pathAoAs(2,:);    % channel uses zenith angle, rays use elevation
channel.HasLOSCluster = isLOS;
channel.CarrierFrequency = fc;
channel.NormalizeChannelOutputs = false; % do not normalize by the number of receive antennas, this would change the receive power
channel.NormalizePathGains = false;      % set to false to retain the path gains

Задайте антенные решетки канала при помощи объектов Phased Array System Toolbox массивов. Свойства ориентации массивов CDL образовывают канал азимут использования модели и downtilt в то время как ueArrayOrientation и bsArrayOrientation объекты используют азимут и вертикальное изменение. Поэтому преобразуйте вертикальное изменение в downtilt путем изменения знака.

c = physconst('LightSpeed');
lambda = c/fc;

% UE array (single panel)
ueArray = phased.NRRectangularPanelArray('Size',[ueAntSize(1:2) 1 1],'Spacing', [0.5*lambda*[1 1] 1 1]);
ueArray.ElementSet = {phased.IsotropicAntennaElement};   % isotropic antenna element
channel.ReceiveAntennaArray = ueArray;
channel.ReceiveArrayOrientation = [ueArrayOrientation(1); (-1)*ueArrayOrientation(2); 0];  % the (-1) converts elevation to downtilt

% Base station array (single panel)
bsArray = phased.NRRectangularPanelArray('Size',[bsAntSize(1:2) 1 1],'Spacing', [0.5*lambda*[1 1] 1 1]);
bsArray.ElementSet = {phased.NRAntennaElement('PolarizationAngle',-45) phased.NRAntennaElement('PolarizationAngle',45)}; % cross polarized elements
channel.TransmitAntennaArray = bsArray;
channel.TransmitArrayOrientation = [bsArrayOrientation(1); (-1)*bsArrayOrientation(2); 0];   % the (-1) converts elevation to downtilt

Установите частоту дискретизации канала

Сигнал, проходящий канал, определяет частоту дискретизации канала. Рассмотрите сигнал с расстоянием между поднесущими 15 кГц и 52 блоками ресурса (RBS), эквивалентный полосе пропускания 10 МГц. Чтобы получить частоту дискретизации, вызовите nrOFDMInfo функция.

ofdmInfo = nrOFDMInfo(NRB,SCS);

channel.SampleRate = ofdmInfo.SampleRate;

Оценка канала

Для простоты этот пример принимает совершенную оценку канала. Установка ChannelFiltering свойство к false позволяет вам получать усиления пути к каналу, не отправляя сигнал через канал.

channel.ChannelFiltering = false;
[pathGains,sampleTimes] = channel();

Постройте усиления пути, возвращенные каналом. Сравните результаты с заданными средними усилениями пути, полученными из значений затухания луча.

  • Для случаев LOS, потому что первые два пути соответствуют первому лучу, первые два пути должны быть добавлены вместе.

  • Модель канала CDL является статистической моделью канала и рассматривает движение UE. Поэтому возвращенные усиления пути являются мгновенными усилениями. Усиления пути от анализа трассировки лучей интерпретированы, когда средний путь получает моделью канала.

  • Мгновенные усиления пути, возвращенные моделью канала, включают усиление антенного элемента в направлении каждого луча. Пользовательские усиления пути, полученные из анализа трассировки лучей, не включают усиление антенного элемента. Поэтому в среднем значении, усиления пути к каналу совпадают со средними усилениями только для изотропных антенных элементов.

pg=permute(pathGains,[2 1 3 4]); % first dimension is the number of paths
if isLOS
    % in LOS cases sum the first to paths, they correspond to the LOS ray
    pg = [sum(pg(1:2,:,:,:)); pg(3:end,:,:,:)];
end
pg = abs(pg).^2;
plot(pow2db(pg(:,1,1,1)),'o-.');hold on
plot(avgPathGains,'x-.');hold off
legend("Instantaneous (1^{st} tx - 1^{st} rx antenna)","Average (from ray tracing)")
xlabel("Path number"); ylabel("Gain (dB)")
title('Path gains')

Получите совершенную оценку канала для паза 0.

pathFilters = getPathFilters(channel);
nSlot = 0;
[offset,~] = nrPerfectTimingEstimate(pathGains,pathFilters);
hest = nrPerfectChannelEstimate(pathGains,pathFilters,NRB,SCS,nSlot,offset,sampleTimes);

Постройте ответ канала вовремя и частоту между первой передачей, и первые получают антенну. Этот график показывает, как канал ведет себя вовремя и частота. Для низких эффектов Доплера канал не изменяется очень в период наблюдения одного паза.

surf(pow2db(abs(hest(:,:,1,1)).^2));
shading('flat');
xlabel('OFDM Symbols');ylabel('Subcarriers');zlabel('Magnitude Squared (dB)');
title('Channel Magnitude Response (1^{st} tx - 1^{st} rx antenna)');

Получите веса Beamforming

Вычислите beamforming веса с помощью сингулярного разложения (SVD). Примите 1 слой. getBeamformingWeights функциональные средние значения условия канала по многим блокам ресурса, начинающим при смещении с ребра полосы (первая поднесущая), включая поддиапазон beamforming.

nLayers = 1;
scOffset = 0;   % no offset
noRBs = 1;      % average channel conditions over 1 RB to calculate beamforming weights
[wbs,wue,~] = getBeamformingWeights(hest,nLayers,scOffset,noRBs);

Постройте диаграммы направленности

Постройте диаграммы направленности, полученные для UE и базовой станции.

% Plot UE radiation pattern
ueSite.Antenna = clone(channel.ReceiveAntennaArray); % need a clone, otherwise setting the Taper weights would affect the channel array
ueSite.Antenna.Taper = wue;
pattern(ueSite,fc,"Size",4);

% Plot BS radiation pattern
bsSite.Antenna = clone(channel.TransmitAntennaArray); % need a clone, otherwise setting the Taper weights would affect the channel array
bsSite.Antenna.Taper = wbs;
pattern(bsSite,fc,"Size",5);

Ссылки

[1] osm файл загружается с https://www.openstreetmap.org, который обеспечивает доступ к полученным толпой данным о карте во всем мире. Данные лицензируются под Открытыми Данными палата общин Открытая Лицензия Базы данных (ODbL), https://opendatacommons.org/licenses/odbl/.

Локальные функции

function [wtx,wrx,D] = getBeamformingWeights(hEst,nLayers,scOffset,noRBs)
% Get beamforming weights given a channel matrix hEst and the number of
% layers nLayers. One set of weights is provided for the whole bandwidth.
% The beamforming weights are calculated using singular value (SVD)
% decomposition.
%
% Only part of the channel estimate is used to get the weights, this is
% indicated by an offset SCOFFSET (offset from the first subcarrier) and a
% width in RBs (NORBS).

% Average channel estimate
[~,~,R,P] = size(hEst);
%H = permute(mean(reshape(hEst,[],R,P)),[2 3 1]);

scNo = scOffset+1;
hEst = hEst(scNo:scNo+(12*noRBs-1),:,:,:);
H = permute(mean(reshape(hEst,[],R,P)),[2 3 1]);

% SVD decomposition
[U,D,V] = svd(H);
wtx = V(:,1:nLayers).';
wrx = U(:,1:nLayers)';
end
Для просмотра документации необходимо авторизоваться на сайте