docs: def filter_butter(samples, samplerate, filtertype, freq, order=5):
      # type: (np.ndarray, int, str, float, int) -> np.ndarray
      """
      Filters the samples with a digital butterworth filter
  
      samples   : mono samples
      filtertype: 'low', 'band', 'high'
      freq      : for low or high, the cutoff freq
                  for band, (low, high)
      samplerate: the sampling-rate
      order     : the order of the butterworth filter
  
      Returns --> the filtered samples
  
      NB: calls filter_butter_coeffs to calculate the coefficients
      """
      assert filtertype in ('low', 'high', 'band')
      b, a = filter_butter_coeffs(filtertype, freq, samplerate, order=order)
      return apply_multichannel(samples, lambda data:signal.lfilter(b, a, data))