Savitzky-Golay滤波的Python实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。

一、高斯滤波器

我们在作图的过程中,曲线往往会因为数据点过多而波动性大,高斯滤波器通过复杂的操作使得曲线更加平滑化和简单。

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、使用结果

1.原先的曲线

可能是这个样子的:
在这里插入图片描述

2.滤波后的曲线

变成了这样:
在这里插入图片描述

代码

导入包:

import numpy as np
import scipy
from scipy.integrate import simps  # 用于计算积分
import matplotlib.pyplot as plt  # 用于画图
import pandas as pd
import csv
from scipy import signal

主体:

x=[]
y=[]
with open('input1.csv') as f:
    f_csv = csv.reader(f)
    headers = next(f_csv)
    for row in f_csv:
        x.append(row[0])
        y.append(row[1])
    x =[int(num) for num in x]
    y = [int(float(num)) for num in y]

v = scipy.signal.savgol_filter(y,21,3) #这些参数效果较好

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Savitzky-Golay滤波器是一种常见的信号处理技术,用于平滑或者去噪数据。它使用多项式拟合来估计数据的局部趋势,并用这个估计值来代替原始数据。 在Python中,我们可以使用SciPy库中的signal模块来实现Savitzky-Golay滤波器。具体来说,我们可以使用`scipy.signal.savgol_filter`函数来进行滤波操作。 该函数的基本参数包括输入数组(一维或多维)、窗口长度(即滤波器的宽度,必须是一个整数),以及用于多项式拟合的多项式的次数。 例如,如果我们有一个包含随机噪声的信号数组,我们可以使用Savitzky-Golay滤波器对其进行平滑处理。下面是一个使用Savitzky-Golay滤波器平滑信号的简单示例代码: ```python import numpy as np from scipy.signal import savgol_filter # 生成随机噪声信号 np.random.seed(0) x = np.linspace(0, 10, 100) y = np.sin(x) + np.random.rand(100) * 0.5 # 使用Savitzky-Golay滤波器进行平滑处理 smoothed_y = savgol_filter(y, window_length=11, polyorder=3) # 打印平滑后的信号 print(smoothed_y) ``` 在上面的代码中,`window_length`参数指定了滤波器的宽度,我们这里使用了11,`polyorder`参数指定了多项式的次数,我们这里使用了3。运行代码后,我们将得到平滑后的信号输出。 总之,Savitzky-Golay滤波器是一种在Python实现的信号处理技术,可以用于平滑或去噪数据。通过使用SciPy库中的`savgol_filter`函数,我们可以方便地进行滤波操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值