我有一个采样率为F赫兹的信号。
我想从中产生一个 RMS 信号,每秒F个样本,窗口大小为N个样本。
使用标准移动 RMS 算法,我必须每秒迭代N个最近的样本F次,从而导致每秒F * N次操作。
有没有办法逼近每秒仅使用F次操作(或接近它)的移动 RMS 信号?
我知道对于其他过程,例如迭代,存在可以近似输出的“泄漏”算法。除了泄漏的迭代器,还有“泄漏的 RMS”之类的东西吗?
我有一个采样率为F赫兹的信号。
我想从中产生一个 RMS 信号,每秒F个样本,窗口大小为N个样本。
使用标准移动 RMS 算法,我必须每秒迭代N个最近的样本F次,从而导致每秒F * N次操作。
有没有办法逼近每秒仅使用F次操作(或接近它)的移动 RMS 信号?
我知道对于其他过程,例如迭代,存在可以近似输出的“泄漏”算法。除了泄漏的迭代器,还有“泄漏的 RMS”之类的东西吗?
有办法做到这一点,它真的类似于移动平均线
: 每个周期的样本数
: 蓄能器
: 当前样本
基本上,您需要一条延迟线来存储之前的样本,或者更好的是之前的样本,并且您需要一个累加器。在开始移动 RMS 之前,累加器和延迟线都应设置为 0。
基本上,每个样本需要 1 次乘法、2 次加法、1 次除法(乘以一个常数,因此相当于乘以另一个常数)和 1 次平方根运算。
编辑:每个周期的样本数应该是一个整数。有一些方法可以使用每个周期的非整数样本数来做到这一点,但它需要更多的工作。
编辑 2:只有当累加器是整数并且累加器永远不会像 Robert Bristow-Johnson 指出的那样回绕时,该方案才有效。如果累加器是浮点数,您可能会遇到无法摆脱的累加器中的某些值,因为浮点运算不能保证在所有条件下都是关联的。使用浮点运算时,请参阅注释中的 RBJ 解决方案。