В этом примере показано, как выполнить трассировку лучей во внутренней среде и использовать результаты создать модель канала для симуляции уровня ссылки с методом MIMO-OFDM.
Трассировка лучей [1] стала популярным методом для анализа радиочастоты (RF), планирования сайта, моделирования канала и анализа уровня ссылки из-за тренда для современных систем связи, чтобы действовать на частотах RF в десятках области значений GHz. В отличие от стохастических моделей, метод трассировки лучей является 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;
Антенна передачи является универсальной линейной матрицей (ULA) с 4 элементами, которая имеет дважды длины волны между элементами. Получить антенна 4x4 универсальный прямоугольный массив (URA), который имеет одну длину волны между элементами. Обе антенны заданы 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
объекты. Задайте поверхностный материал сцены как древесина и ищите лучи максимум с 2 отражениями.
pm = propagationModel("raytracing-image-method", ... "CoordinateSystem","cartesian", ... "SurfaceMaterial","wood", ... "MaxNumReflections",2); rays = raytrace(tx,rx,pm,'Map',mapFileName);
Извлечение вычисленные лучи от массива ячеек возвращается.
rays = rays{1,1};
Исследуйте результаты трассировки лучей путем рассмотрения количества отражений, расстояния распространения и значения пути потерь каждого луча. Существует 24 найденные луча (один луч угла обзора, шесть лучей с одним отражением и 17 лучей с двумя отражениями).
[rays.NumReflections]
ans = 1×24
0 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[rays.PropagationDistance]
ans = 1×24
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.9869 6.7170 8.0161 8.0460
[rays.PathLoss]
ans = 1×24
56.5350 72.1644 70.1109 72.3173 73.3105 76.4133 76.4510 81.5339 83.8326 81.5712 83.6978 83.7685 85.7742 85.8555 83.7906 86.0448 91.6849 91.7717 86.5221 86.5560 91.2916 94.8430 96.4455 96.4797
Пользователь 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: [1x24 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: [24x21 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).
cd = comm.ConstellationDiagram( ... "ReferenceConstellation", qammod(0:modOrder-1, modOrder, 'UnitAveragePower', true), ... "XLimits", [-2 2], ... "YLimits", [-2 2]); 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 (абсолютное значение).
cd(eqSym(:));
ber = errRate(srcBits, double(decBits)); disp(ber(1));
0.0140
Чтобы построить кривую BER против области значений значений EbNo, используйте функцию helperIndoorRayTracingSimulationLoop, чтобы повторить вышеупомянутую одну обработку системы координат максимум для 300 систем координат в каждом значении EbNo.
EbNoRange = 27:36;
helperIndoorRayTracingSimulationLoop(ldpcEnc, ldpcDec, ofdmMod, ofdmDemod, rtChan, errRate, ...
modOrder, numCodewordsPerFrame, EbNoRange);
То В этом примере показано, как создать детерминированную модель канала, использующую трассировку лучей, приводит к внутреннему конференц-залу. Симуляции уровня ссылки с помощью LDPC и методов MIMO-OFDM выполнялись для модели канала, и результаты BER были построены.
Дальнейшее исследование включает, но не ограничивает:
Различные 3-D карты и/или поверхностные материалы
Различные положения сайта передатчика и/или приемника
Различная передача и/или получает технические требования антенной решетки
Различная передача и/или получает ориентации антенной решетки
Передайте и/или получите beamforming
Этот пример использует следующие функции помощника:
[1] Цз. Юнь и М. Ф. Искандер, “Трассировка лучей для радио-моделирования распространения: Принципы и приложения”, IEEE доступ, издание 3, стр 1089-1100, июль 2015.
[2] 3GPP TR 38.901. Исследование модели канала для частот от 0,5 до 100 ГГц. Проект Партнерства третьего поколения; Сеть радиодоступа Technical Specification Group.
[3] Малцев, A., и др. Модели Канала для 802.11ay. IEEE 802.11-15/1150r9, март 2017.