Source code for pyrfu.pyrf.lowpass
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 3rd party imports
import xarray as xr
from scipy import signal
__author__ = "Louis Richard"
__email__ = "louisr@irfu.se"
__copyright__ = "Copyright 2020-2023"
__license__ = "MIT"
__version__ = "2.4.2"
__status__ = "Prototype"
[docs]def lowpass(inp, f_cut, fhz):
r"""Filter the data through low or highpass filter with max
frequency f_cut and subtract from the original.
Parameters
----------
inp : xarray.DataArray
Time series of the input variable.
f_cut : float
Cutoff frequency.
fhz : float
Sampling frequency.
Returns
-------
out : xarray.DataArray
Time series of the filter data.
"""
data = inp.data
# Remove trend
data_detrend = signal.detrend(data, type="linear", axis=0)
rest = data - data_detrend
# Elliptic filter
f_nyq, r_pass, r_stop, order = [fhz / 2, 0.1, 60, 4]
elliptic_filter = signal.ellip(
order,
r_pass,
r_stop,
f_cut / f_nyq,
output="ba",
)
# Filter data
out_data = signal.filtfilt(
elliptic_filter[0],
elliptic_filter[1],
data_detrend,
axis=0,
)
out = xr.DataArray(out_data + rest, coords=inp.coords, dims=inp.dims)
return out