Эта примерная модель показывает, как использовать блоки 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;
Запустите модель для импорта переменных входного сигнала 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.
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');
