HP滤波法的代码
以下是一种基于Python语言的HP滤波法的代码实现:
import numpy as np
from scipy.signal import butter, filtfilt
def butter_highpass(cutoff, fs, order=5):
"""
设计一个高通Butterworth滤波器。
:param cutoff: 截止频率,单位Hz。
:param fs: 采样率,单位Hz。
:param order: 滤波器阶数,默认为5。
:return: b, a 滤波器系数。
"""
nyq = 0.5 * fs
normal_cutoff = cutoff / nyq
b, a = butter(order, normal_cutoff, btype='highpass', analog=False)
return b, a
def highpass_filter(data, cutoff, fs, order=5):
"""
对数据进行高通滤波。
:param data: 待滤波的数据,可以是一维数组或二维矩阵。
:param cutoff: 截止频率,单位Hz。
:param fs: 采样率,单位Hz。
:param order: 滤波器阶数,默认为5。
:return: 滤波后的数据。
"""
b, a = butter_highpass(cutoff, fs, order=order)
if data.ndim == 1:
return filtfilt(b, a, data)
elif data.ndim == 2:
filtered_data = np.zeros_like(data)
for i in range(data.shape[1]):
filtered_data[:, i] = filtfilt(b, a, data[:, i])
return filtered_data
else:
raise ValueError('data的维度必须为1或2!')
使用方法如下:
data = np.loadtxt('data.txt') # 读取待滤波的数据
fs = 1000 # 采样率,单位Hz
cutoff = 50 # 截止频率,单位Hz
order = 5 # 滤波器阶数,默认为5
filtered_data = highpass_filter(data, cutoff, fs, order=order) # 对数据进行高通滤波
原文地址: http://www.cveoy.top/t/topic/bAp2 著作权归作者所有。请勿转载和采集!