【发布时间】:2017-07-12 11:22:09
【问题描述】:
如何从具有缓慢变化斜率的噪声信号中过滤一阶导数,形式为y=kx+b? k可以随着时间慢慢变化,我想估计一下它的价值。
我尝试了 3 种不同的方法:
- 取导数为
dx(i) = (x(i)-x(i-99))/100 - 平滑滑动平均
window = 100,然后取导数为dx(i) = (x(i)-x(i-99))/100 - 简单的 IIF 过滤器(例如
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)
问题:
- 最小二乘、回归和 FIR 滤波器(矩形窗口除外)具有很高的计算成本,因为我必须将其转换为没有 DSP 的微控制器。这就是为什么我只能使用矩形窗口和 IIR 滤波器(它们的阶数较低)。
- 如果我先找到一阶导数,然后再平滑,它将非常嘈杂。所以,我应该先对原始信号进行平滑处理,然后从平滑后的信号中找到导数(也许再对导数进行平滑处理!)。
- 我应该手动调整滤波器参数,很难理解整个系统的频率响应。
问题:
也许对于这个特定问题有一个特殊的(最佳?)IIR 滤波器 - 从具有噪声斜率的信号中找到平滑的一阶导数?
【问题讨论】:
-
这个问题不只是关于信号处理(即不是关于代码/C++)吗?不确定,但我想这个问题有更好的地方。
-
您可以使用RANSAC algorithm。高性能且易于集成。
标签: matlab signal-processing smoothing