我的数据库存储时间序列传感器数据。我试图在执行进一步处理之前应用高通/低通滤波器来清理数据。如何在sql中做到这一点?
样本数据:
import numpy as np
a=(np.range(0,101))*0.1
b=np.sin(2*np.pi*0.1*a)+np.random.random(10)-0.5
绘制时,数据如下所示:
过滤后,数据应如下所示:
我可以在sql中执行什么逻辑?
答案 0 :(得分:1)
一种简单的方法是创建一个可以(预处理)数据的视图。例如:
create view averaged_sample as
select
s.*,
avg(t.value) as avg_value -- simple math to average
from sample s
join sample r on r.time between s.time - interval 100 ms
and s.time + interval 100 ms
group by s.id
此视图将即时计算,因此-使用起来会很慢。如果经常需要此中间结果,则可以从实现它或将其生成到甚至可以建立索引的辅助表中受益。
AVG()
函数只是一个简单的数学实现。您可以用其他一些更有趣的数学代替它。