def notch_filter(data: FLOATS_TYPE,
                 sampling_freq_hz: float,
                 notch_freq_hz: float,
                 quality_factor: float) -> FLOATS_TYPE:
    """
    Design and use a notch (band reject) filter to filter the data.

    Args:
        data: time series of the data
        sampling_freq_hz: sampling frequency :math:`f_s`, in Hz
            (or other consistent units)
        notch_freq_hz: notch frequency, in Hz
            (or other consistent units)
        quality_factor: notch filter quality factor, :math:`Q`

    Returns:
        filtered data
    """
    b, a = iirnotch(
        w0=normalized_frequency(notch_freq_hz, sampling_freq_hz),
        Q=quality_factor
    )
    filtered_data = lfilter(b=b, a=a, x=data)
    return filtered_data