- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在计算信号的一阶和二阶导数,然后进行绘图。我选择了在 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.
first_deriv = signal.savgol_filter(spectra_signal,sigma=7,2, deriv=1, delta=3.1966)
光谱信号是我的“y”变量,增量是“x”变量的变化。
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/
我正在尝试使用 scipy.signal.savgol_filter 函数过滤数据集,但出现错误 TypeError: expected x and y to have same length 当我尝
我想使用 scipy.signal 库中的 savgol_filter 过滤在线数据。但是当我尝试将它用于在线数据时(当新元素一个接一个地出现时)我意识到 savgol_filter 与离线数据(它们
我正在计算信号的一阶和二阶导数,然后进行绘图。我选择了在 SciPy(信号模块)中实现的 Savitzky-Golay 滤波器。我想知道是否需要缩放输出 - 在同一过滤器的 Matlab 实现中,指定
我是一名优秀的程序员,十分优秀!