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