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

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

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

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

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

  • Задайте канальные антенные решетки, используя Toolbox™ Phased Array System.

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

Базовая станция и 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 окружения с помощью созданий для трассировки лучей

Запуск 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

Задайте антенные решетки канала при помощи объектов массива Phased Array System Toolbox. Свойства ориентации массива модели канала 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. The 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
Для просмотра документации необходимо авторизоваться на сайте