code: def fm_discriminator(Signal):
      
      S_analytic = _hilbert(Signal)
      S_analytic_star = _GetComplexConjugateArray(S_analytic)
      S_analytic_hat = S_analytic[1:] * S_analytic_star[:-1]
      R, I = _GetRealImagArray(S_analytic_hat)
      fmDiscriminator = _np.arctan2(I, R)
      return fmDiscriminator
docs: Calculates the digital FM discriminator from a real-valued time signal.
  
      Parameters
      ----------
      Signal : array-like
          A real-valued time signal
  
      Returns
      -------
      fmDiscriminator : array-like
          The digital FM discriminator of the argument signal