计算离散信号的 n 导数的方法

信息处理 过滤器 离散信号 信号分析 衍生物 推导
2021-12-22 06:48:06

这是一个关于如何计算数字信号导数的非常普遍的问题x[n].

我想知道有哪些不同的方法(从幼稚到复杂)以及它们之间的比较如何?是否可以使用 FIR/IIR 滤波器?什么是赞成和反对。哪个更适合实时应用程序?

2个回答

导数的估计很简单:

x(n) =x(n+1)x(n1)2

x(n) =x(n+1)2x(n)+x(n1)

或者如果你有一个在ti=iΔt采样的信号,它是

x(ti) =x(ti+1)x(ti1)2Δt

x(ti) =x(ti+1)2x(ti)+x(ti1)(Δt)2

您感兴趣的可能是如何平滑估计。是的,您可以使用一些递归过滤器,例如 y(n)=ax(n)+(1a)y(n1),或者只使用一些简单的窗口(Hann window for例子)。

为了在不严重扭曲信号的情况下实现高 SNR,Savitzky–Golay 滤波器还通过使用具有线性最小二乘法的低次多项式拟合相邻数据点的连续子集来平滑您的数据。

编辑

信号行向量的 N 次导数的 Matlab 代码x

dx = x; %'Zeroth' derivative

for n = 1:N % Apply iteratively

    dif = diff(dx,1); % First derivative
    first = [dif(1) dif];
    last = [dif dif(end)];

    dx = (first+last)/2;
end

维基百科上有一篇很好的文章:数值微分

由于您希望微分是(反?)对称的,因此使用 IIR 滤波器可能不是最明智的想法。