一维滤波
butter_filter
butter_filter(
data: xr.DataArray | np.ndarray,
btype: Literal["lowpass", "highpass", "bandpass", "bandstop"],
freq: QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum] = None,
period: QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum] = None,
sample_freq: QuantityOrNum = None,
sample_interval: QuantityOrNum = None,
axis: int | str = 0,
N: int = 3,
) -> xr.DataArray | np.ndarray
使用 Butterworth 滤波器过滤数据。推荐各个参数都带单位,避免单位转换造成的问题。
滤波的范围可以用 freq 参数指定频率,或用 period 参数指定周期,必须指定其中一个。
若滤波器类型为 'lowpass' 或 'highpass',则只需指定单个值;
若滤波器类型为 'bandpass' 或 'bandstop',则需指定一对值 (min, max)。
同样,参数 sample_freq 与 sample_interval 为数据的采样频率或采样间隔,
如果数据为 xarray.DataArray 时,可以不指定,程序会自动从坐标中计算该值,
否则必须指定其中一个。
Example
>>> data = xr.open_dataarray('data.nc') # ('time', 'lat', 'lon')
>>>
>>> # 5~10 日周期带通滤波(不带单位)
>>> butter_filter(data, 'bandpass', period=(5, 10), axis='time')
>>>
>>> # 30 日低通滤波(带单位,数据为1日4次)
>>> from mositen_ew import unit
>>> butter_filter(data, 'lowpass', period=30 * unit('day'),
... sample_interval=0.25 * unit('day'), axis='time')
Parameters:
-
data(xr.DataArray | np.ndarray) –需要滤波的数据。
-
btype(Literal['lowpass', 'highpass', 'bandpass', 'bandstop']) –滤波器类型
-
freq(QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum], default:None) –滤波过滤的频率,若无单位则认为是 1/day (cpd), by default None
-
period(QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum], default:None) –滤波过滤的周期,若无单位则认为是 day (天), by default None
-
sample_freq(QuantityOrNum, default:None) –数据的采样频率,若无单位则认为是 1/day (cpd), by default None
-
sample_interval(QuantityOrNum, default:None) –数据的采样间隔,若无单位则认为是 day (天), by default None
-
axis(int | str, default:0) –滤波的轴,如果 data 是 xarray.DataArray 时,可以使用维度名称字符串。
-
N(int, default:3) –巴特沃斯滤波器的阶数, by default 3
Returns:
-
xr.DataArray | np.ndarray–滤波后的数据,类型与输入 data 相同。
fft_time_filter
fft_time_filter(
data: xr.DataArray | np.ndarray,
filter_type: Literal["lowpass", "highpass", "bandpass", "bandstop"],
freq: QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum] = None,
period: QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum] = None,
sample_interval: QuantityOrNum = None,
sample_freq: QuantityOrNum = None,
axis: str | int = 0,
window: bool | float = 0.1,
) -> xr.DataArray | np.ndarray
使用 FFT 方法对时间序列数据进行滤波。指定的频率、采样间隔都可以带单位。
Parameters:
-
data(xr.DataArray | np.ndarray) –需要滤波的数据,可以是 xarray.DataArray 或 numpy.ndarray。
-
filter_type(Literal['lowpass', 'highpass', 'bandpass', 'bandstop']) –过滤类型
-
freq(QuantityOrNum | tuple[QuantityOrNum, QuantityOrNum], default:None) –滤波的频率,如果输入为数字,则认为单位是 1/day (cpd)。
- 对于低通滤波器('lowpass')和高通滤波器('highpass'),输入单个频率值。
- 对于带通滤波器('bandpass')和带阻滤波器('bandstop'), 输入频率范围的元组 (low_freq, high_freq)。
-
sample_interval(QuantityOrNum, default:None) –采样时间间隔,如果输入为数字,则认为单位是日。
- 如果 data 是 xarray.DataArray 时,默认(sampling_interval=None)从坐标中 自动计算该值;
- 如果 data 是 numpy.ndarray,则必须提供该参数。
-
axis(str | int, default:0) –时间维度所在 axis,如果 data 是 xarray.DataArray 时,可以使用维度名称字符串
-
window(bool | float, default:0.1) –是否对时间序列数据应用 turky 窗函数以减少头尾偏差。
- 如果为 False,则不应用窗函数;
- 如果为 float,则表示 turky 窗函数的 alpha 参数,范围为 0 到 1 之间, 默认为 0.1。
Returns:
-
xr.DataArray | np.ndarray–滤波后的数据,类型与输入 data 相同。