www.gusucode.com > MPSK,误码率性能仿真源码程序 > MPSK,误码率性能仿真源码程序/IET_MATLAB/functions/Pb_unified.m

    % computing BER using unified approach

function Pe=Pb_unified(vP0,vA2,M,fsr,frd,ch_dis,sig_1,sig_2)
% inputs
% bP0 : vector of P0 the source power
% vA2 : vector of A2, the amplification factor
% M   : constellation size
% fsr,frd : Doppler shifts
% ch_dis: distance between two channel uses
% sig_1 and sig_2 : variance of channels

alfa1=besselj(0,2*pi*fsr*ch_dis);
alfa2=besselj(0,2*pi*frd*ch_dis);
alfa=alfa1*alfa2;

if M==2
    % defining a b according to paper by M. Simon, equation 25
    a=0;
    b=sqrt(2);
elseif M==4
    %defining a b according to paper by M. Simon, equation 25
    a=sqrt(2-sqrt(2));
    b=sqrt(2+sqrt(2));
end

% defining beta, alfa(teta), f(teta)
beta=a/b;
q= @ (teta) b^2*(1+2*beta*sin(teta)+beta^2)/log2(M);
g_teta= @(teta) (1-beta^2)/(1+2*beta*sin(teta)+beta^2);  

% eq. 71
%f_teta= @(teta) b^2*(1-beta^2)*(3+cos(2*teta)-(beta+1/beta)*sin(teta))/(2*alfa(teta));      

for ind=1:length(vP0)
    P0=vP0(ind);
    A2=vA2(ind);
      
    %b1=(1+auto_corr^2)./((1+auto_corr^2)*A2+(1-auto_corr^2)*A2*P0);
    b1=(1+alfa^2)./((alfa2^2+alfa^2)*A2+(1-alfa^2)*A2*P0*sig_1);
    %b2= @ (teta) (1+auto_corr^2)/(A2*(1+auto_corr^2+2*alfa(teta)*P0_per_bit+(1-auto_corr^2)*P0));
    b2= @ (teta) (1+alfa^2)/(A2*(alfa2^2+alfa^2+q(teta)*P0*alfa^2*sig_1+(1-alfa^2)*P0*sig_1));
    b3= @ (teta) b2(teta)./b1;
    J2= @ (teta) b3(teta)*(1+(b1-b2(teta))/sig_2*exp(b2(teta)/sig_2)*expint(b2(teta)/sig_2));

    
    I2= @ (teta) g_teta(teta)*J2(teta);   
    L=1;
    Pe(ind)=int_num(I2,-pi,pi,1000)/(2^(2*L)*pi);
end

end