时域数据信号滑动处理(2)——滑动最小二乘拟合SLS
废话不说,直接上一般性最小二乘法公式:
公式1表示拟合公式,其中需要拟合的点为 1 -> n 这n个点。
滑动算法简单变换就是把 1->n 这些点变换为 2 -> n+1 这些点。
公式变换为
其中q表示从第几个点开始计算,也就是计算的点是 q -> n+q-1 这n个点。
单纯从时域上来考虑,这里会遇到一个问题,就是自变量x是随着q的变大而不断变大的,简单假设采样频率是1Hz,那么随着时间累加,x就会是一个很大的数,对于在线处理的情况,需要在 x^2 小于类型最大值(如 int16 )之前关闭重启软件。
那么现在提供一种新的思路(此方法只限于等距x)。
这里我们规定,每次计算的x都是固定从1 -> n 这n个点(为了方便计算,令x=1,2,…,n),变的只是 xi 对应的 yi 的值。
现在我们首先对公式2、公式3做一步简单拆分替换
这里因为x的值是固定不变的,所以 Sigam_x 和 Sigma_xx 的值是定值。需要迭代的是有 y 的值,也就是Sigma_xy,Sigma_y。
先说简单的,Sigma_y的迭代公式为:
其中 out_y 就是要出队的y值,in_y 就是要入队的y值
稍复杂的Sigma_xy的迭代公式为:
这样就可以迭代 β1 和 β0 了。具体代码就不写了。
现在先说一下这种方法的特点:
局限性:(1)x轴间隔必须是等距,如固定采样率。
优势:(1)避免数值超类型最大值
(2)通过部分值迭代方式避免重复计算
(3)可以连续拟合得到参数