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