В этом примере показано, как настроить параметры модели канала CDL при помощи выхода анализа трассировки лучей. Пример показывает как:
Задайте местоположение передатчика и приемника в 3D среде.
Используйте трассировку лучей, чтобы вычислить геометрические аспекты канала: количество лучей, углов, задержек и затуханий.
Сконфигурируйте модель канала CDL результатом анализа трассировки лучей.
Задайте антенные решетки канала с помощью Phased Array System Toolbox™.
Визуализируйте передачу и получите диаграммы направленности массивов на основе сингулярного разложения совершенной оценки канала.
Пример принимает, что и базовая станция и 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
Средство просмотра Стартовой площадки с созданиями в Гонконге. Для получения дополнительной информации о 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 на карте.
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 с информацией, сгенерированной анализом трассировки лучей. Установите 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 веса с помощью сингулярного разложения (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