docs: def lowpass_filter(data: FLOATS_TYPE,
                     sampling_freq_hz: float,
                     cutoff_freq_hz: float,
                     numtaps: int) -> FLOATS_TYPE:
      """
      Apply a low-pass filter to the data.
  
      Args:
          data: time series of the data
          sampling_freq_hz: sampling frequency :math:`f_s`, in Hz
              (or other consistent units)
          cutoff_freq_hz: filter cutoff frequency in Hz
              (or other consistent units)
          numtaps: number of filter taps
  
      Returns:
          filtered data
  
      Note: number of filter taps = filter order + 1
      """
      coeffs = firwin(
          numtaps=numtaps,
          cutoff=normalized_frequency(cutoff_freq_hz, sampling_freq_hz),
          pass_zero=True
      )  # coefficients of a finite impulse response (FIR) filter using window method  # noqa
      filtered_data = lfilter(b=coeffs, a=1.0, x=data)
      return filtered_data