code: def fir_from_transfer(transfer, ntaps, window='hanning', ncorner=None):
      
      # truncate and highpass the transfer function
      transfer = truncate_transfer(transfer, ncorner=ncorner)
      # compute and truncate the impulse response
      impulse = npfft.irfft(transfer)
      impulse = truncate_impulse(impulse, ntaps=ntaps, window=window)
      # wrap around and normalise to construct the filter
      out = numpy.roll(impulse, int(ntaps/2 - 1))[0:ntaps]
      return out
docs: Design a Type II FIR filter given an arbitrary transfer function
  
      Parameters
      ----------
      transfer : `numpy.ndarray`
          transfer function to start from, must have at least ten samples
  
      ntaps : `int`
          number of taps in the final filter, must be an even number
  
      window : `str`, `numpy.ndarray`, optional
          window function to truncate with, default: ``'hanning'``
          see :func:`scipy.signal.get_window` for details on acceptable formats
  
      ncorner : `int`, optional
          number of extra samples to zero off at low frequency, default: `None`
  
      Returns
      -------
      out : `numpy.ndarray`
          A time domain FIR filter of length `ntaps`
  
      Notes
      -----
      The final FIR filter will use `~numpy.fft.rfft` FFT normalisation.
  
      If `ncorner` is not `None`, then `ncorner` extra samples will be zeroed
      on the left as a hard highpass filter.
  
      See Also
      --------
      scipy.signal.remez
          an alternative FIR filter design using the Remez exchange algorithm