code: def interpolate_psd(psd_f, psd_amp, deltaF):
      
      # In some cases this will be a no-op. I thought about removing this, but
      # this function can take unequally sampled PSDs and it is difficult to
      # check for this. As this function runs quickly anyway (compared to the
      # moment calculation) I decided to always interpolate.
  
      new_psd_f = []
      new_psd_amp = []
      fcurr = psd_f[0]
  
      for i in range(len(psd_f) - 1):
          f_low = psd_f[i]
          f_high = psd_f[i+1]
          amp_low = psd_amp[i]
          amp_high = psd_amp[i+1]
          while(1):
              if fcurr > f_high:
                  break
              new_psd_f.append(fcurr)
              gradient = (amp_high - amp_low) / (f_high - f_low)
              fDiff = fcurr - f_low
              new_psd_amp.append(amp_low + fDiff * gradient)
              fcurr = fcurr + deltaF
      return numpy.asarray(new_psd_f), numpy.asarray(new_psd_amp)
docs: Function to interpolate a PSD to a different value of deltaF. Uses linear
      interpolation.
  
      Parameters
      ----------
      psd_f : numpy.array or list or similar
          List of the frequencies contained within the PSD.
      psd_amp : numpy.array or list or similar
          List of the PSD values at the frequencies in psd_f.
      deltaF : float
          Value of deltaF to interpolate the PSD to.
  
      Returns
      --------
      new_psd_f : numpy.array
         Array of the frequencies contained within the interpolated PSD
      new_psd_amp : numpy.array
         Array of the interpolated PSD values at the frequencies in new_psd_f.