Этот пример показывает, как выполнить трассировку лучей в комнатном окружении и использовать результаты для создания модели канала для симуляции уровня ссылки с помощью метода MIMO-OFDM.
Трассировка лучей [1] стала популярным методом радиочастотного (РФ) анализа, планирования участка, моделирования канала и анализа уровня ссылки из-за тренда на работу современных коммуникационных систем на частотах РФ в десятках областях значений ГГц. В отличие от стохастических моделей, метод трассировки лучей является специфическим 3-D среды и приемопередатчиков и может иметь высокую чувствительность в окружающем окружении. Без простой формулы для вычисления потерь пути на расстоянии, метод трассировки лучей основывается на числовых симуляциях и обычно менее затратен, чем измерения поля. Результаты трассировки лучей могут использоваться, чтобы создать модели многолучевых каналов для систем связи. Для примера модель канала, основанная на трассировке лучей, была указана в разделе 8 TR 38.901 [2] для 5G и в IEEE 802.11ay для WLAN [3].
Этот пример начинается с анализа трассировки лучей между одной площадкой передатчика и одной площадкой приемника в 3-D конференц-зале. Вычисленные лучи используются, чтобы создать детерминированную модель канала, которая специфична для этих двух участков. Модель канала используется в симуляции ссылки связи MIMO-OFDM. Эта схема характеризует ссылку связи.
Трассировка лучей выполняется в закрытом окружении. Те же методы трассировки лучей могут быть применены для создания моделей каналов для внутреннего или наружного окружения. Для анализа трассировки лучей в городских условиях на открытом воздухе смотрите Urban Link и анализ покрытия с помощью примера Ray Tracing.
Укажите карту 3-D в формате STL для небольшого конференц-зала с одной таблицей и четырьмя стульями. Формат STL является одним из наиболее распространенных форматов карты 3-D и часто может быть преобразован из других форматов карты 3-D в различных 3D программах.
mapFileName = "conferenceroom.stl";
Задайте несущую частоту на 5,8 ГГц и вычислите длину волны
fc = 5.8e9;
lambda = physconst('lightspeed')/fc;
Передающая антенна является 4-элементным равномерным линейным массивом (ULA), которая имеет двойную длину волны между элементами. Приемная антенна является однородным прямоугольным массивом (URA) 4x4, которая имеет одну длину волны между элементами. Обе антенны заданы как arrayConfig
объект.
txArray = arrayConfig("Size",[4 1],'ElementSpacing',2*lambda); rxArray = arrayConfig("Size",[4 4],'ElementSpacing',lambda);
Используйте функцию helperViewArray, чтобы визуализировать конфигурации ULA и URA, где антенные элементы пронумерованы для входных/выходных потоков.
helperViewArray(txArray);
helperViewArray(rxArray);
Укажите узел передатчика вблизи верхнего угла комнаты, который может быть точкой доступа Wi-Fi. Укажите сайт приемника чуть выше таблицы и перед стулом, чтобы представлять ноутбук или мобильное устройство.
tx = txsite("cartesian", ... "Antenna",txArray, ... "AntennaPosition",[-1.46; -1.42; 2.1], ... 'TransmitterFrequency',5.8e9); rx = rxsite("cartesian", ... "Antenna",rxArray, ... "AntennaPosition",[.3; .3; .85], ... "AntennaAngle",[0;90]);
Используйте функцию helperVisualizeScenario, чтобы визуализировать сценарий 3-D с помощью функций MATLAB™. Сайты передатчика и приемника окрашены в красный и синий цвета соответственно.
helperVisualizeScenario(mapFileName,tx,rx);
Выполните анализ трассировки лучей между сайтами передатчика и приемника и верните comm.Ray
объекты, с использованием метода съёмки и bounicng-лучей (SBR). Укажите поверхностный материал сцены как древесину и выполните поиск лучей с 2 отражениями. Метод SBR поддерживает до 10 порядков отражений.
pm = propagationModel("raytracing", ... "CoordinateSystem","cartesian", ... "Method","sbr", ... "AngularSeparation","low", ... "MaxNumReflections",2, ... "SurfaceMaterial","wood"); rays = raytrace(tx,rx,pm,'Map',mapFileName);
Извлеките вычисленные лучи из возврата массива ячеек.
rays = rays{1,1};
Исследуйте результаты трассировки лучей, посмотрев на количество отражений, расстояние распространения и значение потерь пути каждого луча. Найдено 25 лучей (один лучик видимости, 6 лучей с одним отражением и 18 лучей с двумя отражениями).
[rays.NumReflections]
ans = 1×25
0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[rays.PropagationDistance]
ans = 1×25
2.7602 2.8118 2.8487 2.8626 3.2029 4.6513 4.6719 2.8988 2.9125 2.9481 3.2475 3.2916 3.3243 4.6821 4.7247 4.7331 4.7433 4.7936 4.9269 4.9464 5.9868 5.9868 6.7170 8.0161 8.0460
[rays.PathLoss]
ans = 1×25
56.5350 72.1633 70.0647 72.3180 73.3102 76.4133 76.4508 81.5418 83.8254 81.5531 83.6891 83.7784 85.7801 85.8271 83.7662 86.0508 91.6822 91.7764 86.5438 86.5283 91.2897 91.2969 94.8444 96.4455 96.4796
Используйте функцию helperVisualizeRays, чтобы добавить вычисленные лучи к ранее нанесенной 3-D сцене. Каждый луч окрашен в зависимости от значения потерь пути.
helperVisualizeRays(rays);
Создайте детерминированную модель многолучевого канала, используя вышеуказанные результаты трассировки лучей. Задайте мгновенную скорость приемника, чтобы отразить типичную низкую мобильность устройства в закрытом окружении.
rtChan = comm.RayTracingChannel(rays, tx, rx); rtChan.SampleRate = 300e6; rtChan.ReceiverVirtualVelocity = [0.1; 0.1; 0]
rtChan = comm.RayTracingChannel with properties: SampleRate: 300000000 PropagationRays: [1x25 comm.Ray] TransmitArray: [1x1 arrayConfig] TransmitArrayOrientationAxes: [3x3 double] ReceiveArray: [1x1 arrayConfig] ReceiveArrayOrientationAxes: [3x3 double] ReceiverVirtualVelocity: [3x1 double] NormalizeImpulseResponses: true NormalizeChannelOutputs: true
Ue the showProfile
функция объекта для визуализации профиля задержки степени (PDP), угла отхода (AoD) и угла прихода (AoA) лучей в канале. В визуализации PDP принял во внимание усиления шаблона передающих и приёмных массивов в дополнение к потерям пути для каждого луча.
showProfile(rtChan);
Используйте info
функция объекта для получения количества передающих и приемных элементов.
rtChanInfo = info(rtChan)
rtChanInfo = struct with fields:
CarrierFrequency: 5.8000e+09
CoordinateSystem: 'Cartesian'
TransmitArrayLocation: [3x1 double]
ReceiveArrayLocation: [3x1 double]
NumTransmitElements: 4
NumReceiveElements: 16
ChannelFilterDelay: 7
ChannelFilterCoefficients: [25x21 double]
NumSamplesProcessed: 0
numTx = rtChanInfo.NumTransmitElements; numRx = rtChanInfo.NumReceiveElements;
Сконфигурируйте ссылку связи, который использует кодирование LDPC, 64-QAM и OFDM с 256 поднесущими. Задайте 4 кодовых слова LDPC на систему координат, что приводит к 50 символам OFDM на систему координат.
% Create LDPC encoder and decoder objects ldpcEnc = comm.LDPCEncoder; ldpcDec = comm.LDPCDecoder; numCodewordsPerFrame = 4; codewordLen = size(ldpcEnc.ParityCheckMatrix, 2); % Parameters for QAM modulation per subcarrier bitsPerCarrier = 6; modOrder = 2^bitsPerCarrier; codeRate = size(ldpcEnc.ParityCheckMatrix, 1)/size(ldpcEnc.ParityCheckMatrix, 2); % Create OFDM modulator and demodulator objects fftLen = 256; cpLen = fftLen/4; numGuardBandCarriers = [9; 8]; pilotCarrierIdx = [19:10:119, 139:10:239]'; numDataCarriers = fftLen - sum(numGuardBandCarriers) - length(pilotCarrierIdx) - 1; numOFDMSymbols = numCodewordsPerFrame*codewordLen/bitsPerCarrier/numDataCarriers/numTx; ofdmMod = comm.OFDMModulator( ... "FFTLength", fftLen, .... "NumGuardBandCarriers", numGuardBandCarriers, ... "InsertDCNull", true, ... "PilotInputPort", true, ... "PilotCarrierIndices", pilotCarrierIdx, ... "CyclicPrefixLength", cpLen, ... "NumSymbols", numOFDMSymbols, ... "NumTransmitAntennas", numTx); ofdmDemod = comm.OFDMDemodulator(ofdmMod); ofdmDemod.NumReceiveAntennas = numRx;
Создайте объект вычисления частоты ошибок, чтобы вычислить вероятность битовой ошибки (BER).
errRate = comm.ErrorRate;
Присвойте значение Eb/No и выведите из него значение ОСШ для AWGN.
EbNo = 30; % in dB bitsPerSymbol = bitsPerCarrier*codeRate; snr = 10^(EbNo/10) * bitsPerSymbol; % Linear
Функция helperIndoorRayTracingWaveformGen генерирует форму волны, состоящую из одной системы координат на сайте передатчика, путем выполнения следующих шагов:
Закодируйте случайным образом сгенерированные биты LDPC
Модулируйте закодированные биты по 64-QAM
Примените OFDM модуляцию, чтобы преобразовать сигналы из частотного диапазона во временной интервал
rng(100); % Set RNG for repeatability
[txWave, srcBits] = helperIndoorRayTracingWaveformGen(numCodewordsPerFrame, ldpcEnc, modOrder, ofdmMod);
Передайте форму волны через модель канала трассировки лучей и добавьте белый шум. Для расчета задержки фильтрации канала добавьте дополнительный нулевой символ OFDM к концу формы волны.
chanIn = [txWave; zeros(fftLen + cpLen, numTx)];
[chanOut, CIR] = rtChan(chanIn);
rxWave = awgn(chanOut, snr, numTx/numRx, 'linear');
Функция helperIndoorRayTracingRxProcessing декодирует ослабленную каналом форму волны в узле приемника путем выполнения следующих шагов:
Совершенная оценка канала с использованием выхода импульсной характеристики канала (CIR) и коэффициентов фильтра канала от info
объекта канала способ.
Демодуляция OFDM для возврата сигналов в частотный диапазон
Эквализация символов на каждой поднесущей
Мягкая 64-QAM демодуляция для получения LLR
Декодирование LDPC
[decBits, eqSym] = helperIndoorRayTracingRxProcessing(rxWave, CIR, rtChanInfo, ldpcDec, modOrder, ofdmDemod, snr);
Вычислите BER:
ber = errRate(srcBits, double(decBits)); disp(ber(1));
0.0140
EbNoRange = 27:36;
helperIndoorRayTracingSimulationLoop(ldpcEnc, ldpcDec, ofdmMod, ofdmDemod, rtChan, errRate, ...
modOrder, numCodewordsPerFrame, EbNoRange);
Этот пример показывает, как создать детерминированную модель канала с использованием результатов трассировки лучей в закрытом конференц-зале. Для модели канала были выполнены симуляции канального уровня с использованием LDPC и MIMO-OFDM методов, и были построены результаты BER.
Дальнейшие исследования включают, но не ограничиваются:
Различные карты 3-D и/или поверхностные материалы
Различные положения на площадке передатчика и/или приемника
Различные спецификации передающей и/или приёмной антенной решетки
Различные ориентации передающей и/или приёмной антенной решетки
Большее количество отражений для метода трассировки лучей SBR
Передайте и/или принимайте формирование луча
В этом примере используются следующие вспомогательные функции:
[1] Z. Yun, and M. F. Iskander, «Ray tracing for radio propagation modeling: Principles and applications», IEEE Access, vol. 3, pp. 1089-1100, Jul. 2015.
[2] 3GPP TR 38.901. Исследование модели канала для частот от 0,5 до 100 ГГц. Проект Партнерства 3-ьей генерации; Группа технических спецификаций Радиосеть доступ.
[3] Мальцев, А., и др. Модели каналов для 802.11ay. IEEE 802.11-15/1150r9, март 2017.