copare_psk_mod.m


пример скрипта copare_psk_mod.m

Для удобства отладки определение созвездия следует записать прямо в copare_psk_mod.m - тогда не придётся предварительно запускать файл siganl.m


clear
inphase = [0.5 0.5 1 1 1 1 1.5 1.5]; % задаём массив из координат х точек первой четверти
quadr = [-1 -1.5 -0.5 -1 -1.5 -2 -1 -1.5]; % задаём массив из координат х точек первой четверти
inphase = [inphase; -inphase]; % формируем координаты икс для всех четвертей
inphase = inphase(:); % из матрицы-строки получаем матрицу-столбец (заморочка матлаба)
quadr = [quadr; -quadr]; 
quadr = quadr(:);% из матрицы-строки получаем матрицу-столбец (заморочка матлаба)
const = inphase + j*quadr; % формируем созвездие


EbNoVec = [-2:1:20];
%axis([-2 10 1e-5 .1]);
SERVec_PSK = [];
load_system('compare_PSK'); % фактически - имя файла модели без расширения
opts = simset('SrcWorkspace','Current','DstWorkspace','Current');
set_param('compare_PSK/AWGN Channel PSK','EsNodB','EbNodB+10*log10(16)'); %EbNodB+10*log10(4)
set_param('compare_PSK/Error Rate Calculation PSK','numErr','1e4');

% Simulate multiple times.

for n = 1:length(EbNoVec)
    fprintf (1,'Выполняем %2d запуск из %d\n',n,length(EbNoVec));
    EbNodB = EbNoVec(n);
    sim('compare_PSK',1e7,opts);
    SERVec_PSK(n,:) = PSK_SER;    
    semilogy(EbNoVec(n),SERVec_PSK(n,1),'go-'); % Plot point.
%    title('Bit Error Rate (BER)');
%    legend('Actual BER');
%    xlabel('Eb/No (dB)'); ylabel('Bit Error Rate');
    hold on;
    drawnow;
end

hold off;
%
BER_PSK_16_an=(2/4)*0.5*erfc(sin(pi/16)*sqrt(4*2*(10.^(EbNoVec./10)))/sqrt(2));
%
semilogy(EbNoVec,SERVec_PSK(:,1),'go',EbNoVec,4.*BER_PSK_16_an,'mx:','LineWidth',1.2);
set(gca, ...
'XAxisLocation','bottom', ...
'XTickMode','auto', ...
'YTickMode','auto', ...
'FontSize',14, ...
'FontName','Arial Unicode MS', ...
'Box','on');
legend('Simulation','MY analit',3); % названия графиков
grid off;
%title('Symbol Error Rate (SER)','FontSize',14);
xlabel('Eb/No (dB)','FontSize',14); ylabel('SER','FontSize',14);
hold off;