1a2b3c 发表于 2024-1-6 11:51:34

再免费请教个数据变化率的算法

条件:有一个每秒钟会更新的数据输入,
需求:需要得到一个新的数据,是每分钟的数据变化率,这个每分钟变化率也是最后要求每秒钟都更新输出(可以允许最初的不足一分钟的前面部分不更新输出),

那么如何计算这个每秒钟都更新输出的“分钟变化率”呢?

举个 可能还不一定对的例子,假如有一分钟内的数据输入,每秒钟都是加1输入的,那么最后的分钟变化率就是: 60/分钟;假如每秒钟来的数据都是+1后下次是-1的,那么分钟变化率就是 0 ?

rclong 发表于 2024-1-6 12:26:24

如果算力足够,我理解的是过去60秒数据的正态分布拟合的δ值,或者统计里的方差

没有公式的去定义的话,仅凭文字确实容易引起歧义

thepresent 发表于 2024-1-6 12:29:06

取过去一分钟的60个数做线性拟合,得出曲线的斜率就是一分钟变化率了。线性拟合基于最小二乘法,有现成的算法

hexenzhou 发表于 2024-1-6 13:08:31

求拟合不对吧,拟合后的斜率只能表示数据变化的趋势,不能表示变化率,假设数据是一个周期幅度变化很大的方波,那么斜率是0,没有变化?显然是不对的。变化率用统计学里最基本的方差公式最简单了。

t3486784401 发表于 2024-1-6 21:57:05

这涉及一个低通阈值的问题。楼主的需求,大致是个带低通的差商运算器。
在低通环节面前,任何方波都无法完整复现,尤其是大周期(基频低)、期望边缘陡峭(谐波多)。

具体的低通折转点,和采样频率之间取多少合适,这个楼主应该更具体明确下。举例:

a. 有序列 [+1-1+1-1 ...] 期望输出 DC 信号,很显然在 f= fs/2 频点的信号,应该位于低通阻带;
b. 有序列[+1+100-1-100+1+1 ...] 期望能跟随实时的 0、±1 斜率,那就是要求 f= fs/8 频点位于通带;

类似这样的描述,大致确定这个 LPF 参数

1a2b3c 发表于 2024-1-6 22:43:50

t3486784401 发表于 2024-1-6 21:57
这涉及一个低通阈值的问题。楼主的需求,大致是个带低通的差商运算器。
在低通环节面前,任何方波都无法完 ...
(引用自5楼)

谢谢楼上各位!
其实实际使用中是这样的场景:
比如无人机在空中飞行,高度值是不断动态变化的(哪怕高度不变也认为是变着,只是最终变化率是0),其值每秒钟都会更新,那么现在是需求方是要求每秒钟更新输出一个“每分钟的变化率”,实际上就是在爬升/下降/的值换算到每分钟的表述,但是又要求美秒更新。

t3486784401 发表于 2024-1-6 23:04:03

1a2b3c 发表于 2024-1-6 22:43
谢谢楼上各位!
其实实际使用中是这样的场景:
比如无人机在空中飞行,高度值是不断动态变化的(哪怕高度 ...
(引用自6楼)

就好比你在 excel 当中给曲线添加 average 走势线。
选择不同长度的样本窗口,走势线是有区别的,窗口越长,走势线约趋于平缓,但对于瞬态的响应也就没了。

这里 excel 的窗口,实际就是低通的截止参数,窗口越大,通带越低。

回到这个应用,你有序列 X=,已知采样间隔 fs= 1Hz.
作一阶差商 V=Xn+1 - Xn= ,

实际上 V 序列就是瞬时速度,对 V 取均值滤波(相当于低通),就是 LZ 位置需要的结果。

唯一问题是:滤波窗口多长,才能使得 V 序列既能反应实时速率,又能把高频的抖动平均掉?
同理,类似算法都会是低通滤波的效果,都会像 V 依赖于滤波窗口长度一样,依赖一个通带频率。这是需要 LZ 考虑的。

1a2b3c 发表于 2024-1-6 23:11:57

t3486784401 发表于 2024-1-6 23:04
就好比你在 excel 当中给曲线添加 average 走势线。
选择不同长度的样本窗口,走势线是有区别的,窗口越 ...
(引用自7楼)

感谢,
是的,现在还没有看到别人的可以参考,感觉自己挺难决定,
这个是一个实际工程应用,在以往的老式应用中是采用了一些物理机械的手段来完成,那个具有固有的迟滞,响应不迅速,反应慢,所以现在考虑电子模式,但是这里就拿不准了,才来问下大家,

t3486784401 发表于 2024-1-6 23:33:06

1a2b3c 发表于 2024-1-6 23:11
感谢,
是的,现在还没有看到别人的可以参考,感觉自己挺难决定,
这个是一个实际工程应用,在以往的老式 ...
(引用自8楼)

那建议采几组实地的数据,先用仿真来确定参数,最后再固化到特定的程序里。

zchong 发表于 2024-1-7 08:51:59

简单粗暴的算法:建立一个60s的时间窗,当前这一秒接收的的数据减去60秒前收到数据,就是变化率。剩下的就是根据实际的应用环境进行一些平滑处理啦。{:lol:}
页: [1]
查看完整版本: 再免费请教个数据变化率的算法