python实现滤波算法 中值滤波 低通滤波(博文底部vx获取)

在信号处理中,滤波是一种常见的操作,用于改变信号的频率特性或去除噪声。在Python中,可以使用scipy库来实现各种滤波算法。下面是一些基本的滤波算法的示例:

  1. 中值滤波: 中值滤波是一种去除信号中噪声的非线性滤波方法,它用信号中每个点周围的中值来替代该点的值。

    from scipy.signal import medfilt
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 创建带有噪声的信号
    np.random.seed(42)
    signal = np.sin(2 * np.pi * 0.01 * np.arange(100)) + 0.2 * np.random.randn(100)
    
    # 中值滤波
    filtered_signal = medfilt(signal, kernel_size=3)
    
    # 绘制原始信号和滤波后的信号
    plt.plot(signal, label='Original Signal')
    plt.plot(filtered_signal, label='Filtered Signal')
    plt.legend()
    plt.show()
    

    pythonCopy code

    from scipy.signal import medfilt import numpy as np import matplotlib.pyplot as plt # 创建带有噪声的信号 np.random.seed(42) signal = np.sin(2 * np.pi * 0.01 * np.arange(100)) + 0.2 * np.random.randn(100) # 中值滤波 filtered_signal = medfilt(signal, kernel_size=3) # 绘制原始信号和滤波后的信号 plt.plot(signal, label='Original Signal') plt.plot(filtered_signal, label='Filtered Signal') plt.legend() plt.show()

  2. 低通滤波: 低通滤波器通常用于去除高频噪声,例如使用Butterworth滤波器。

    from scipy.signal import butter, lfilter
    import numpy as np
    import matplotlib.pyplot as plt
    
    def butter_lowpass_filter(data, cutoff_freq, sampling_rate, order=4):
        nyquist = 0.5 * sampling_rate
        normal_cutoff = cutoff_freq / nyquist
        b, a = butter(order, normal_cutoff, btype='low', analog=False)
        filtered_data = lfilter(b, a, data)
        return filtered_data
    
    # 创建带有高频噪声的信号
    np.random.seed(42)
    signal = np.sin(2 * np.pi * 0.2 * np.arange(100)) + 0.5 * np.random.randn(100)
    
    # 低通滤波
    cutoff_frequency = 0.1
    filtered_signal = butter_lowpass_filter(signal, cutoff_frequency, sampling_rate=1.0)
    
    # 绘制原始信号和滤波后的信号
    plt.plot(signal, label='Original Signal')
    plt.plot(filtered_signal, label='Filtered Signal')
    plt.legend()
    plt.show()
    

    pythonCopy code

    from scipy.signal import butter, lfilter import numpy as np import matplotlib.pyplot as plt def butter_lowpass_filter(data, cutoff_freq, sampling_rate, order=4): nyquist = 0.5 * sampling_rate normal_cutoff = cutoff_freq / nyquist b, a = butter(order, normal_cutoff, btype='low', analog=False) filtered_data = lfilter(b, a, data) return filtered_data # 创建带有高频噪声的信号 np.random.seed(42) signal = np.sin(2 * np.pi * 0.2 * np.arange(100)) + 0.5 * np.random.randn(100) # 低通滤波 cutoff_frequency = 0.1 filtered_signal = butter_lowpass_filter(signal, cutoff_frequency, sampling_rate=1.0) # 绘制原始信号和滤波后的信号 plt.plot(signal, label='Original Signal') plt.plot(filtered_signal, label='Filtered Signal') plt.legend() plt.show()

这只是两种常见的滤波方法的示例,实际上,根据信号的特点和任务需求,可能需要使用不同的滤波算法。根据具体情况,你可能需要调整滤波器的参数以及滤波器的类型。

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枚爱吃大蒜的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值