#include #include #include #include #include "Rayon.h" const double PI=3.14159265359; Rayon::Rayon(double d, double s, int n, int ech){ dist=d; //distance de mesure (m) seuil=s; //seuil pour le calcul du lcr (dB) nb_ondes=n; //nombre d'ondes incidentes considérées echelle=ech; //echelle pour le calcul des distributions E0=10E-6; //amplitude du champ (V) beta=0; //angle entre l'onde incidente et le sol (radian) gamma=0; //angle entre le vecteur vitesse du mobile et l'axe des x (radian) vit=10; // vitesse du mobile (m/s) Fe=1000; //fréquence d'échantillonnage (Hz) freq=900E6; //fréquence de la communication (Hz) c=3E8; //vitesse de la lumière (m/s) lambda=c/freq; //longueur d'onde de la communication (m) nb_echant=(int)(dist/vit*Fe); //nombre d'échantillons lcr=0; //taux de franchissement d'un seuil (Hz) tau=0; //durée moyenne d'évanouissement (s) alpha=new double[nb_ondes]; //angle azimutal d'arrivée (radian) phi=new double[nb_ondes]; //phase de l'onde (radian) I=new double[nb_echant]; //partie en phase (V) Q=new double[nb_echant]; //partie en quadrature (V) r=new double[nb_echant]; //enveloppe du signal (V) loi_I=new double[echelle]; //distribution de I(t) loi_Q=new double[echelle]; //distribution de Q(t) loi_r=new double[echelle]; //distribution de r(t) r_dB=new double[nb_echant]; //enveloppe du signal (dB) } Rayon::~Rayon(){ delete alpha; delete phi; delete I; delete Q; delete r; delete loi_I; delete loi_Q; delete loi_r; cout<<"Fin de la simulation\n"; } void Rayon::calcul_IQ(){ int tps=(int)(nb_echant/nb_ondes); for(int i=0;imaxI) maxI=I[i]; if(Q[i]maxQ) maxQ=Q[i]; } increment_I=(maxI-minI)/echelle; increment_Q=(maxQ-minQ)/echelle; for(int k=0;kmaxr) maxr=r[i]; } increment_r=(maxr-minr)/echelle; for(int k=0;kseuil) lcr++; lcr/=(dist/vit); Fm=vit/lambda; rho=fabs(seuil)/(sqrt(variance(loi_r, echelle))*sqrt(2)); lcr_form=sqrt(2*PI)*rho*Fm*exp(-rho*rho); cout<<"lcr par simulation : "<