exponenta event banner

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

Эта примерная модель показывает, как использовать блоки OFDM-модулятора и OFDM-демодулятора. В этой модели модулятор OFDM и блок демодулятора OFDM соединены друг с другом. Параметр источника параметров OFDM в этих блоках установлен в Input port, позволяя динамически изменять входные значения этих блоков. Эти значения можно изменить с помощью сценария в этом примере. Эти блоки поддерживают скалярные и векторные входы. Для проверки функциональных возможностей этих блоков входной сигнал, подаваемый в блок модулятора OFDM, сравнивается с выходным сигналом блока демодулятора OFDM. Подсистема 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 = 8; % 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. Блок OFDM-модулятора возвращает OFDM-модулированные выходные выборки и управляющий сигнал. Эти OFDM-модулированные выборки подаются в блок демодулятора OFDM, который возвращает OFDM демодулированные выборки.

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

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

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

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

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');

См. также

Блоки