Эта модель примера показывает, как использовать блоки OFDM Modulator и OFDM Demodulator. В этой модели модулятор OFDM и блок демодулятора OFDM соединяются друг с другом. Исходный параметр параметров OFDM в этих блоках установлен в Input port
, что позволяет динамически изменять входные значения этих блоков. Изменить эти значения можно с помощью скрипта в этом примере. Эти блоки поддерживают скалярные и векторные входы. Чтобы проверить функциональность этих блоков, вход, предоставленный блоку OFDM Modulator, сравнивается с выходом блока OFDM Demodulator. HDL-подсистема OFDMModDemod в этой модели примера поддерживает генерацию 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 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 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');