我需要做一些实时数据分析来监控操作错误。更具体地说,我正在控制一个浮标上的绞盘,这个浮标将仪器包降低到水中。我需要检测它是否已触及底部,如果有,则将其停止。我有以下数据:传感器的深度,绞车解开的速度。我得到1Hz的更新,整个过程持续约5分钟。如果传感器碰到底部,深度值通常会急剧减慢并最终停止 可以假设在理想情况下,下降速率是线性的,但由于波浪,可能会有相当多的噪声。
我想出了这个方法:
'''
The variables sensor_depth, winch_velocity and sample_time are assumed to be updated in the background
by another thread.
'''
import numpy as np
from time import sleep
x_data = []
y_data = []
running_size = 10
while winch_is_running():
if new_sample():
x_data.append(sample_time)
y_data.append(sensor_depth)
# Get the slope for the entire procedure
A = np.vstack([x_data,np.ones(len(x_data))])
overall_slope,offset = np.linalg.lstsq(A,y_data)[0]
# Get the slope for a recent set of samples
A = np.vstack([x_data[-1*running_size],np.ones(running_size)])
recent_slope,offset = np.linalg.lstsq(A,y_data[-1*running_size])[0]
if overall_slope - recent_slope > allowed_slope_error:
stop_winch()
else: time.sleep(.2)
这是否有意义,还是有更好的方法?
以下是当前系统的一些示例数据。这不是特别艰难的一天,并没有触底。目前的系统使用基于摩托罗拉68k的TattleTale控制器运行他们的基本版本。底部打击算法只是比较每个x样本,如果差异不够大,它就会停止。虽然这种方法有效但在粗糙时容易出现误报,在平静的情况下反应很差:
Temp Cond Sal DO DEPTH Turb Chlor
11/11/10 15:00:19 14.24 18.44 10.97 2.53 0.092 0.5 13.5
11/11/10 15:00:20 14.24 18.44 10.97 2.53 0.126 0.7 9.5
11/11/10 15:00:21 14.24 18.45 10.97 2.53 0.132 0.6 13.0
11/11/10 15:00:22 14.24 18.44 10.96 2.53 0.152 0.6 8.6
11/11/10 15:00:23 14.24 18.44 10.96 2.53 0.139 0.7 13.6
11/11/10 15:00:24 14.24 18.44 10.97 2.52 0.120 0.7 13.5
11/11/10 15:00:25 14.24 18.44 10.97 2.52 0.128 1.4 7.1
11/11/10 15:00:26 14.24 18.44 10.96 2.52 0.128 0.6 7.9
11/11/10 15:00:27 14.24 18.44 10.97 2.52 0.141 0.9 12.4
11/11/10 15:00:28 14.24 18.44 10.97 2.51 0.135 1.3 12.7
11/11/10 15:00:29 14.24 18.44 10.96 2.51 0.145 1.3 12.8
11/11/10 15:00:30 14.24 18.44 10.96 2.51 0.163 0.6 4.8
11/11/10 15:00:31 14.24 18.44 10.96 2.51 0.213 0.9 3.9
11/11/10 15:00:32 14.24 18.44 10.97 2.51 0.211 0.6 7.1
11/11/10 15:00:33 14.24 18.44 10.96 2.51 0.241 0.7 6.9
11/11/10 15:00:34 14.24 18.44 10.96 2.51 0.286 0.5 9.8
11/11/10 15:00:35 14.24 18.44 10.96 2.51 0.326 0.6 9.0
11/11/10 15:00:36 14.24 18.44 10.96 2.51 0.358 0.7 3.3
11/11/10 15:00:37 14.24 18.44 10.96 2.51 0.425 0.7 13.1
11/11/10 15:00:38 14.24 18.43 10.96 2.51 0.419 0.8 5.3
11/11/10 15:00:39 14.24 18.44 10.96 2.51 0.495 1.2 7.4
11/11/10 15:00:40 14.24 18.44 10.96 2.50 0.504 0.7 16.1
11/11/10 15:00:41 14.24 18.44 10.96 2.50 0.558 0.5 11.9
11/11/10 15:00:42 14.24 18.44 10.96 2.50 0.585 0.8 8.8
11/11/10 15:00:43 14.24 18.44 10.96 2.50 0.645 0.8 9.7
11/11/10 15:00:44 14.24 18.44 10.96 2.50 0.654 0.6 5.2
11/11/10 15:00:45 14.24 18.44 10.96 2.50 0.694 0.5 9.5
11/11/10 15:00:46 14.24 18.44 10.96 2.50 0.719 0.7 5.9
11/11/10 15:00:47 14.24 18.44 10.96 2.50 0.762 0.9 7.2
11/11/10 15:00:48 14.24 18.44 10.96 2.50 0.815 1.0 11.1
11/11/10 15:00:49 14.24 18.44 10.96 2.50 0.807 0.6 8.7
11/11/10 15:00:50 14.24 18.44 10.96 2.50 0.884 0.4 0.4
11/11/10 15:00:51 14.24 18.44 10.96 2.50 0.865 0.7 13.3
11/11/10 15:00:52 14.25 18.45 10.97 2.49 0.917 1.2 7.3
11/11/10 15:00:53 14.24 18.45 10.97 2.49 0.964 0.5 4.8
11/11/10 15:00:54 14.25 18.44 10.97 2.49 0.967 0.6 9.7
11/11/10 15:00:55 14.25 18.44 10.97 2.49 1.024 0.5 8.1
11/11/10 15:00:56 14.25 18.45 10.97 2.49 1.042 1.0 14.3
11/11/10 15:00:57 14.25 18.45 10.97 2.49 1.074 0.7 6.0
11/11/10 15:00:58 14.26 18.46 10.97 2.49 1.093 0.9 9.0
11/11/10 15:00:59 14.26 18.46 10.98 2.49 1.145 0.7 9.1
11/11/10 15:01:00 14.26 18.46 10.98 2.49 1.155 1.7 8.6
11/11/10 15:01:01 14.25 18.47 10.98 2.49 1.205 0.7 8.8
11/11/10 15:01:02 14.25 18.48 10.99 2.49 1.237 0.8 12.9
11/11/10 15:01:03 14.26 18.48 10.99 2.49 1.248 0.7 7.2
11/11/10 15:01:04 14.27 18.50 11.00 2.48 1.305 1.2 9.8
11/11/10 15:01:05 14.28 18.50 11.00 2.48 1.328 0.7 10.6
11/11/10 15:01:06 14.29 18.49 11.00 2.48 1.367 0.6 5.4
11/11/10 15:01:07 14.29 18.51 11.01 2.48 1.387 0.8 9.2
11/11/10 15:01:08 14.30 18.51 11.01 2.48 1.425 0.6 14.1
11/11/10 15:01:09 14.31 18.52 11.01 2.48 1.456 4.0 11.3
11/11/10 15:01:10 14.31 18.52 11.01 2.47 1.485 2.5 5.3
11/11/10 15:01:11 14.31 18.51 11.01 2.47 1.490 0.7 5.2
11/11/10 15:01:12 14.32 18.52 11.01 2.47 1.576 0.6 6.6
11/11/10 15:01:13 14.32 18.51 11.01 2.47 1.551 0.7 7.7
11/11/10 15:01:14 14.31 18.49 10.99 2.47 1.627 0.6 7.3
11/11/10 15:01:15 14.29 18.47 10.98 2.47 1.620 0.7 11.5
11/11/10 15:01:16 14.28 18.48 10.99 2.48 1.659 0.8 7.0
11/11/10 15:01:17 14.27 18.49 10.99 2.48 1.682 1.4 14.4
11/11/10 15:01:18 14.26 18.49 11.00 2.48 1.724 1.0 2.9
11/11/10 15:01:19 14.27 18.52 11.01 2.48 1.756 0.8 13.5
11/11/10 15:01:20 14.28 18.52 11.01 2.47 1.752 5.3 11.7
11/11/10 15:01:21 14.29 18.52 11.02 2.47 1.841 0.8 5.8
11/11/10 15:01:22 14.30 18.52 11.01 2.47 1.789 1.0 5.5
11/11/10 15:01:23 14.31 18.52 11.01 2.47 1.868 0.7 6.8
11/11/10 15:01:24 14.31 18.52 11.02 2.47 1.848 0.8 7.8
11/11/10 15:01:25 14.32 18.52 11.01 2.47 1.896 0.3 8.3
11/11/10 15:01:26 14.32 18.52 11.01 2.47 1.923 0.9 4.8
11/11/10 15:01:27 14.32 18.51 11.01 2.47 1.936 0.5 6.4
11/11/10 15:01:28 14.32 18.52 11.01 2.46 1.960 0.9 10.0
11/11/10 15:01:29 14.31 18.52 11.01 2.46 1.996 0.6 10.7
11/11/10 15:01:30 14.31 18.52 11.01 2.47 2.024 1.7 11.8
11/11/10 15:01:31 14.31 18.52 11.01 2.47 2.031 1.0 11.7
11/11/10 15:01:32 14.31 18.53 11.02 2.46 2.110 1.3 5.4
11/11/10 15:01:33 14.32 18.52 11.01 2.46 2.067 0.6 12.2
11/11/10 15:01:34 14.32 18.52 11.01 2.46 2.144 0.4 6.4
11/11/10 15:01:35 14.32 18.51 11.01 2.46 2.148 1.0 4.6
11/11/10 15:01:36 14.33 18.51 11.01 2.46 2.172 0.9 9.6
11/11/10 15:01:37 14.33 18.52 11.01 2.46 2.221 1.0 6.5
11/11/10 15:01:38 14.33 18.51 11.01 2.46 2.219 0.3 7.6
11/11/10 15:01:39 14.33 18.51 11.01 2.46 2.278 1.2 8.1
11/11/10 15:01:40 14.32 18.51 11.01 2.46 2.258 0.5 0.6
11/11/10 15:01:41 14.32 18.52 11.01 2.46 2.329 1.2 8.2
11/11/10 15:01:42 14.31 18.51 11.01 2.46 2.321 1.1 9.6
11/11/10 15:01:43 14.31 18.51 11.01 2.46 2.382 1.0 5.3
11/11/10 15:01:44 14.31 18.51 11.01 2.46 2.357 0.7 8.5
11/11/10 15:01:45 14.31 18.52 11.01 2.46 2.449 0.4 10.3
11/11/10 15:01:46 14.31 18.52 11.01 2.46 2.430 0.6 10.0
11/11/10 15:01:47 14.31 18.52 11.01 2.46 2.472 0.6 11.3
11/11/10 15:01:48 14.31 18.52 11.01 2.45 2.510 1.2 8.5
11/11/10 15:01:49 14.31 18.51 11.01 2.45 2.516 0.7 9.5
11/11/10 15:01:50 14.31 18.52 11.01 2.45 2.529 0.5 9.6
11/11/10 15:01:51 14.31 18.52 11.01 2.45 2.575 0.7 8.2
11/11/10 15:01:52 14.31 18.51 11.01 2.46 2.578 0.5 9.4
11/11/10 15:01:53 14.31 18.51 11.01 2.46 2.592 0.8 5.5
11/11/10 15:01:54 14.30 18.51 11.01 2.46 2.666 0.6 7.1
11/11/10 15:01:55 14.30 18.51 11.01 2.46 2.603 0.7 11.5
11/11/10 15:01:56 14.29 18.52 11.01 2.45 2.707 0.9 7.2
11/11/10 15:01:57 14.29 18.52 11.01 2.45 2.673 0.7 9.2
11/11/10 15:01:58 14.28 18.52 11.01 2.45 2.705 0.7 6.4
11/11/10 15:01:59 14.28 18.52 11.01 2.45 2.720 1.3 6.8
11/11/10 15:02:00 14.28 18.52 11.02 2.45 2.778 0.7 7.5
11/11/10 15:02:01 14.27 18.52 11.02 2.45 2.724 0.5 8.0
11/11/10 15:02:02 14.27 18.51 11.01 2.45 2.840 0.9 10.0
11/11/10 15:02:03 14.26 18.52 11.02 2.45 2.758 0.8 6.4
11/11/10 15:02:04 14.26 18.52 11.01 2.46 2.874 0.4 9.7
11/11/10 15:02:05 14.24 18.53 11.02 2.46 2.824 1.1 10.8
11/11/10 15:02:06 14.24 18.53 11.02 2.46 2.896 1.0 8.8
11/11/10 15:02:07 14.22 18.53 11.02 2.47 2.903 0.6 16.3
11/11/10 15:02:08 14.22 18.54 11.03 2.45 2.912 0.9 9.6
11/11/10 15:02:09 14.21 18.54 11.02 2.45 2.949 0.8 6.6
11/11/10 15:02:10 14.20 18.54 11.03 2.45 2.964 1.4 8.4
11/11/10 15:02:11 14.19 18.55 11.03 2.46 2.966 3.0 12.9
11/11/10 15:02:12 14.17 18.55 11.03 2.45 3.020 1.0 7.5
11/11/10 15:02:13 14.15 18.56 11.04 2.45 3.000 1.1 9.5
11/11/10 15:02:14 14.14 18.56 11.04 2.45 3.064 0.9 6.5
11/11/10 15:02:15 14.13 18.56 11.04 2.45 3.037 1.3 8.2
11/11/10 15:02:16 14.13 18.57 11.04 2.45 3.097 1.3 7.7
11/11/10 15:02:17 14.12 18.57 11.05 2.45 3.128 1.5 8.4
11/11/10 15:02:18 14.11 18.58 11.05 2.45 3.104 1.7 7.0
11/11/10 15:02:19 14.10 18.58 11.05 2.45 3.190 1.2 10.2
11/11/10 15:02:20 14.10 18.58 11.05 2.44 3.141 5.8 9.9
11/11/10 15:02:21 14.09 18.60 11.06 2.44 3.199 1.4 4.7
11/11/10 15:02:22 14.07 18.60 11.07 2.44 3.208 1.6 9.4
11/11/10 15:02:23 14.06 18.60 11.07 2.44 3.199 2.1 6.2
11/11/10 15:02:24 14.06 18.62 11.08 2.43 3.259 3.0 9.3
11/11/10 15:02:25 14.05 18.63 11.08 2.43 3.228 1.6 8.9
11/11/10 15:02:26 14.06 18.63 11.08 2.43 3.289 1.6 3.5
11/11/10 15:02:27 14.05 18.64 11.09 2.43 3.278 1.8 2.2
11/11/10 15:02:28 14.05 18.64 11.09 2.43 3.307 2.2 9.7
11/11/10 15:02:29 14.04 18.64 11.09 2.43 3.315 2.3 5.5
11/11/10 15:02:30 14.04 18.65 11.10 2.43 3.367 2.1 5.1
11/11/10 15:02:31 14.03 18.65 11.10 2.43 3.297 2.5 8.5
11/11/10 15:02:32 14.03 18.65 11.10 2.41 3.419 1.9 6.8
11/11/10 15:02:33 14.03 18.65 11.10 2.41 3.347 2.1 4.0
11/11/10 15:02:34 14.03 18.66 11.10 2.41 3.405 2.0 11.8
11/11/10 15:02:35 14.03 18.67 11.11 2.41 3.420 2.4 10.6
11/11/10 15:02:36 14.03 18.67 11.11 2.39 3.369 2.7 10.5
11/11/10 15:02:37 14.02 18.67 11.11 2.39 3.402 1.6 9.1
11/11/10 15:02:38 14.02 18.66 11.11 2.39 3.408 1.9 8.5
11/11/10 15:02:39 14.02 18.67 11.11 2.39 3.362 4.2 7.0
11/11/10 15:02:40 14.02 18.67 11.11 2.38 3.421 2.3 12.1
11/11/10 15:02:41 14.02 18.67 11.11 2.38 3.371 2.6 14.7
11/11/10 15:02:42 14.02 18.67 11.11 2.38 3.409 3.0 6.5
11/11/10 15:02:43 14.02 18.67 11.11 2.38 3.368 2.3 2.5
11/11/10 15:02:44 14.02 18.67 11.11 2.37 3.434 2.5 10.2
11/11/10 15:02:45 14.02 18.67 11.11 2.37 3.346 1.6 4.5
从数据的角度来看,这也不是一个非常有趣的日子。
答案 0 :(得分:7)
您的方法(将当前导数与平均导数进行比较)很好,但可以改进。最重要的是,在决定如何分析数据之前,您确实需要查看数据:
这些图表显示: A)您的原始数据。注意:由于阀芯直径的变化,下降速率不是恒定的,因此线性回归可能不是最佳的。此外,在阀芯停止时可能会有一些额外的数据,这可能会导致您的斜率测量值下降。 B)数据的衍生物。这是您用于检测的数据。告诉我:你能轻易看到平均坡度为零的地区吗? C)数据的FFT,在频率范围的上半部分显示大量功率 - 这就是噪声所在。由于噪声仅占据频率范围的上半部分,因此过滤应该相当容易。 D)经过sigma = 1.0的高斯低通滤波器后的数据(scipy.ndimage.gaussian_filter(data,1.0)) E)D的导数(更容易看到这个数据的底部) F)E的功率谱,显示噪声大部分消除。
因此,通过稍微过滤,可视化地检测底部变得相当容易。那么问题是:1)如何将“视觉检测”转换为可靠的算法; 2)如何确定西格玛的最佳值。如果它太小,那么噪音会妨碍你。如果太大,则阀芯可能运行太长时间。回答这两个问题的唯一方法是凭经验 - 尽可能多地提取这些数据集并尝试新的想法,直到得到一个适用于大多数(如果不是全部)数据集的数据集。
我的第一种方法是: - 使用经验预先确定的参数时,低通数据到达时。如果正确选择了此参数,则只需考虑到达的最后一个数据点。 - 当您在某个(经验确定的)阈值内找到接近零的点时触发。
你可以做很多事情来使这更“聪明”,比如根据先前的噪音自动选择一个阈值。然而,这些技巧可能很难正确实施,因为它们可能被意外输入所欺骗。你几乎总是更好地应用你已经知道的数据,而不是让计算机为你猜测。
答案 1 :(得分:1)
如果你真的需要尽可能快地关闭它,你可以使用机器学习方法,从运行的许多样本中,你可以了解最小的allowed_slope_error值。
或者你可以尝试几次,我们哪个值可以给你最好的结果:)
答案 2 :(得分:1)
我的猜测是,您不希望将大量电缆倾倒在您正在降低的设备顶部,而且您也不希望它降落太猛。假设管理你的问题的物理学是众所周知的,那么根据噪声,你可以实现一个简单的feedback controller。如果你能够控制winch_velocity,那么一个简单的PID控制器就可以做到这一点。
如果你只能打开或关闭绞盘,那么实施一个控制器来完成一次完全着陆将会更加棘手(比如“更多的数学”)(你必须切换绞车打开和关闭以控制体面的速度)。
我个人的经验是控制理论(基础知识)比机器学习(基础知识)更容易掌握,所以我认为值得尝试一下你的控制问题。