exponenta event banner

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

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

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

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

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

  • Укажите антенные решетки каналов с помощью Toolbox™ системы фазированной решетки.

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

Конфигурация базовой станции и UE

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

fc = 28e9;                            % 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 со зданиями для трассировки лучей

Launch Site Viewer со зданиями в Гонконге. Для получения дополнительной информации о файле 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();

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

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

rays = raytrace(bsSite,ueSite,"NumReflections",0:reflectionsOrder,"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.

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

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

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

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

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

Задайте антенные решетки каналов с помощью объектов панели инструментов системы фазированной решетки. Свойства ориентации массива модели канала CDL используют азимут и нисходящий наклон, в то время как ueArrayOrientation и bsArrayOrientation объекты используют азимут и отметку. Поэтому преобразуйте отметку в нижний угол, изменив знак.

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

% UE array
ueArray = phased.URA('Size',ueAntSize(1:2),'ElementSpacing', 0.5*lambda*[1 1]);            % isotropic element by default
channel.ReceiveAntennaArray = ueArray;
channel.ReceiveArrayOrientation = [ueArrayOrientation(1); (-1)*ueArrayOrientation(2); 0];  % the (-1) converts elevation to downtilt

% Base station array
bsArray = phased.URA('Size',bsAntSize(1:2),'ElementSpacing', 0.5*lambda*[1 1],'Element',phased.NRAntennaElement);
channel.TransmitAntennaArray = bsArray;
channel.TransmitArrayOrientation = [bsArrayOrientation(1); (-1)*bsArrayOrientation(2); 0];   % the (-1) converts elevation to downtilt

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

Сигнал, проходящий через канал, определяет частоту дискретизации канала. Рассмотрим сигнал с интервалом между поднесущими 15 кГц и 52 ресурсными блоками (RB), эквивалентным полосе пропускания 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)');

Получение весов для формирования луча

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

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, который обеспечивает доступ к данным карты, полученным от толпы, по всему миру. Данные лицензированы по лицензии Open Data Commons Open Database License (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