⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c102p_mcbpskber_3.m

📁 使用pMatlab改写BPSK和QPSK 的Monte Carlo 仿真程序。在多核PC上实现MC仿真速度翻倍(附原程序)
💻 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 + -