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