如何从具有y=kx+b
形式缓慢变化斜率的噪声信号中滤除一阶导数? k
可以在时间上慢慢改变,我想估计它的价值。
我尝试了3种不同的方法:
dx(i) = (x(i)-x(i-99))/100
window = 100
平滑,然后将导数设为dx(i) = (x(i)-x(i-99))/100
y(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滤波器 - 从具有噪声斜率的信号中找到平滑的一阶导数?
答案 0 :(得分:0)
对数据(或数据部分缓慢变化)执行线性最小二乘拟合,即y=a*x+b
。然后a
是您正在寻找的衍生物的近似值。
答案 1 :(得分:0)
通常你得到瞬时导数x(i)-x(i-1),然后从这里应用标准的IIR低通滤波器:https://www.mathworks.com/help/signal/ug/iir-filter-design.html
执行这些操作的顺序无关紧要,因为结果两种方式完全相同。
您可以将衍生操作应用到从matlab返回的b
数组,将这两个操作合并到一个IIR过滤器中,但这会将数组长度增加1并且不会为您节省任何数据将它翻译成微控制器代码的时间。实际上,无论如何,你可能会在实现中将它再次分开。
在微控制器上,您可能希望首先进行微分运算,因为这可能会导致幅度较小的信号,从而减少削波的可能性。