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