code: def rayleigh(timeseries, segmentlength, noverlap=0):
      
      stepsize = segmentlength - noverlap
      if noverlap:
          numsegs = 1 + int((timeseries.size - segmentlength) / float(noverlap))
      else:
          numsegs = int(timeseries.size // segmentlength)
      tmpdata = numpy.ndarray((numsegs, int(segmentlength//2 + 1)))
      for i in range(numsegs):
          tmpdata[i, :] = welch(
              timeseries[i*stepsize:i*stepsize+segmentlength],
              segmentlength)
      std = tmpdata.std(axis=0)
      mean = tmpdata.mean(axis=0)
      return FrequencySeries(std/mean, unit='', copy=False, f0=0,
                             epoch=timeseries.epoch,
                             df=timeseries.sample_rate.value/segmentlength,
                             channel=timeseries.channel,
                             name='Rayleigh spectrum of %s' % timeseries.name)
docs: Calculate a Rayleigh statistic spectrum
  
      Parameters
      ----------
      timeseries : `~gwpy.timeseries.TimeSeries`
          input `TimeSeries` data.
  
      segmentlength : `int`
          number of samples in single average.
  
      noverlap : `int`
          number of samples to overlap between segments, defaults to 50%.
  
      Returns
      -------
      spectrum : `~gwpy.frequencyseries.FrequencySeries`
          average power `FrequencySeries`