<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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