惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Wang's Blog

【Atlas 移植训练营 极市×昇腾】 Atlas 移植初体验 使用vcpkg和CMake在vs code与clion中构建Qt应用 生成对抗网络(GANs) 机器学习中的一阶与随机优化方法:机器学习模型 经典CS问题Python实现:搜索问题 图像挖掘中Canny和Sobel边缘检测算法的性能分析 经典CS问题Python实现:简单问题 Design Patterns Used in Qt and OpenCV OpenCV Recipes:图像的几何变换 Jaya 优化算法及其变体 萤火虫算法 遗传算法 模拟退火 随机行走与最优化 自然启发式算法算法分析 机器学习之 TensorFlow 基础 数值 Python: 常微分方程 数值 Python: 求解方程 差分进化算法
Savitzky-Golay 滤波平滑与n阶导数系数的推导
2020-06-07 · via Wang's Blog

一组 $2m + 1$ 个连续值通过n次多项式($n < 2m + 1$)确定最佳均方拟合。该多项式的形式如下:

$$f_i = \sum_{k=0}^{k=n}b_{nk}i^k = b_{n0} + b_{n1}i + b_{n2}i^2 + … + b_{nn}i^n$$

该多项式的导数为:

$$\frac{df_i}{di} = b_{n1} + 2b_{n2}i + 3b_{n3}i^2 + … + nb_{nn}i^{n-1}$$

$$\frac{d^2f_i}{di^2} = 2b_{n2} + 3 \times 2 b_{n3}i + … + n(n - 1)b_{nn}i^{n - 2}$$

$$\frac{d^nf_i}{di^n} = n!b_{nn}$$

注意,在所考虑的坐标系中,i的值在-m到+m的范围内,且对于 $2m +1$ 个值的集合,$i = 0$ 在中心。因此,此时8阶导数的值由下式给出:

$$\bigl( \frac{d^8f_i}{di^8} \bigr)_ {i = 0} = 8!b_{n8} = a_{n8}$$

其中,

$$f_0 = b_{n0} = a_{n0}$$

$$\frac{df_0}{di} = b_{n1} = a_{n1}$$

$$\frac{d^2f_0}{di^2} = 2b_{n2} = a_{n2}$$

最小平方准则要求观测值$y_i$和计算值$f_i$之间差值的平方和,在所考虑的区间内,为最小值。

$$\frac{\partial}{\partial b_{nk}} \bigl [ \sum_{i = -m}^{i = m}(f_i - y_i)^2 \bigr ] = 0$$

关于$b_{n0}$最小化,我们有

$$\frac{\partial}{\partial b_{n0}} \bigl [ \sum_{i = -m}^{i = m} (b_{n0} + b_{n1} i + … + b_{nn}i^n - y_i)^2\bigr ] = 2 \sum_{i = -m}^{i=m} (b_{n0} + b_{n1}i + … + b_{nn}i^n - y_i) = 0$$

关于$b_{ni}$最小化,我们有

$$\frac{\partial}{\partial b_{ni}} \bigl[ \sum_{i=m}^{i=-m} (b_{n0} + b_{n1}i + … + b_{nn}i^n -y_i)^2 \bigr] = 2 \sum_{i=-m}^{i=m}(b_{n0} + b_{n1}i + … + b_{nn}i^n - y_i) i = 0$$

关于$b_{nr}$最小化,我们可得

$$2\sum_{i = -m}^{i = m} \bigl[ (\sum_{k = 0}^{k = n}b_{nk}i^k) - y_i \bigr] i^r = 0$$

或者

$$\sum_{i=-m}^{i=m}\sum_{k=0}^{k=n} b_{nk}i^{k+r} = \sum_{i=-m}^{i=m}y_ii^r$$

其中r是代表从0到n的方程数的索引(有n+1个方程)。左侧的求和可以互换,亦即,

