#include #include #include #ifdef __MWERKS__ #include "unixmac.h" #endif #include "fmath.h" #include "bruit.h" #include "nbrandom.h" // #include "rancern.h" // #include "hbook.h" #ifdef OS_MACOSX #include #endif // Le code des classes NoiseGenerator RWalkNoise //++ // Class NoiseGenerator // // include bruit.h math.h fmath.h nbrandom.h // //-- //++ // // Links Childs // // RWalkNoise OOFNoise EXPNoise MemNoise SumNoise // //-- //++ // Titre Constructors //-- // Definition de fonctions pour float - a changer en utilisant cmath // Reza Juillet 2002 inline float _myfabsf(float x) { return ((float)(fabs((double)x)) ); } inline float _mysqrtf(float x) { return ((float)(sqrt((double)x)) ); } /* --Methode-- */ //++ NoiseGenerator::NoiseGenerator(float sigma) // //-- { if (sigma < 0.) sigma = 1.; mNCoups = 0; mSigma = sigma; //printf("-- NoiseGenerator::NoiseGenerator(%g) (Constructeur) ---\n", sigma); } //++ // Titre Destructor //-- /* --Methode-- */ //++ NoiseGenerator::~NoiseGenerator() // //-- { //printf("-- NoiseGenerator::~NoiseGenerator() (Destructeur) --- \n"); } //++ // // inline unsigned long int NoiseGenerator::NCoups() //-- //++ // Titre Public Methods //-- /* --Methode-- */ //++ float NoiseGenerator::Noise() // //-- { mNCoups++; return(NorRand()*mSigma); } //++ // Class RWalkNoise // // include bruit.h math.h fmath.h nbrandom.h // //-- //++ // // Links Parents // // NoiseGenerator // //-- //++ // Titre Constructor //-- /* --Methode-- */ //++ RWalkNoise::RWalkNoise(float sigma) : NoiseGenerator(sigma) // //-- { mState = 0.; //printf("-- RWalkNoise::RWalkNoise(%g) (Constructeur) ---\n", sigma); } //++ // Titre Destructor //-- /* --Methode-- */ //++ RWalkNoise::~RWalkNoise() // //-- { //printf("-- RWalkNoise::~RWalkNoise (Destructeur) ---\n"); } //++ // Titre Public Methods //-- /* --Methode-- */ //++ float RWalkNoise::Noise() // //-- { mState += NoiseGenerator::Noise(); return(mState); } //++ // Class OOFNoise // // include bruit.h math.h fmath.h nbrandom.h // //-- //++ // // Links Parents // // NoiseGenerator // //-- //++ // Titre Constructor //-- /* --Methode-- */ //++ OOFNoise::OOFNoise(float sigma, int typacf, int mem, float tau) : NoiseGenerator(sigma) // //-- { if (typacf != ACF_Exp) typacf = ACF_Exp; // Fonction d'autocorrelation donnant un bruit en 1/f // mTypACF = typacf; if (mem < 1) mem = 1; mMemL = mem; if (tau < 1.e-6) tau = 1.e-6; mTau = tau; mState = new double[mem]; mDyn = new double[mem]; int i; mDyn[0]=1.; mState[0]=0.; for(i=1; i0; i--) mState[i] = mState[i-1]; mState[0] = NoiseGenerator::Noise(); rn = 0.; for(i=0; i< mMemL; i++) rn += mDyn[i]*mState[i]; return(rn); } /* --Methode-- */ //++ void OOFNoise::Print() // //-- { int i,j; printf("OOFNoise::Print() MemL=%d Tau= %g \n", mMemL, mTau); printf("OOFNoise::Print() Vecteur de Dynamique / Etat : \n"); for(i=0; i0; i--) mState[i] = mState[i-1]; mState[0] = NoiseGenerator::Noise(); rn = 0.; for(i=0; i< mMemL; i++) rn += mDyn[i]*mState[i]; return(rn); } /* --Methode-- */ //++ void EXPNoise::Print() // //-- { int i,j; printf("EXPNoise::Print() MemL=%d Tau= %g \n", mMemL, mTau); printf("EXPNoise::Print() Vecteur de Dynamique / Etat : \n"); for(i=0; i= 0 ; mNsaut--) { // debut mNsaut // printf("mNsaut = %ld\n",mNsaut); mNappel++; mTdernier += 1.; for(i=0; i0) { for(i=mMemPos; i>0; i--) { mStPos[i] = mStPos[i-1]; mTePos[i] = mTePos[i-1]; } mTePos[0] = mTdernier; mStPos[0] = boum; if (mMemPos0 ; i--) { if(mStPos[i]==0.)continue; // printf("i,temps,bruit %d,%g,%g \n",i,mTePos[i],mStPos[i]); Somme = mStPos[i]/_mysqrtf(mTePos[i]); SbaryT = mStPos[i] * mTePos[i]; Poids = mStPos[i]; for(j=i-1 ; j>=0 ; j--) { // printf(" j,temps,bruit %d,%g,%g \n",j,mTePos[j],mStPos[j]); Somme += mStPos[j]/_mysqrtf(mTePos[j]); Poids += mStPos[j]; SbaryT += mStPos[j] * mTePos[j]; BaryT = SbaryT / Poids; Approx = Poids / _mysqrtf(BaryT); Erreur = (Approx - Somme) / Somme; // printf("i,j = %d %d Approx = %g \n",i,j,_myfabsf(Erreur)); // printf("Temps,Bruit = %g %g \n",BaryT,Poids); if(_myfabsf(Erreur)0; i--) { mStNeg[i] = mStNeg[i-1]; mTeNeg[i] = mTeNeg[i-1]; } mTeNeg[0] = mTdernier; mStNeg[0] = boum; if (mMemNeg0 ; i--) { if(mStNeg[i]==0.)continue; // printf("i,temps,bruit %d,%g,%g \n",i,mTeNeg[i],mStNeg[i]); Somme = mStNeg[i]/_mysqrtf(mTeNeg[i]); SbaryT = mStNeg[i] * mTeNeg[i]; Poids = mStNeg[i]; for(j=i-1 ; j>=0 ; j--) { // printf(" j,temps,bruit %d,%g,%g \n",j,mTeNeg[j],mStNeg[j]); Somme += mStNeg[j]/_mysqrtf(mTeNeg[j]); Poids += mStNeg[j]; SbaryT += mStNeg[j] * mTeNeg[j]; BaryT = SbaryT / Poids; Approx = Poids / _mysqrtf(BaryT); Erreur = (Approx - Somme) / Somme; // printf("i,j = %d %d Approx = %g \n",i,j,Erreur); // printf("Temps,Bruit = %g %g \n",BaryT,Poids); if(_myfabsf(Erreur) 1.) break; // Modif F.C et D.Y. 03/2000 rn += mStPos[i]; indlim++; } // float ajout=0.; for(i=indlim; i < mMemPos-1; i++) rn += mStPos[i]/_mysqrtf(mTePos[i]); indlim=0; for(i=0; i < mMemNeg-1; i++) { if(mTeNeg[i] > 1.) break; // Modif F.C et D.Y. 03/2000 rn += mStNeg[i]; indlim++; } for(i=indlim; i < mMemNeg-1; i++) rn += mStNeg[i]/_mysqrtf(mTeNeg[i]); } } return(rn); } /* --Methode-- */ //++ int MemNoise::Print() // //-- { int i,j,rc=0; printf("MemNoise::Print() MemL=%d Tau= %g \n", mMemL, mTau); printf("mNtirage= %d , mMemPos= %d , mMemNeg= %d \n",mNtirage,mMemPos,mMemNeg); // printf("MemNoise::Print() Vecteur de Dynamique / Etat : \n"); /* for(i=0; i Reza 1/12/99 } //++ // Titre Destructor //-- /* --Methode-- */ //++ SumNoise::~SumNoise() // //-- { delete mn; } //++ // Titre Public Methods //-- /* --Methode-- */ //++ float SumNoise::Noise() // //-- { return(NoiseGenerator::Noise() + mn->Noise()); }