Модулируйте и демодулируйте OFDM потоковая передача выборок

Эта модель в качестве примера показывает, как использовать Модулятор OFDM и блоки Демодулятора OFDM. В этой модели Модулятор OFDM и блок OFDM Demodulator соединяются спина к спине. Исходный параметр параметров OFDM в этих блоках устанавливается на Input port, то, чтобы позволять вам динамически изменить входные значения этих блоков. Можно изменить эти значения с помощью скрипта в этом примере. Эти блоки поддерживают скалярные и векторные входные параметры. Чтобы проверить функциональность этих блоков, вход, предоставленный блоку OFDM Modulator, по сравнению с выходом блока OFDM Demodulator. OFDMModDemod Подсистема HDL в этой модели в качестве примера поддерживает генерацию HDL-кода.

Установите параметры входных данных

Настройте эти переменные рабочей области для модели, чтобы использовать. Можно изменить эти значения согласно требованию. Модель в качестве примера использует эти переменные dataIn рабочей области, validIn, fftLen, maxFFTLen, cpLen, numLG, numRG, numSymb, и DCNull сконфигурировать Модулятор OFDM и блоки Демодулятора OFDM.

fftLen = 64;
maxFFTLen = 128;
cpLen = 16;
numLG = 6;
numRG = 5;
numSymb = 2;
DCNull = 1; % 1 or 0
vecLen = 4; % 1, 2, 4, 8, 16, 32, or 64
if DCNull==1
    numActData = fftLen - (numLG+numRG+1);
else
    numActData = fftLen - (numLG+numRG);
end

Сгенерируйте системы координат входных данных

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

rng default;
dataIn = complex(randn(numActData*numSymb,1),randn(numActData*numSymb,1));
dataVec = []; % Store data arranged in vector form
presentSymbDataStartIndex = 0;
for ii = 1:numSymb
    counter = 0;
    for jj = 1:ceil(numActData/vecLen)
        if jj == ceil(numActData/vecLen)
            numZerosTobeAppended = vecLen - (numActData-counter);
            dataVec = [dataVec [dataIn(presentSymbDataStartIndex+counter+(1:vecLen-numZerosTobeAppended));zeros(1,numZerosTobeAppended).']];
        else
            dataVec = [dataVec dataIn(presentSymbDataStartIndex+counter+(1:vecLen))];
        end
        counter = counter + vecLen;
    end
    presentSymbDataStartIndex = presentSymbDataStartIndex + numActData;
end

data = dataVec.';
valid = boolean(ones(size(data,1),1)); % Valid signal generation

sampling_time = 1;
stoptime = maxFFTLen*6*numSymb;

Запустите модель Simulink®

Запустите модель, чтобы импортировать переменные dataIn входного сигнала, validIn, fftLen, maxFFTLen, cpLen, numLG, numRG, numSymb, и DCNull от рабочей области до блока OFDM Modulator. Блок OFDM Modulator возвращает OFDM-модулируемые выходные выборки и управляющий сигнал. Эти OFDM-модулируемые выборки питаются блок OFDM Demodulator, который возвращается, OFDM демодулировал выборки.

open_system('genhdlOFDMModDemodExample')
sim('genhdlOFDMModDemodExample');

% Store valid data from Simulink model
dataOut1 = dataOut.data;
simOut = dataOut1(:,:,validOut);
simOut = simOut(:);

Сравните вход модулятора OFDM с демодулятором OFDM Выход

Сравните входные данные, предоставленные блоку OFDM Modulator с выходными данными, сгенерированными от блока OFDM Demodulator.

figure('units','normalized','outerposition',[0 0 1 1])
subplot(2,1,1);
plot(real(dataIn(1:size(simOut))));
hold on
plot(squeeze(real(simOut)));
legend('Real part of reference data','Real part of demodulated data');
title('Comparison of OFDM Modulator Input with OFDM Demodulator Output - Real Part');
xlabel('OFDM Subcarriers');
ylabel('Real Part');

subplot(2,1,2)
plot(imag(dataIn(1:size(simOut))));
hold on
plot(squeeze(imag(simOut)))
legend('Imaginary part of reference data','Imaginary part of demodulated data');
title('Comparison of OFDM Modulator Input with OFDM Demodulator Output - Imaginary Part');
xlabel('OFDM Subcarriers');
ylabel('Imaginary Part');

Смотрите также

Блоки

Для просмотра документации необходимо авторизоваться на сайте