savgol_filter简介
Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出,是光谱预处理中常用滤波方法,它的核心思想是对一定长度窗口内的数据点进行k阶多项式拟合,从而得到拟合后的结果。对它进行离散化处理后后,S-G 滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。这种滤波器最大的特点在于在滤除噪声的同时可以确保信号的形状、宽度不变。
它对信号的操作是在时域内对window_length内的数据进行多项式拟合。而从频域上看,这种拟合实际就是通过了低频数据,而滤掉了高频数据。
这种滤波其实是一种移动窗口的加权平均算法,但是其加权系数不是简单的常数窗口,而是通过在滑动窗口内对给定高阶多项式的最小二乘拟合得出。
总之,平滑滤波是光谱分析中常用的预处理方法之一。用Savitzky-Golay方法进行平滑滤波,可以提高光谱的平滑性,并降低噪音的干扰。S-G平滑滤波的效果,随着选取窗宽不同而不同,可以满足多种不同场合的需求。
savgol_filter原理
表达式为:
scipy.signal.savgol_filter(x, window_length, polyorder)
详细表达式和定义可以查看下面链接:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.savgol_filter.html
参数的含义:
1、x为要滤波的信号;
2、window_length即窗口长度;取值为奇数且不能超过len(x)。它越大,则平滑效果越明显;越小,则更贴近原始曲线。
3、polyorder为多项式拟合的阶数。它越小,则平滑效果越明显;越大,则更贴近原始曲线。
参数window_length对平滑的效果
import os
import matplotlib.pyplot as plt
import scipy.signal
import numpy as np
def main():
# 项目目录
dir = "D:\\a_user_file\\8_data"
filename = '1.csv'
path = os.path.join(dir, filename)
with open(path, "r") as fname:
data = fname.read()
lines = data.split("\n")
lines = lines[1:5000]
raw_data = []
for i in range(len(lines))

Savitzky-Golay滤波器是一种用于光谱预处理的滤波方法,通过窗口内的多项式拟合实现平滑效果。window_length参数越大,平滑度越高;polyorder参数越大,曲线拟合更接近原始数据,但过大可能导致高频信息丢失。文章通过代码示例展示了这两个参数对平滑曲线的影响。
最低0.47元/天 解锁文章
1259

被折叠的 条评论
为什么被折叠?



