我在$ \ Delta t处采样了一个信号:fi(ti = i \ Delta t)$,其中i = 0..n-1。我想找到信号的一阶导数:f'(t)。

我的第一个想法是通过一个中心差来估算该值:

$ f'(t_i )= \ frac {f(t_ {i + 1})− f(t_ {i-1})} {2 \ Delta t} $

但是信号可能会有很多高频可能会导致f'快速波动的噪声。
我想适当的选择可能是通过与窗函数(例如Hann)进行卷积来平滑信号,然后从差异中找到导数。

一位同事建议了一种更快的求导数平滑估计的方法:
使用2n个样本的中心差,其中n >> 1:

$ f'(t_i)= \ frac {f(t_ {i + n})− f(t_ {i-n})} {2n \ Delta t} $

这当然是计算上的比第一次使用窗口函数进行卷积运算要快,但这是一个好的解决方案吗? i-n + 1})+ f'(t_ {i-n + 2})+ .. + f'(t_ {i + n-1})] $

并展开每个导数通过步骤$ \ Delta t $的中心差:

$ S = f(t_ {i-n + 2})-f(t_ {in})+ f(t_ {i-n +3})-f(t_ {i-n + 2})+ .. + f(t_ {i + n})-f(t_ {i + n-2})$

除两个之外的所有项都被抵消:

$ S = f(t_ {i + n})-f(t_ {in})= 2n \ Delta tf'(t_i)$

因此:

$ f'(t_i)= \ frac {1} {n} [f'(t_ {i-n + 1})+ f'(t_ {i-n +2})+ .. + f'(t_ {i + n-1})] $

因此,取2n个样本的中心差等效于首先通过大小为2n的矩形窗口进行卷积-2然后取一个中心差超过+/- 1个样本。

用矩形窗口平滑有多“不好”?

如果进行FFT,这会导致“振铃”,但我们不需要进行FFT。

预先感谢您的回答!

#1 楼

通常这是一个很难解决的问题。一直使用矩形窗口进行平滑(通常称为“移动平均值”),因此这不一定是问题。我不确定您指的是什么响声,也许是矩形窗口的频率响应的旁瓣。

区别本质上是高通操作;理想的连续时间微分器的传递函数为:

$$
H(s)= s
$$

因此其幅度响应为:

$$
| H(j \ omega)| = \ omega
$$$

因此,微分器的增益随频率单调增加。如果您的信号包含高频噪声,则可以通过应用微分器将其放大。为了解决这个问题,有两种方法很明显:


设计一个更复杂的微分滤波器,该滤波器在覆盖感兴趣信号的频带部分具有所需的线性幅度响应,然后急剧衰减更高的频率。例如,您可以使用最小二乘方法或频率采样方法来设计这样的滤波器。
使用级联方法,首先抑制所有可以使用低通滤波器的高频噪声,然后再跟随与微分。微分器的频率覆盖范围不必太紧,因为低通滤波器将消除带外噪声。

如果您使用线性滤波器,则这些方法应该大致等效;您可能会想到第一个单滤波器方法只是微分器和低通滤波器的级联。如您所述,可以通过这种方式对中心差方法进行建模。没有人不了解您的应用程序,很难有人说这是“不好的”。我的主要思想是,如果平滑操作有形地衰减您感兴趣的信号,则这是“不好的”,这样导数估计不再有用。但是,如果信号的参数使得您可以平滑噪声而又不会明显失真信号(即,如果信号被很好地过采样),则可能是个好选择。