Allink
v0.1
|
00001 #include "VarSegnali.h" 00002 Variabili::Variabili(int nSegn,int nPeriodi,double xMediaSu,double xScartoSu,double xMediaGiu,double xScartoGiu,double xPasso,double xIncr){ 00003 NSegn = nSegn; 00004 Periodi = nPeriodi; 00005 Passo = xPasso; 00006 MediaSu = xMediaSu; 00007 ScartoSu = xScartoSu; 00008 MediaGiu = xMediaGiu; 00009 ScartoGiu = xScartoGiu; 00010 Incr = xIncr; 00011 NMass = (int)((double)Periodi/(double)Passo); 00012 sMedia = new double[NMass]; 00013 st = new bool[NMass]; 00014 mSu = new Matematica(); 00015 mGiu = new Matematica(); 00016 } 00017 bool Variabili::Simula(){ 00018 double Fase=0.; 00019 bool Livello=0; 00020 double Delta=0; 00021 double IncrSu=0.; 00022 double IncrGiu=0.; 00023 //------------------Per le volte successive------------ 00024 if(NMass != (int)((double)Periodi/(double)Passo)){ 00025 NMass = (int)((double)Periodi/(double)Passo); 00026 delete sMedia; 00027 delete st; 00028 sMedia = new double[NMass]; 00029 st = new bool[NMass]; 00030 } 00031 printf("Inizializzo %d Segnali da %d Punti (%d Periodi con Passo %.3f)\n con livello 1 %.2f +- %.2f con livello 0 %.2f +- %.2f\n incrementando di %.2f\n", 00032 NSegn,NMass,Periodi,Passo,MediaSu,ScartoSu,MediaGiu,ScartoGiu,Incr); 00033 if(!mSu->InizializzaGaussiano(ScartoSu,(int)(MediaSu/Passo)) ) 00034 return 0; 00035 if(!mGiu->InizializzaGaussiano(ScartoGiu,(int)(MediaGiu/Passo)) ) 00036 return 0; 00037 double Temp=0.; 00038 for(int i=0;i<NMass;i++){ 00039 sMedia[i]=0.; 00040 } 00041 //---------------Inizia------------------- 00042 for(int i=0;i<NSegn;i++){ 00043 int m=0;//indice di passo 00044 if( (i%1000)==0 ) 00045 printf("Processo il segnale numero %d di %d\n",i,NSegn); 00046 if(Casuale()<=(MediaSu)/(MediaGiu)){ 00047 Livello = 1;//Livello di partenza 00048 Temp = POS(mSu->Gaussiano((MediaSu+IncrSu),(ScartoSu+IncrSu)));//Fase iniziale (m=0) 00049 Fase=Casuale()*(MediaSu+IncrSu); 00050 } 00051 else{ 00052 Livello=0; 00053 Temp = POS(mGiu->Gaussiano(MediaGiu+IncrGiu,ScartoGiu+IncrGiu)); 00054 Fase=Casuale()*(MediaGiu+IncrGiu); 00055 }// Primo periodo 00056 for(int l=0;Fase+Passo*(double)l<Temp;l++){ 00057 if(i == 0) st[m] = Livello; 00058 sMedia[m]+=(double)Livello; 00059 m++; 00060 }//inizia l'altro periodo 00061 for(int j=1;m<NMass;j++){ 00062 Livello = !Livello; 00063 if(Livello){ 00064 Temp= POS(mSu->Gaussiano(MediaSu+IncrSu,ScartoSu+IncrSu)); 00065 } 00066 else if(!Livello){ 00067 Temp = POS(mGiu->Gaussiano(MediaGiu+IncrGiu,ScartoGiu+IncrGiu)); 00068 } 00069 for(int l=0;Passo*(double)l<Temp;l++){ 00070 // printf("Livello %d\n",Livello); 00071 if(i == 0) st[m] = Livello; 00072 sMedia[m]+=(double)Livello; 00073 m++; 00074 if(m>=NMass)break; 00075 } 00076 } 00077 IncrSu += Incr*(MediaSu)/(MediaGiu); 00078 IncrGiu += Incr; 00079 } 00080 char *Comando; 00081 char *Nome; 00082 char *Cartella; 00083 Comando = new char[50]; 00084 Cartella = new char[50]; 00085 Nome = new char[50]; 00086 // sprintf(Cartella,"%.0fk%dp%di%.0fm%.0fs",(double)(NSegn/1000),Periodi,Inter,Media,Scarto); 00087 // sprintf(Comando,"mkdir %s",Cartella); 00088 // system(Comando); 00089 sprintf(Cartella,"."); 00090 sprintf(Nome,"%s/Segnale.dat",Cartella); 00091 if((SEGNALE = fopen(Nome,"w"))==0) 00092 printf("Non s'apre %s, Permessi?\n",Nome); 00093 sprintf(Nome,"%s/MediaSegnali.dat",Cartella); 00094 if((MEDIA = fopen(Nome,"w"))==0) 00095 printf("Non s'apre %s, Permessi?\n",Nome); 00096 for(int i=0;i<NMass;i++){ 00097 fprintf(SEGNALE,"%d\n",st[i]); 00098 if(i>(int)(MediaGiu/Passo)) fprintf(MEDIA,"%g\n",sMedia[i]); 00099 } 00100 fclose(SEGNALE); 00101 fclose(MEDIA); 00102 return 1; 00103 } 00104 Variabili::~Variabili(){ 00105 delete st; 00106 delete sMedia; 00107 } 00108 void Variabili::Cambia(char *cosa,int n){ 00109 if (n > 0){ 00110 if(!strcmp(cosa,"num")) 00111 NSegn = n; 00112 else if(!strcmp(cosa,"per")){ 00113 Periodi = n; 00114 } 00115 } 00116 } 00117 void Variabili::Cambia(char *cosa,double x){ 00118 if(x>0){ 00119 if(!strcmp(cosa,"mSu") ) 00120 MediaSu = x; 00121 else if(!strcmp(cosa,"sSu") ) 00122 ScartoSu = x; 00123 else if(!strcmp(cosa,"mGiu") ) 00124 MediaGiu = x; 00125 else if(!strcmp(cosa,"sGiu") ) 00126 ScartoGiu = x; 00127 else if(!strcmp(cosa,"pas") ) 00128 Passo = x; 00129 } 00130 if(!strcmp(cosa,"incr") ) 00131 Incr = x; 00132 }