exponenta event banner

OFDM с заданными пользователем индексами пилот-сигнала

Этот пример показывает, как построить пару модулятор/демодулятор с ортогональным частотным разделением каналов (OFDM) и задать их пилот-индексы. Системный объект модулятора OFDM позволяет задавать индексы пилотных поднесущих, согласующиеся с ограничениями, описанными в comm.OFDMModulator.info. В этом примере для передачи OFDM по каналу 3x2 создаются индексы пилот-сигнала для каждой из трех передающих антенн. Кроме того, индексы пилот-сигнала различаются между нечетными и четными символами.

Создание объекта модулятора OFDM, имеющего пять символов, три передающие антенны и окно длиной шесть.

ofdmMod = comm.OFDMModulator('FFTLength',256, ...
    'NumGuardBandCarriers',[12; 11], ...
    'NumSymbols', 5, ...
    'NumTransmitAntennas', 3, ...
    'PilotInputPort',true, ...
    'Windowing', true, ...
    'WindowLength', 6);

Задание индексов пилот-сигнала для четных и нечетных символов для первой передающей антенны.

pilotIndOdd = [20; 58; 96; 145; 182; 210];
pilotIndEven = [35; 73; 111; 159; 197; 225];

pilotIndicesAnt1 = cat(2, pilotIndOdd, pilotIndEven, pilotIndOdd, ...
    pilotIndEven, pilotIndOdd);

Формируют пилотные индексы для второй и третьей антенн на основе индексов, заданных для первой антенны. Объедините индексы для трех антенн и назначьте их PilotCarrierIndices собственность.

pilotIndicesAnt2 = pilotIndicesAnt1 + 5;
pilotIndicesAnt3 = pilotIndicesAnt1 - 5;

ofdmMod.PilotCarrierIndices = cat(3, pilotIndicesAnt1, pilotIndicesAnt2, pilotIndicesAnt3);

Создание на демодуляторе OFDM с двумя приемными антеннами на основе существующего объекта системы модулятора OFDM. Определите данные и пилотные измерения с помощью info функция.

ofdmDemod = comm.OFDMDemodulator(ofdmMod);
ofdmDemod.NumReceiveAntennas = 2;

dims = info(ofdmMod)
dims = struct with fields:
     DataInputSize: [215 5 3]
    PilotInputSize: [6 5 3]
        OutputSize: [1360 3]

Генерировать символы данных и пилот-сигнала для модулятора OFDM, учитывая размеры массива, указанные в modDim.

dataIn = complex(randn(dims.DataInputSize), randn(dims.DataInputSize));
pilotIn = complex(randn(dims.PilotInputSize), randn(dims.PilotInputSize));

Применение модуляции OFDM к данным и пилот-сигналам.

modOut = ofdmMod(dataIn,pilotIn);

Передача модулированных данных через случайный канал 3x2.

chanGain = complex(randn(3,2), randn(3,2));
chanOut = modOut * chanGain;

Демодулируют принятые данные с использованием объекта демодулятора OFDM.

[dataOut,pilotOut] = ofdmDemod(chanOut);

Отображение отображения ресурсов для трех передающих антенн. Серые линии на рисунке показывают размещение пользовательских нулей во избежание помех между антеннами.

showResourceMapping(ofdmMod)

Figure OFDM Subcarrier Mapping for Tx Antenna 1 contains an axes. The axes with title OFDM Subcarrier Mapping for Tx Antenna 1 contains 5 objects of type image, line.

Figure OFDM Subcarrier Mapping for Tx Antenna 2 contains an axes. The axes with title OFDM Subcarrier Mapping for Tx Antenna 2 contains 5 objects of type image, line.

Figure OFDM Subcarrier Mapping for Tx Antenna 3 contains an axes. The axes with title OFDM Subcarrier Mapping for Tx Antenna 3 contains 5 objects of type image, line.

Для первой пары передающей и первой приемной антенн продемонстрировать, что входной пилот-сигнал соответствует входному пилот-сигналу.

pilotCompare = abs(pilotIn(:,:,1)*chanGain(1,1)) - abs(pilotOut(:,:,1,1));
max(pilotCompare(:) < 1e-10)
ans = logical
   1