Python滤波

import numpy as np
import matplotlib.pyplot as plt

def limit_filter(data, top=4):
    '''
        限幅滤波法(又称程序判断滤波法)  
        A、方法:  根据经验判断,确定两次采样允许的最大偏差值(设为top)每次检测到新值时判断:如果本次值与上次值之差<=top,则本次值有效  如果本次值与上次值之差>top,则本次值无效,放弃本次值,用上次值代替本次值  
        B、优点:  能有效克服因偶然因素引起的脉冲干扰  
        C、缺点:  无法抑制那种周期性的干扰  平滑度差
    '''
    flag_arr = np.argwhere(data<0)
    temp_data = abs(data)
    for i in range(1, len(temp_data)):
        if abs(temp_data[i] - temp_data[i-1])  > top:
            temp_data[i] = temp_data[i-1]
    temp_data[flag_arr] *= -1
    return temp_data

def median_filter(data, num=3):
    '''
        中位值滤波法  
        A、方法:  连续采样num次(num取奇数)  把num次采样值按大小排列  取中间值为本次有效值  
        B、优点:  能有效克服因偶然因素引起的波动干扰  对温度、液位的变化缓慢的被测参数有良好的滤波效果  
        C、缺点:  对流量、速度等快速变化的参数不宜  
    '''
    data_length = len(data)
    item_num = data_length // num + 1
    padwidth = item_num * num - data_length
    temp_data = np.pad(data, (0, padwidth), 'edge').reshape(item_num, num)
    median_arr = np.median(temp_data, axis=1).reshape(item_num).repeat(num)[:data_length]
    return median_arr


def average_filter(data, num=3):
    '''
        算术平均滤波法  
        A、方法:  连续取num个采样值进行算术平均运算  num值较大时:信号平滑度较高,但灵敏度较低  num值较小时:信号平滑度较低,但灵敏度较高  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值