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

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

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

Настройте эти переменные рабочей области для модели, чтобы использовать. Можно изменить эти значения согласно требованию.

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]; %#ok<UNRCH>
end
symbOffset = floor(cpFraction*cpLen);
vecLen = 2;

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

Сгенерируйте системы координат случайных выборок с помощью функции MATLAB randn.

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

Преобразуйте системы координат в поток случайных выборок

Преобразуйте системы координат случайных выборок к потоку случайных выборок, чтобы предоставить их, как введено блоку.

data = dataIn(:);
valid = true(length(dataIn)/vecLen,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);
sampleTime = 1/vecLen;
stopTime = (maxFFTLen*3*numOFDMSym)/vecLen;

Модель Run Simulink

Выполнение модели импортирует переменные входного сигнала с блоком из скрипта и экспортирует поток демодулируемых выходных выборок от блока до рабочего пространства MATLAB.

modelname = 'genhdlOFDMDemodulatorModel';
open_system(modelname);
out = sim(modelname);
simOut = squeeze(out.dataOut(:,1,out.validOut==1));

Демодулируйте потоковые выборки Используя функцию MATLAB

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

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

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

Сравните выход модели 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

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

Блоки

Для просмотра документации необходимо авторизоваться на сайте