code: def generateNoise(self):
          
          # Fill wfb array with white noise based on given discrete variance
          wfb = np.zeros(self.nr*2)
          wfb[:self.nr] = np.random.normal(0, np.sqrt(self.qd), self.nr)
          # Generate the hfb coefficients based on the noise type
          mhb = -self.b/2.0
          hfb = np.zeros(self.nr*2)
          hfb = np.zeros(self.nr*2)
          hfb[0] = 1.0
          indices = np.arange(self.nr-1)
          hfb[1:self.nr] = (mhb+indices)/(indices+1.0)
          hfb[:self.nr] = np.multiply.accumulate(hfb[:self.nr])
          # Perform discrete Fourier transform of wfb and hfb time series
          wfb_fft = np.fft.rfft(wfb)
          hfb_fft = np.fft.rfft(hfb)
          # Perform inverse Fourier transform of the product of wfb and hfb FFTs
          time_series = np.fft.irfft(wfb_fft*hfb_fft)[:self.nr]
          self.time_series = time_series
docs: Generate noise time series based on input parameters
  
          Returns
          -------
          time_series: np.array
              Time series with colored noise.
              len(time_series) == nr