1 #include "VarSegnali.h" 2 Variabili::Variabili(
int nSegn,
int nPeriodi,
double xMediaSu,
double xScartoSu,
double xMediaGiu,
double xScartoGiu,
double xPasso,
double xIncr){
9 ScartoGiu = xScartoGiu;
11 NMass = (int)((
double)Periodi/(double)Passo);
12 sMedia =
new double[NMass];
17 bool Variabili::Simula(){
24 if(NMass != (
int)((
double)Periodi/(
double)Passo)){
25 NMass = (int)((
double)Periodi/(double)Passo);
28 sMedia =
new double[NMass];
31 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",
32 NSegn,NMass,Periodi,Passo,MediaSu,ScartoSu,MediaGiu,ScartoGiu,Incr);
38 for(
int i=0;i<NMass;i++){
42 for(
int i=0;i<NSegn;i++){
45 printf(
"Processo il segnale numero %d di %d\n",i,NSegn);
46 if(
Casuale()<=(MediaSu)/(MediaGiu)){
48 Temp = POS(mSu->
Gaussiano((MediaSu+IncrSu),(ScartoSu+IncrSu)));
49 Fase=
Casuale()*(MediaSu+IncrSu);
53 Temp = POS(mGiu->
Gaussiano(MediaGiu+IncrGiu,ScartoGiu+IncrGiu));
54 Fase=
Casuale()*(MediaGiu+IncrGiu);
56 for(
int l=0;Fase+Passo*(double)l<Temp;l++){
57 if(i == 0) st[m] = Livello;
58 sMedia[m]+=(double)Livello;
61 for(
int j=1;m<NMass;j++){
64 Temp= POS(mSu->
Gaussiano(MediaSu+IncrSu,ScartoSu+IncrSu));
67 Temp = POS(mGiu->
Gaussiano(MediaGiu+IncrGiu,ScartoGiu+IncrGiu));
69 for(
int l=0;Passo*(double)l<Temp;l++){
71 if(i == 0) st[m] = Livello;
72 sMedia[m]+=(double)Livello;
77 IncrSu += Incr*(MediaSu)/(MediaGiu);
83 Comando =
new char[50];
84 Cartella =
new char[50];
89 sprintf(Cartella,
".");
90 sprintf(Nome,
"%s/Segnale.dat",Cartella);
91 if((
SEGNALE = fopen(Nome,
"w"))==0)
92 printf(
"Non s'apre %s, Permessi?\n",Nome);
93 sprintf(Nome,
"%s/MediaSegnali.dat",Cartella);
94 if((MEDIA = fopen(Nome,
"w"))==0)
95 printf(
"Non s'apre %s, Permessi?\n",Nome);
96 for(
int i=0;i<NMass;i++){
98 if(i>(
int)(MediaGiu/Passo)) fprintf(MEDIA,
"%g\n",sMedia[i]);
104 Variabili::~Variabili(){
108 void Variabili::Cambia(
char *cosa,
int n){
110 if(!strcmp(cosa,
"num"))
112 else if(!strcmp(cosa,
"per")){
117 void Variabili::Cambia(
char *cosa,
double x){
119 if(!strcmp(cosa,
"mSu") )
121 else if(!strcmp(cosa,
"sSu") )
123 else if(!strcmp(cosa,
"mGiu") )
125 else if(!strcmp(cosa,
"sGiu") )
127 else if(!strcmp(cosa,
"pas") )
130 if(!strcmp(cosa,
"incr") )
bool InizializzaGaussiano(double Scarto, int N)
Initialize the Gaussian number generator.
double Casuale()
Random uniform number.
double Gaussiano(double Media, double Scarto)
Gaussian random number.