Оцените канал с помощью входных данных и ссылочных поднесущих

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

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

rng('default');
numOFDMSym = 28;
numOFDMSymToBeAvg = 14;
interpolFac = 3;
maxNumScPerSym = 72;
numScPerSym = 72;

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

Используя numScPerSym и numOFDMSym значения, сгенерируйте поднесущие данных случайных входных выборок.

dataIn = rand(1,numOFDMSym*numScPerSym) + 1i*rand(1,numOFDMSym*numScPerSym);
validIn = true(1,length(dataIn));

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

Используя numScPerSym и numOFDMSym значения, сгенерируйте поднесущие справочных данных случайных входных выборок.

refDataIn = randsrc(size(dataIn,1),size(dataIn,2), [-1 1]);
refValidIn = boolean(zeros(1,numOFDMSym*numScPerSym));
startRefValidIndex = randi(interpolFac,1,1);
for numOFDMSymCount = 1:numOFDMSym
    refValidIn(startRefValidIndex+(numOFDMSymCount-1)*numScPerSym:interpolFac:numScPerSym*numOFDMSymCount)=true;
end

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

numScPerSymIn = numScPerSym*true(1,length(dataIn));
resetSig = false(1,length(dataIn));

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

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

Экспортируйте поток оценок канала от Simulink до рабочей области MATLAB®

simOut = out.dataOut.Data(out.validOut.Data);

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

Можно использовать выход функционального channelEstReference как справочные данные для сравнения.

dataOut1 = channelEstReference(...
    numOFDMSymToBeAvg,interpolFac,numScPerSym,numOFDMSym,...
    dataIn,validIn,refDataIn,refValidIn,numScPerSymIn);

matlabOut=dataOut1(:);
matOut = zeros(numel(matlabOut)*numScPerSym,1);
for ii= 1: numel(matlabOut)
loadArray = [matlabOut(ii).dataOut; zeros((numel(matlabOut)-1)*numScPerSym,1)];
shiftArray = circshift(loadArray,(ii-1)*numScPerSym);
matOut =  matOut + shiftArray;
end

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

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(double(var(real(simOut(:)))/abs(var(real(simOut(:)))-var(real(matOut(:))))));
sqnrImagdB=10*log10(double(var(imag(simOut(:)))/abs(var(imag(simOut(:)))-var(imag(matOut(:))))));

fprintf('\n OFDM Channel Estimator: \n SQNR of real part is %.2f dB',sqnrRealdB);
fprintf('\n SQNR of imaginary part is %.2f dB\n',sqnrImagdB);
 OFDM Channel Estimator: 
 SQNR of real part is 31.82 dB
 SQNR of imaginary part is 29.41 dB

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

Блоки

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