
MATLAB R2021B中的移动窗口统计值计算(包括平均值、方差等算法)及其在多种信号
处理中的应用
**信号处理中的统计魔法:滚动计算的高效打开方式**
在分析实时数据流时,传统“滑动窗口+重复计算”的方式就像每次搬家都重新装修一遍——费时费力
。今天介绍一种递推算法,只需一次遍历,就能动态更新均值、方差、偏度等统计量,适用于金融波动分析、
机械故障检测甚至心电信号处理等场景。
先看一段核心代码(MATLAB R2021b):
```matlab
for n = 1: N
delta = x(n) - M1;
M1 = M1 + delta / n;
M3 = M3 + delta^3 * (n - 1)*(n - 2)/(n^2) - 3*delta*M2/n;
M2 = M2 + delta^2 * (n - 1)/n;
end
```
这段代码像滚雪球一样,每次迭代仅用当前数据点更新统计量。`M1`、`M2`、`M3`分别对应均值、二
阶中心矩和三阶中心矩。**关键变量`delta`的作用是计算当前数据与当前均值的偏差**,类似于“突然出
现的意外值对系统的影响”。
**递推均值(M1)的奥秘**:
```matlab
delta = x(n) - M1;
M1 = M1 + delta / n;
```
这里采用经典的**Welford算法**。假设已有前`n-1`个数据的均值为`M1`,当第`n`个数据到来时,
增量`delta`即为新数据与旧均值的差异。通过`delta/n`调整均值,避免了传统求和再除法的内存消耗。
**方差(M2)的动态平衡**:
```matlab
M2 = M2 + delta^2 * (n - 1)/n;
```
二阶矩的更新公式暗藏玄机。`(n-1)/n`的作用类似于**无偏修正**的逆向操作。最终方差可计算
为`M2/(n-1)`(样本方差)或`M2/n`(总体方差),根据场景选择。