【发布时间】:2017-09-11 22:11:49
【问题描述】:
我正在制作自己的系统监控工具。我希望对从设备接收的连续原始数据流(在这种情况下为我的 cpu %)运行过滤器(如高斯过滤器或类似过滤器)。
数据值的集合长度为n 个元素。每次运行这段代码时,它都会附加新的 cpu 值并删除最旧的保持集合的长度为 n 基本上是 deque([float('nan')] * n, maxlen=n) 其中n 是我正在绘制的图形的长度。
然后它通过高斯滤波器过滤整个集合,创建平滑的数据点,然后绘制它们,创建一个动画图表,类似于您计算机上的大多数系统监视器 cpu % 图表。
这工作得很好......但是必须有一种更有效的方法来过滤传入的数据,而不是每次添加新数据 val 时都对整个数据集运行过滤器(在我的情况下,图表每更新一次) .2 秒)
我可以想办法在不过滤整个列表的情况下做到这一点,但我不确定它们是否非常有效。信号处理领域有什么适合我的吗?抱歉,如果我的解释有点混乱,我对此很陌生。
from scipy.ndimage.filters import gaussian_filter1d
# Not my actual code but hopefully describes what im doing
def animate(): # function that is called every couple of milliseconds to animate the graph
# ... other stuff
values.append(get_new_val) # values = collection of data vals from cpu
line.set_ydata(gaussian_filter1d(values, sigma=4)) # line = the line object used for graphing
# ... other stuff
graph_line(line) # function that graphs the line
tl;dr:寻找一种优化的方式来平滑原始流数据,而不是每次都过滤整个数据集。
【问题讨论】:
标签: python scipy signal-processing smoothing