Внутренняя Линия связи MIMO-OFDM с помощью Трассировки лучей

В этом примере показано, как выполнить трассировку лучей во внутренней среде и использовать результаты создать модель канала для симуляции уровня ссылки с методом 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 внутренний сценарий

Задайте внутреннюю 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 генерирует форму волны, состоящую из одной системы координат в ретрансляторе путем выполнения этих следующих шагов:

  1. Закодируйте случайным образом сгенерированные биты LDPC

  2. Модулируйте закодированные биты 64-QAM

  3. Примените модуляцию 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 функция декодирует поврежденную каналом форму волны на сайте приемника путем выполнения этих следующих шагов:

  1. Совершенная оценка канала с помощью импульсной характеристики канала (CIR) выход и канал фильтрует коэффициенты от объекта канала info метод.

  2. Демодуляция OFDM, чтобы возвратить сигналы в частотный диапазон

  3. Эквализация символа на каждой поднесущей

  4. Мягкая 64-QAM демодуляция, чтобы получить LLR

  5. Декодирование 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.