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

В этом примере показано, как использовать блок OFDM Demodulator, чтобы демодулировать комплексный временной интервал выборки OFDM к поднесущим. Модель в качестве примера поддерживает генерацию HDL-кода для подсистемы OFDMDemod. Рабочий процесс выполняет эти шаги:

  1. Настройте параметры входных данных.

  2. Сгенерируйте системы координат случайных входных выборок.

  3. Преобразуйте структурированные входные данные в поток выборок и импортируйте поток в Simulink®.

  4. Запустите модель Simulink, которая содержит блок OFDM Demodulator.

  5. Экспортируйте поток демодулируемых выборок от Simulink до рабочей области MATLAB®.

  6. Демодулируйте случайные входные выборки с ofdmdemod_baseline функционируйте, чтобы использовать его выход в качестве справочных данных.

  7. Сравните выходные данные блока Simulink со ссылочной функцией MATLAB выход.

Настройте параметры входных данных.

rng('default');
numOFDMSym=2;

maxFFTLen = 128;
DCRem=true;
RoundingMethod='floor';
Normalize=false;
cpFraction=1;
fftLen=64;
cpLen=16;
numLG=6;
numRG=5;
if DCRem
    NullInd= [1:numLG fftLen/2+1 fftLen-numRG+1:fftLen];
else
    NullInd= [1:numLG fftLen-numRG+1:fftLen];
end
symbOffset=floor(cpFraction*cpLen);

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

data=randn(fftLen,numOFDMSym)+1i*randn(fftLen,numOFDMSym);
dataIn = ofdmmod(data,fftLen,cpLen);

Импортируйте входной поток к Simulink.

data=dataIn(:);
valid= true(length(dataIn),1);
fftSig= fftLen*ones(length(dataIn),1);
CPSig= cpLen*ones(length(dataIn),1);
LGSig= numLG*ones(length(dataIn),1);
RGSig= numRG*ones(length(dataIn),1);
resetSig=false(length(data),1);

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

modelname = 'genhdlOFDMDemodulatorModel';
open_system(modelname);
out=sim(modelname);

Экспортируйте поток демодулируемых выборок от блока Simulink до рабочего пространства MATLAB.

simOut=squeeze(out.dataOut(:,1,out.validOut==1));

Демодулируйте случайные входные выборки с помощью ofdmdemod_baseline функция.

[dataOut1]=ofdmdemod_baseline(dataIn,fftLen,cpLen,symbOffset,NullInd.',[],Normalize,RoundingMethod);
matOut=dataOut1(:);

Сравните выход модели Simulink против выхода ofdmdemod_baseline функция.

figure('units','normalized','outerposition',[0 0 1 1])
subplot(2,1,1)
plot(real(matOut(:)));
hold on;
plot(real(simOut(:)));
grid on
legend('Reference','Simulink')
xlabel('Sample Index')
ylabel('Magnitude')
title('Comparison of Simulink block and MATLAB function - Real part')

subplot(2,1,2)
plot(imag(matOut(:)));
hold on;
plot(imag(simOut(:)));
grid on
legend('Reference','Simulink')
xlabel('Sample Index')
ylabel('Magnitude')
title('Comparison of Simulink block and MATLAB function - Imaginary part')

sqnrRealdB=10*log10(var(real(simOut(:)))/abs(var(real(simOut(:)))-var(real(matOut(:)))));
sqnrImagdB=10*log10(var(imag(simOut(:)))/abs(var(imag(simOut(:)))-var(imag(matOut(:)))));

fprintf('\n OFDM Demodulator: \n SQNR of real part is %.2f dB',sqnrRealdB);
fprintf('\n SQNR of imaginary part is %.2f dB\n',sqnrImagdB);
 OFDM Demodulator: 
 SQNR of real part is 47.77 dB
 SQNR of imaginary part is 42.69 dB

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

Блоки