Commit b3f2564c authored by Michele Maris's avatar Michele Maris
Browse files

u

parent 4225b86f
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -49,6 +49,14 @@ class gaussian_colored_noise :
   def seed(self) :
      """the seed of the random number generator"""
      return self._seed
   @property
   def ps_shape_integral(self) :
      """the spectral shape: ps_shape=P(f)**0.5"""
      x=self._freq
      y=self._S
      out=(x[1:]-x[:-1])*(y[1:]+y[:-1])
      out=out.sum()/2.
      return out*2
   def __init__(self,N,wn_mean,wn_sigma,fknee,alpha,zero_policy='I',seed=None) :
      """
Creates a gaussian_colored_noise_generator.
@@ -76,7 +84,7 @@ Keywords:
                    '100x1' : P(0)**0.5=(1+100*fknee/freq[1])**alpha/2
                    'midf1' : P(0)=P(f[1]/2) = exp((log P[2]-log P[1])/(log f2 - log f1)*(log f1/2 - log f1)+log P(1))
                    note that zero_policy affects the mean value of the chunck but not its variance
                    default value is 'I' that for alpha > 0 gives P(0)=1
                    default value is 'I' 
      
      :seed: the seed for the random number generator, if None no seed is applied otherwise the same seed is applied to any generated sequence
      """
@@ -87,11 +95,6 @@ Keywords:
      self._alpha=alpha
      self._seed=seed
      #
      if str(zero_policy) in ['0','1','M','I','100x1'] :
         self._zero_policy = str(zero_policy)
      else :
         raise Error("Error: invalid zero policy, valid values: '0','1','M','I','100x1'")
      #
      self._freq=np.fft.rfftfreq(self.N)
      #
      pl=self.alpha
@@ -99,6 +102,7 @@ Keywords:
         x=self.fknee/np.where(self._freq==0, np.inf , self._freq)
         self._S=(1+x**pl)**0.5
      #
      self._zero_policy=zero_policy
      if self._zero_policy=='0' :
         self._S[0]=0.
      elif self._zero_policy=='1' :
@@ -115,9 +119,10 @@ Keywords:
         r=(y2-y1)/(x2-x1)
         z=r*(np.log(self._freq[1]/2)-x1)+y1
         self._S[0]=np.exp(z)
      else : # self._zero_policy=='I' :
         # left things as they are
      elif self._zero_policy=='I' :
         pass
      else :
         raise Error("Error: invalid zero policy, valid values: '0','1','M','I','100x1','mid1f'")
      #
   def __call__(self,OutAll=False) :
      """computes the colored noise, if OutAll == False returns just the cn if True returns