$$\sum_{i=-m}^{i=m}\sum_{k=0}^{k=n} b_{nk}i^{k+r} = \sum_{k=0}^{k=n}\sum_{i=-m}^{i=m}b_{nk}i^r$$

最后,由于$b_{nk}$是独立于i的,

$$\sum_{k=0}^{k=n}b_{nk}\sum_{i=-m}^{i=m}i^{k+r} = \sum_{i=-m}^{i=m}y_ii^r = F_k$$

或者,

$$\sum_{k=0}^{k=n}b_{nk}S_{r+k} = F_k$$

其中,

$$S_{r+k} = \sum_{i=-m}^{i=m}i^{r+k} \tag {Vc}$$

$$F_k = \sum_{i=-m}^{i=m} i^k y_i$$

请注意,对于r+k为奇数时,$S_{r+k} = 0$。因为$S_{r+k}$只存在于r+k为偶数,所以n+1个方程的集合可以分成两组,一组用于k为偶数,一组用于奇数。因此,对于5次多项式,其中$n=5$

$$S_0b_{50} + S_2b_{52} + S_4b_{54} = F_0$$

$$S_2b_{50} + S_4b_{52} + S_6b_{54} = F_2 \tag {VIa}$$

$$S_4b_{50} + S_6b_{52} + S_8b_{54} = F_4$$

可用来解$b_{50}$、$b_{52}$和$b_{54}$,而

$$S_2b_{51} + S_4b_{53} + S_6b_{55} = F_1$$

$$S_4b_{51} + S_6b_{53} + S_8b_{55} = F_3 \tag {VIb}$$

$$S_6b_{51} + S_8b_{53} + S_10b_{55} = F_5$$

可用来解$b_{51}$$b_{53}$$b_{55}$。式VIa方程组与n=4的情况具有相同的形式,所以,$b_{40} = b_{50}$$b_{42}=b_{52}$$b_{44} = b_{54}$而方程组VIb与n=5具有相同的形式,所以,$b_{51} = b_{61}$$b_{53} = b_{63}$$b_{55}=b_{65}$。换言之,$b_{ns} = b_{n+1, s}$,若n与s都是偶数,或者都是奇数。例如,为了确定三次(或四次)曲线的三阶导数的最佳拟合,我们有:

$$S_2b_{31} + S_4b_{33} = F_1$$

$$S_4b_{31} + S_6b_{33} = F_3$$

$$b_{33} = \frac{S_2F_3 - S_4F_1}{S_2S_6 - {S_4}^2}$$

例如,当m = 4(2m + 1 = 9点)时,从式Vc得到

$$S_2 = 60, \quad S_4=708, \quad S_6=9780$$

$$b_{33} = \frac{60F_3 - 708F_1}{60(9780) - 708^2} = \frac{F_3 - 7F_1}{7128}$$

$$\frac{-14y_{-4} +7y_{-3} + 13y_{-2} + 9y_{-1} + 0y_0 - 9y_1 - 13y_2 -7y_3 + 14y_4}{1188}$$

$y_i$的系数构成一个三次多项式的三阶导数的卷积整数,该三次多项式是由最小二乘拟合9点确定。因为a33的值是3!b23,上述表达式中的分母必须除以6,才能得到198这个归一化因子。

在所有上述推导中,假设采样间隔与绝对横坐标间隔相同,也即,$\Delta x = 1$。否则,$\Delta x$的值必须包含在归一化过程中。因此,为了在一组m个值的中心点计算s阶导数,基于n次多项式拟合,我们必须计算

$$a_{nsm} = s!b_{nsm} = \frac{\sum_{i=-m}^{i=m} C_{ism}y_i}{\Delta^s N_{sm}}$$

请注意,由于$\Delta x^0 = 1$,在平滑的情况下,时间间隔无关紧要。

本文节选自:Savitzky A, Golay M J E. Smoothing and differentiation of data by simplified least squares procedures[J]. Analytical chemistry, 1964, 36(8): 1627-1639.