首页 > 解决方案 > 寻找噪声信号何时稳定

问题描述

我的数据非常嘈杂,并且随着时间的推移而波动。我想在信号稳定时找到 x。在这张图中,我可以直观地说它介于 1 到 2000 之间。如何在 python 中找到该点?

在此处输入图像描述

标签: pythontime-series

解决方案


您可以考虑使用滑动窗口查看数据的方差。当方差低于可接受的阈值时,您可以将所有先前的点作为噪声丢弃。容差完全取决于您和您的应用程序,因此您需要自己确定。

import numpy as np
import matplotlib.pyplot as plt

# generate a data set
N = 1000
t = np.linspace(0.1, 2, N)
signal = np.random.randn(N) / np.sqrt(t*0.8)

# create a sliding window view (50% overlap)
chunk_size = 100
chunks = np.lib.stride_tricks.sliding_window_view(signal, chunk_size)[::chunk_size//2]

# take the variance of the windows
var = np.var(chunks, axis=1)
t_var = t[::chunk_size//2][:var.size]

_, ax = plt.subplots()
ax.plot(t, signal)
ax.plot(t_var, var, c='r', linestyle='', marker='o')
plt.show()

在此处输入图像描述


推荐阅读