Python实现十种滤波算法

引言

滤波算法是数字信号处理中常用的技术,用于去除噪声、平滑信号或者提取感兴趣的特征。Python是一种高级编程语言,拥有丰富的库和工具,可以方便地实现各种滤波算法。本文将介绍十种常见的滤波算法,并给出相应的Python代码示例。

1. 移动平均滤波算法

移动平均滤波算法是最简单的一种滤波算法,它通过计算一定时间窗口内的数据平均值来平滑信号。以下是Python中实现移动平均滤波算法的代码示例:

def moving_average_filter(data, window_size):
    filtered_data = []
    for i in range(len(data) - window_size + 1):
        window = data[i:i+window_size]
        filtered_data.append(sum(window) / window_size)
    return filtered_data

2. 中值滤波算法

中值滤波算法是一种非线性滤波算法,它通过计算一定时间窗口内的数据中位数来平滑信号。以下是Python中实现中值滤波算法的代码示例:

def median_filter(data, window_size):
    filtered_data = []
    for i in range(len(data) - window_size + 1):
        window = data[i:i+window_size]
        sorted_window = sorted(window)
        filtered_data.append(sorted_window[window_size // 2])
    return filtered_data

3. 加权滑动平均滤波算法

加权滑动平均滤波算法是一种改进的移动平均滤波算法,它通过给不同位置的数据赋予不同的权重来平滑信号。以下是Python中实现加权滑动平均滤波算法的代码示例:

def weighted_moving_average_filter(data, window_size, weights):
    filtered_data = []
    for i in range(len(data) - window_size + 1):
        window = data[i:i+window_size]
        weighted_sum = sum([window[j] * weights[j] for j in range(window_size)])
        filtered_data.append(weighted_sum / sum(weights))
    return filtered_data

4. 卡尔曼滤波算法

卡尔曼滤波算法是一种最优滤波算法,它通过对信号进行递归估计来平滑信号。以下是Python中实现卡尔曼滤波算法的代码示例:

from filterpy.kalman import KalmanFilter

def kalman_filter(data):
    kf = KalmanFilter(dim_x=1, dim_z=1)
    kf.x = data[0]
    filtered_data = []
    for measurement in data:
        kf.predict()
        kf.update(measurement)
        filtered_data.append(kf.x)
    return filtered_data

5. 低通滤波算法

低通滤波算法是一种常用的频域滤波算法,它通过滤除高频分量来平滑信号。以下是Python中实现低通滤波算法的代码示例:

from scipy.signal import butter, filtfilt

def low_pass_filter(data, cutoff_freq, sampling_freq):
    nyquist_freq = 0.5 * sampling_freq
    normalized_cutoff_freq = cutoff_freq / nyquist_freq
    b, a = butter(4, normalized_cutoff_freq, btype='low', analog=False)
    filtered_data = filtfilt(b, a, data)
    return filtered_data

6. 高通滤波算法

高通滤波算法是一种常用的频域滤波算法,它通过滤除低频分量来平滑信号。以下是Python中实现高通滤波算法的代码示例:

from scipy.signal import butter, filtfilt

def high_pass_filter(data, cutoff_freq, sampling_freq):
    nyquist_freq = 0.5 * sampling_freq
    normalized_cutoff_freq = cutoff_freq / nyquist_freq
    b, a = butter(4, normalized_cutoff_freq, btype='high', analog=False)
    filtered_data = filtfilt(b, a,