docs: def _spectrogram_scipy_fourier(data, fs, nt, nch, fmin=None,
                                 window=('tukey', 0.25), deg=False,
                                 nperseg=None, noverlap=None,
                                 detrend='linear', stft=False,
                                 boundary='constant', padded=True, warn=True):
      """ Return a spectrogram for each channel, and a common frequency vector
  
      The min frequency of interest fmin fixes the nb. of pt. per seg. (if None)
      The number of overlapping points is set to nperseg-1 if None
      The choice of the window type is a trade-off between:
          Spectral resolution between similar frequencies/amplitudes:
              =>
          Dynamic range (lots of != frequencies of != amplitudes):
              =>
          Compromise:
              => 'hann'
      """
  
      # Check inputs
      if nperseg is None and fmin is None:
          fmin = _fmin_coef*(fs/nt)
          if warn:
              msg = "nperseg and fmin were not provided\n"
              msg += "    => fmin automatically set to 10.*fs/nt:\n"
              msg += "       fmin = 10.*{0} / {1} = {2} Hz".format(fs,nt,fmin)
              warnings.warn(msg)
  
      # Format inputs
      if nperseg is None:
          assert fmin > fs/nt
          nperseg = int(np.ceil(fs/fmin))
  
      if nperseg%2==1:
          nperseg = nperseg + 1
      if noverlap is None:
          noverlap = nperseg - 1
      n = int(np.ceil(np.log(nperseg)/np.log(2)))
      nfft = 2**n
  
      # Prepare output
      if stft:
          f, tf, ssx = scpsig.stft(data, fs=fs,
                                   window=window, nperseg=nperseg,
                                   noverlap=noverlap, nfft=nfft, detrend=detrend,
                                   return_onesided=True, boundary=boundary,
                                   padded=padded, axis=0)
      else:
          f, tf, ssx = scpsig.spectrogram(data, fs=fs,
                                          window=window, nperseg=nperseg,
                                          noverlap=noverlap, nfft=nfft,
                                          detrend=detrend, return_onesided=True,
                                          scaling='density', axis=0,
                                          mode='complex')
  
      # Split in list (per channel)
      lssx = np.split(ssx, np.arange(1,nch), axis=1)
      lssx = [ss.squeeze().T for ss in lssx]
      lpsd = [np.abs(ss)**2 for ss in lssx]
      lang = [np.angle(ss, deg=deg) for ss in lssx]
  
      return f, tf, lpsd, lang