В этом примере показано, как выполнять трассировку лучей в помещении и использовать результаты для построения модели канала для моделирования уровня линии связи с помощью метода MIMO-OFDM.
Трассировка лучей [1] стала популярной методикой радиочастотного (RF) анализа, планирования площадки, моделирования каналов и анализа уровня линии связи благодаря тенденции работы современных систем связи на радиочастотных частотах в диапазоне десятков ГГц. В отличие от стохастических моделей, метод трассировки лучей является специфичным 3-D окружающей среды и участков приемопередатчика и может иметь высокую чувствительность в окружающей среде. Без простой формулы для вычисления потерь на основе расстояния, метод трассировки лучей основан на числовом моделировании и обычно является менее дорогостоящим, чем полевые измерения. Результаты трассировки лучей можно использовать для построения моделей многолучевых каналов для систем связи. Например, модель канала на основе трассировки лучей была определена в разделе 8 TR 38.901 [2] для 5G и в IEEE 802.11ay для WLAN [3].
Этот пример начинается с анализа трассировки лучей между одним узлом передатчика и одним узлом приемника в 3-D конференц-зале. Вычисленные лучи используются для построения детерминированной модели канала, которая специфична для двух участков. Модель канала используется при моделировании линии связи MIMO-OFDM. Эта диаграмма характеризует канал связи.

Трассировка лучей выполняется в помещении. Те же методы трассировки лучей могут быть применены для построения моделей каналов для внутренних и наружных сред. Для получения информации об анализе трассировки лучей в городских условиях вне помещений см. пример «Анализ городской связи и покрытия» с использованием трассировки лучей.
Укажите карту 3-D в помещении в формате STL для небольшого конференц-зала с одним столом и четырьмя стульями. Формат STL является одним из наиболее распространенных форматов карт 3-D и часто может быть преобразован из других форматов карт 3-D в различное программное обеспечение 3D.
mapFileName = "conferenceroom.stl";Определение несущей частоты при 5,8 ГГц и расчет длины волны
fc = 5.8e9;
lambda = physconst('lightspeed')/fc;Передающая антенна представляет собой 4-элементную однородную линейную решетку (ULA), которая имеет удвоенную длину волны между элементами. Приемная антенна представляет собой равномерную прямоугольную решетку (URA) 4 4, которая имеет одну длину волны между элементами. Обе антенны определяются 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]);
Используйте функцию helperVisualityScription для визуализации 3-D сценария с помощью MATLAB™ функций. Участки передатчика и приемника окрашены в красный и синий цвета соответственно.
helperVisualizeScenario(mapFileName,tx,rx);

Выполните анализ трассировки лучей между площадками передатчика и приемника и верните comm.Ray объекты, используя метод съемки и вышибания лучей (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
Используйте функцию helperVisualityRays, чтобы добавить вычисленные лучи в ранее построенную сцену 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 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 и выведите из него значение SNR для AWGN.
EbNo = 30; % in dB bitsPerSymbol = bitsPerCarrier*codeRate; snr = 10^(EbNo/10) * bitsPerSymbol; % Linear
Функция helperIndedRayTr.WaveformGen генерирует сигнал, состоящий из одного кадра в месте передатчика, путем выполнения следующих шагов:
Кодировать произвольно сгенерированные биты с помощью 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');Функция helperIndingRayTrexRxProcessing декодирует сигнал с нарушением канала в приемном узле, выполняя следующие шаги:
Совершенная оценка канала с использованием выходного сигнала импульсной характеристики канала (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
Для построения графика кривой BER в соответствии с диапазоном значений EbNo используйте функцию helperIndedRayTrelingLoop, чтобы повторить вышеупомянутую обработку одного кадра для до 300 кадров при каждом значении EbNo.
EbNoRange = 27:36;
helperIndoorRayTracingSimulationLoop(ldpcEnc, ldpcDec, ofdmMod, ofdmDemod, rtChan, errRate, ...
modOrder, numCodewordsPerFrame, EbNoRange);
В этом примере показано, как построить детерминированную модель канала с использованием результатов трассировки лучей в помещении конференц-зала. Для модели канала выполняли моделирование на уровне линии связи с использованием методов LDPC и MIMO-OFDM и строили график результатов BER.
Дальнейшие исследования включают, но не ограничивают:
Различные карты 3-D и/или поверхностные материалы
Различные позиции передатчика и/или узла приемника
Различные характеристики антенной решетки передачи и/или приема
Различные ориентации антенной решетки передачи и/или приема
Большее количество отражений для метода трассировки лучей SBR
Передача и/или формирование луча приема
В этом примере используются следующие вспомогательные функции:
[1] З. Юн и М. Ф. Искандер, «Трассировка лучей для моделирования распространения радио: принципы и применения», IEEE Access, том 3, стр. 1089-1100, июль 2015.
[2] 3GPP TR 38.901. Исследование модели канала для частот от 0,5 до 100 ГГц. проект партнерства 3-го поколения; Техническая спецификация на сеть радиодоступа группы.
[3] Мальцев, А., и др. Модели каналов для 802.11ay. IEEE 802.11-15/1150r9, март 2017.