📄 c102p_mcbpskber_3.m
字号:
EbNodB=0:8; %vector of Eb/No(dB) values
t=cputime;
z=10.^(EbNodB/10); %convert to linear scale
BER_T=qfunc(sqrt(2*z)); %theor. BER vec
delay=54; %enter delay value (samples)
N=100;
FilterSwitch=1;
% Turn parallelism on or off.
PARALLEL = 1;
% Create Maps.
map1 = 1;
if (PARALLEL)
% Initialize pMatlab.
pMatlab_Init;
Ncpus = pMATLAB.comm_size;
my_rank = pMATLAB.my_rank;
% Break up rows.
map1 = map([Ncpus 1], {}, 0:Ncpus-1 );
end;
%Creat 'M'-No. of symbols input matrix, 'Errors'-error number output matrix
%'BER'-BER simulation output matrix
%Configure a 'Ncpus' by 'length(EbNodB)' 'z'matrix for M generation
zp=ones(Ncpus,length(EbNodB));
for i=1:Ncpus
zp(i,:)=z(:);
end;
M=round((1000./(qfunc(sqrt(2*zp)))).*ones(Ncpus,length(EbNodB),map1));
Tol_Errors=zeros(Ncpus,length(EbNodB),map1); %initialize Errors vector
Tol_BER=zeros(Ncpus,length(EbNodB),map1); %initialize BER vector
Avg_Errors=zeros(1,length(EbNodB));
Avg_BER=zeros(1,length(EbNodB));
% Get the local portion of the global indices
my_i_global = global_ind(M, 1);
% Get the local portion of the distributed matrix
my_M = local(M);
my_Tol_Errors=local(Tol_Errors);
my_Tol_BER=local(Tol_BER);
%Loop over the local indices
for k=1:length(EbNodB)
my_M(k)=max(1000,my_M(k));
for j=1:N/Ncpus
[BER(j),Errors(j)]=c10_MCBPSKrun(my_M(k),z(k),delay,FilterSwitch)
my_Tol_BER(k)=my_Tol_BER(k)+BER(j);
my_Tol_Errors(k)=my_Tol_Errors(k)+Errors(j);
end % of j
end % of k
%Store the local portion of Errors into the dmat 'Errors'
Tol_Errors=put_local(Tol_Errors,my_Tol_Errors);
Tol_BER=put_local(Tol_BER,my_Tol_BER);
%Finally, aggregate all of the output onto the leader process
Tol_Errors_final=agg(Tol_Errors);
Tol_BER_final=agg(Tol_BER);
Errors_final=zeros(1,length(EbNodB));
BER_final=zeros(1,length(EbNodB));
for i=1:Ncpus
Errors_final(1,:)=Errors_final(1,:)+Tol_Errors_final(i,:);
BER_final(1,:)=BER_final(1,:)+Tol_BER_final(i,:);
end;
Errors_avg=Errors_final/N;
BER_avg=BER_final/N;
% Finalize the pMATLAB program
if (PARALLEL)
disp('SUCCESS_Parallel');
pMatlab_Finalize;
end;
% Finally, display the resulting matrix on the leader
disp(Errors_avg);
disp(BER_avg);
disp(BER_T);
semilogy(EbNodB,BER_avg,'o',EbNodB,BER_T,'-r')
axis([min(EbNodB),max(EbNodB),1e-4,1]);
xlabel('E_b/N_o-dB');ylabel('Bit Error Rate');grid
legend('System under Study','AWGN Ref',0)
e=cputime-t;
disp(e);
%End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -