如何使用Savitzky-Golay平滑系数计算导数。

8
Savitzky-Golay平滑滤波器可用于计算系数,从而通过将系数应用于相邻值来计算平滑后的y值。平滑曲线看起来很棒。
根据文献,系数还可用于计算高达5阶的导数。系数计算参数ld需要设置为导数的阶数。对于一阶导数,适当的设置是ld=1,导数值为累积和除以采样间隔h。
我的问题是:如何使用获得的系数计算累积和?如何计算导数?是否有示例代码?

维基百科关于数值平滑和微分的条目帮助我设计了一个S-G滤波器。 - Doug Currie
维基百科对平滑后的Y值与{a0,a1,a2,...,ak}值之间的关系,特别是在移动x上并不清楚。因此,在(xi,yi)处计算第一导数时,我们是否总是假设Z = 0?还是使用公式(a1 + 2 * a2 * z + 3 * a3 * z^2) / h?a1,a2和a3的值与yi或平滑后的Yi有什么关系?该公式确实给出了正确的形状,但在第一导数的平顶处(以正弦波为例),平顶点的值应该为零,如何实现这一点? - Lin Song Yang
1个回答

4
为了使用Savitzky-Golay平滑滤波器计算导数,多项式系数计算具有参数b,值b [derivative]必须设置为1.0,该数组将在LU分解调用中使用。
正确计算导数的关键是理解多项式公式:Y = a0 + a1 * z + a2 * z^2 + ... + ak * z^k。实际上,a0、a1、a2、...、ak是移动窗口内的平滑值,z = (x - x0) / h,对于移动窗口的中心点,我们可以假设z = 0,因为x = x0。
因此,在导数计算中:
dY/dx = a1/h; and d2Y/dx2 = 2a2/h^2.

其中a1和a2是通过使用对应导数上计算的系数对y进行平滑处理后得到的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接