以下是一种基于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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录