如何从具有缓慢变化的y=kx+b斜率的噪声信号中滤除一阶导数?k可以随时间缓慢变化,我想估计它的值。

我尝试了三种不同的方法:
dx(i) = (x(i)-x(i-99))/100window = 100平滑,然后用导数作为dx(i) = (x(i)-x(i-99))/100y(i) = 0.99*y(i-1) + 0.01*x(i),然后以导数作为dx(i) = y(i)-y(i-1),再用类似IIR的滤波器,例如dy(i) = 0.95*dx(i-1) + 0.05*dx(i) )问题:
问题:
也许有一个特别的(最优?)IIR滤波器对这个特殊问题-寻找平滑的一阶导数信号的噪声斜率?
发布于 2017-07-12 12:28:43
对数据执行线性最小二乘拟合(如果数据的变化缓慢,则执行数据的一部分),即y=a*x+b。那么a是你要寻找的导数的近似。
发布于 2017-07-14 16:25:51
通常,您得到瞬时导数x(i)-x(i-1),然后从这里应用标准IIR低通滤波器:https://www.mathworks.com/help/signal/ug/iir-filter-design.html。
执行这些操作的顺序并不重要,因为结果是完全相同的。
您可以将这两个操作合并到一个IIR过滤器中,方法是将派生操作应用到从matlab获得的b数组中,但这将使数组长度增加1,并且在将其转换为微控制器代码时不会节省您的时间。实际上,您可能会在实现中再次将其分离出来。
在微控制器上,您可能希望首先进行导数操作,因为这可能会导致幅度较小的信号,从而减少了裁剪的机会。
https://stackoverflow.com/questions/45056297
复制相似问题