带噪信号的趋势分析方法
带噪信号的趋势分析方法 前言 手头有两组时域采样数据,每组大约240个采样点。采样周期固定,信号值在两千到四千之间游走。 肉眼扫过去——毛刺很多,高频抖动明显。但拉远了看,似乎底下藏着某种缓慢变化的结构。就像隔着一层磨砂玻璃看一幅画,大色块能辨认,细节却糊成一团。 DSP里降噪去扰的招数不少。卡尔曼、Holt-Winters、高斯平滑、巴特沃斯、Savitzky-Golay,各有各的路子。我想试试——把这套工具搬到这个信号上,看谁能把底下的轮廓挖出来,谁会被噪声带跑偏。 另外再拿两组最简单的滑动平均(SMA和EMA)当参考线,看看"简单粗暴"和"精心设计"之间到底差多少。 信号概览 先看一眼这两组信号的素颜: 特征 Signal A Signal B 值域 2,863 ~ 3,652 3,097 ~ 4,030 振幅(span) 789 933 采样点 242 243 逐点变化率 std 1.17% 1.53% 均值 3,174 3,575 Signal A的振幅比Signal B小,但逐点变化率的峰值很大——有过几次接近 ±5% 的跳变。整体走势像一条被反复折叠的绳子:先往下摔,弹回来,又摔一次,再弹。方向频繁切换。 Signal B的振幅更大,但方向很一致——从头到尾在往上走。中途有几次小幅回撤,但不改大方向。 这两组信号的差异,决定了后面每种方法的命运。 一、卡尔曼滤波——让状态方程替你猜 原理 卡尔曼不直接相信观测值,也不全信预测值。它在两者之间做加权,权重由各自的不确定性决定。 设一个状态向量 $x_k = [p_k, v_k]^T$,装着"当前位置"和"变化速度"。假设信号按匀速模型演化: $$x_k = F x_{k-1} + w_k, \quad F = \begin{bmatrix}1 & \Delta t \ 0 & 1\end{bmatrix}$$ 每来一个新的观测 $z_k$,先预测、再修正: $$ \begin{aligned} \text{Predict:}\quad \hat{x}k^- &= F \hat{x}{k-1} \ P_k^- &= F P_{k-1} F^T + Q \[4pt] \text{Update:}\quad K_k &= P_k^- H^T (H P_k^- H^T + R)^{-1} \ \hat{x}_k &= \hat{x}_k^- + K_k (z_k - H \hat{x}_k^-) \ P_k &= (I - K_k H) P_k^- \end{aligned} $$ ...