В этом примере показано, как выполнить трассировку лучей во внутренней среде и использовать результаты создать модель канала для симуляции уровня ссылки с методом 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 форматов карты в разнообразии 3-D программного обеспечения.
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]);
Используйте siteviewer
функция с файлом карты, заданным, чтобы просмотреть сцену в 3-D в Средстве просмотра Сайта. Используйте show
функция, чтобы визуализировать передатчики и приемники.
siteviewer("SceneModel",mapFileName); show(tx,'ShowAntennaHeight', false) show(rx,'ShowAntennaHeight', false)
Панорамирование путем щелчка левой кнопкой, масштабируйте путем щелчка правой кнопкой или при помощи колесика прокрутки и вращайте визуализацию путем нажатия средней кнопки и перетаскивания или путем нажатия Ctrl и щелчка левой кнопкой и перетаскивания.
Выполните анализ трассировки лучей между сайтами передатчика и приемника и возвратите comm.Ray
объекты, с помощью стрельбы и возврата лучей (SBR) метод. Задайте поверхностный материал сцены как древесина и ищите лучи максимум с 2 отражениями. Метод SBR поддерживает до 10 порядков отражений.
pm = propagationModel("raytracing", ... "CoordinateSystem","cartesian", ... "Method","sbr", ... "AngularSeparation","low", ... "MaxNumReflections",2, ... "SurfaceMaterial","wood"); rays = raytrace(tx,rx,pm);
Извлечение вычисленные лучи от массива ячеек возвращается.
rays = rays{1,1};
Исследуйте результаты трассировки лучей путем рассмотрения количества отражений, расстояния распространения и значения потери на пути каждого луча. Существует 25 найденных лучей (один луч угла обзора, 6 лучей с одним отражением и 18 лучей с двумя отражениями).
[rays.NumInteractions]
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.2898 91.2969 94.8444 96.4455 96.4796
Используйте plot
функционируйте, чтобы построить лучи в 3-D сцене в Средстве просмотра Сайта. Каждый луч окрашен на основе его значения потери на пути. Нажмите на луч, чтобы просмотреть информацию о том луче.
plot(rays,'Colormap',jet,'ColorLimits',[50, 95])
Создайте детерминированную многопутевую модель канала использование вышеупомянутых результатов трассировки лучей. Задайте мгновенную скорость приемника, чтобы отразить типичную низкую мобильность устройства во внутренней среде.
rtChan = comm.RayTracingChannel(rays,tx,rx); rtChan.SampleRate = 300e6; rtChan.ReceiverVirtualVelocity = [0.1; 0.1; 0]
rtChan = comm.RayTracingChannel with properties: SampleRate: 300000000 PropagationRays: [1×25 comm.Ray] MinimizePropagationDelay: true TransmitArray: [1×1 arrayConfig] TransmitArrayOrientationAxes: [3×3 double] ReceiveArray: [1×1 arrayConfig] ReceiveArrayOrientationAxes: [3×3 double] ReceiverVirtualVelocity: [3×1 double] NormalizeImpulseResponses: true NormalizeChannelOutputs: true ChannelFiltering: true
Используйте showProfile
возразите функции, чтобы визуализировать профиль задержки степени (PDP), угол отъезда (AoD) и угол прибытия (AoA) лучей в канале. В визуализации PDP учел передачу и получает усиления диаграммы направленности антенной решетки в дополнение к потере на пути для каждого луча.
showProfile(rtChan);
Используйте info
возразите функции, чтобы получить количество передачи и получить элементы.
rtChanInfo = info(rtChan)
rtChanInfo = struct with fields:
CarrierFrequency: 5.8000e+09
CoordinateSystem: 'Cartesian'
TransmitArrayLocation: [3×1 double]
ReceiveArrayLocation: [3×1 double]
NumTransmitElements: 4
NumReceiveElements: 16
ChannelFilterDelay: 7
ChannelFilterCoefficients: [25×21 double]
NumSamplesProcessed: 0
LastFrameTime: 0
numTx = rtChanInfo.NumTransmitElements; numRx = rtChanInfo.NumReceiveElements;
Сконфигурируйте линию связи, которая использует кодирование LDPC, 64-QAM и OFDM с 256 поднесущими. Задайте 4 кодовых комбинации LDPC на систему координат, которая приводит к 50 символам OFDM на систему координат.
% Create LDPC encoder and decoder configuration objects cfgLDPCEnc = ldpcEncoderConfig(dvbs2ldpc(1/2)); cfgLDPCDec = ldpcDecoderConfig(cfgLDPCEnc); numCodewordsPerFrame = 4; codewordLen = cfgLDPCEnc.BlockLength; % Parameters for QAM modulation per subcarrier bitsPerCarrier = 6; modOrder = 2^bitsPerCarrier; codeRate = cfgLDPCEnc.CodeRate; % 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,cfgLDPCEnc,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,cfgLDPCDec,modOrder,ofdmDemod,snr);
Вычислите BER:
ber = errRate(srcBits,double(decBits)); disp(ber(1));
0.0140
Чтобы построить кривую BER против области значений значений EbNo, используйте функцию helperIndoorRayTracingSimulationLoop, чтобы повторить вышеупомянутую одну обработку системы координат максимум для 300 систем координат в каждом значении EbNo.
EbNoRange = 27:36; helperIndoorRayTracingSimulationLoop( ... cfgLDPCEnc,cfgLDPCDec,ofdmMod,ofdmDemod,rtChan,errRate, ... modOrder,numCodewordsPerFrame,EbNoRange);
То В этом примере показано, как создать детерминированную модель канала, использующую трассировку лучей, приводит к внутреннему конференц-залу. Симуляции уровня ссылки с помощью LDPC и методов MIMO-OFDM выполнялись для модели канала, и результаты BER были построены.
Дальнейшее исследование включает, но не ограничивает:
Различные 3-D карты и/или поверхностные материалы
Различные положения сайта передатчика и/или приемника
Различная передача и/или получает технические требования антенной решетки
Различная передача и/или получает ориентации антенной решетки
Более высокое количество отражений для метода трассировки лучей SBR
Передайте и/или получите 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.