我在$ \ Delta t $处采样了一个信号:$ f_i(t_i = i \ Delta t)$,其中$ i = 0,\ ldots,n-1 $。
我想找到一阶和二阶导数信号:$ f'(t)$和$ f''(t)$。

我的第一个想法是通过中心差来估计导数:

\开始{align}
f'(t_ {i})&= \ frac {f(t_ {i + 1})-f(t_ {i-1})} {2 \ Delta t} \\
f''(t_ {i})&= \ frac {f(t_ {i + 1})-2f(t_ {i})+ f(t_ {i-1})} {{\ Delta t )^ 2}
\ end {align}

但是信号可能会有很多高频噪声,可能导致$ f'$和$ f''$迅速波动。

找到$ f'$和$ f''$的“平滑”估计的最佳方法是什么?

#1 楼

这可能更多取决于您的数据。只是知道,由于微分是线性运算,因此,如果选择任何线性滤波器来平滑f'和f'',则等效于使用相同的滤波器平滑f,然后取其导数。

可以您张贴一些图片或有关您要区分的信号的更多信息?可能您正在寻找某种低通滤波器来平滑信号。几个非常简单的选择包括单极递归滤波器,例如$ y(n)= \ cdot x(n)+(1-a)\ cdot y(n-1)$,或Hann滤波器,它只是用Hann窗口对信号进行卷积。 Hann滤波器选项很好,因为它是线性相位。如果知道您关心的频率范围,则只需在频域中设计合适的低通滤波器即可。

评论


$ \ begingroup $
谢谢schnarf!因此,由于先进行平滑再进行微分等于先进行微分再进行平滑;我还可以通过与例如汉恩窗?在较大的跨度上使用有限差分的简单方法怎么样:f'(t)〜= [f(t + 10 * Dt)-f(t-10 * Dt)] /(20 * Dt),这会给出一个很好的平滑导数估计?
$ \ endgroup $
–安迪
2011-12-19 7:53

#2 楼

Savitzky-Golay滤波器可平滑估计信号和前几个导数。

可在此处找到MATLAB实现。