gpt4 book ai didi

python - Savitzky-Golay 导数,用 SciPy 的 signal.savgol_filter 计算需要缩放吗?

转载 作者:行者123 更新时间:2023-12-04 12:59:04 25 4
gpt4 key购买 nike

我正在计算信号的一阶和二阶导数,然后进行绘图。我选择了在 SciPy(信号模块)中实现的 Savitzky-Golay 滤波器。我想知道是否需要缩放输出 - 在同一过滤器的 Matlab 实现中,指定需要对过滤器的输出进行缩放:

savitzkyGolayFilt(X,N,DN,F) filters the signal X using a Savitzky-Golay (polynomial) filter. The polynomial order, N, must be less than the frame size, F, and F must be odd. DN specifies the differentiation order (DN=0 is smoothing). For a DN higher than zero, you'll have to scale the output by 1/T^DN to acquire the DNth smoothed derivative of input X, where T is the sampling interval.



但是,我在 SciPy 的文档中没有找到类似的内容。有没有人尝试过并知道 Python 中的输出是否正确并且不需要进一步缩放?我为一阶导数运行的代码行是这样的: first_deriv = signal.savgol_filter(spectra_signal,sigma=7,2, deriv=1, delta=3.1966)光谱信号是我的“y”变量,增量是“x”变量的变化。

另外,我尝试在不使用 savgol_filter 的情况下计算一阶导数,而是使用 np.diff代替平滑信号(基于公式导数 = dy/dx)。 first_deriv_alternative = np.diff(signal.savgol_filter(spectra_signal, sigma=7,2))/3.1966 .结果也不一样。

工作代码示例:
import numpy as np
from scipy import signal

x =[405.369888, 408.561553, 411.753217, 414.944882, 418.136547, 421.328212, 424.519877, 427.711541, 430.903206]
y =[5.001440644264221191e-01,
4.990128874778747559e-01,
4.994551539421081543e-01,
5.002806782722473145e-01,
5.027571320533752441e-01,
5.053851008415222168e-01,
5.082427263259887695e-01,
5.122825503349304199e-01,
5.167465806007385254e-01]

#variation of x variable, constant step
sampling_step = x[1]-x[0]
#Method 1: using savgol_filter
deriv1_method1 = signal.savgol_filter(y,5,2,deriv=1, delta=sampling_step)

#Method 2: using np.diff to compute the derivative of the filtered original data
dy=np.diff(signal.savgol_filter(y, 5,2))
dx=np.diff(x)
deriv1_method2=dy/dx

#Method 3: filtering the first derivative of the original data
deriv1_method3=signal.savgol_filter((np.diff(y)/np.diff(x)), 5,2)

最佳答案

引擎盖下 signal.savgol_filter用途 signal.savgol_coeffs如果你看 the source code它说“分配给 y[deriv] 的系数缩放结果以考虑导数的顺序和样本间距”。结果在执行拟合和 convolve1d 之前进行了缩放。 .因此,默认情况下,结果似乎已经考虑到导数的顺序进行了缩放。

我认为在计算 Savitzky-Golay 滤波器后执行导数不会给你相同的结果,因为在这种情况下,你是在已经过滤的频谱上计算导数,而在第一种情况下,你在执行拟合之前执行导数和缩放。

关于python - Savitzky-Golay 导数,用 SciPy 的 signal.savgol_filter 计算需要缩放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61631978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com