如何生成嘈杂的模拟时间序列或信号(Python)

How to generate noisy mock time series or signal (in Python)

我经常需要处理一堆嘈杂的、有些相关的时间序列。有时我需要一些模拟数据来测试我的代码,或者为 Stack Overflow 上的一个问题提供一些示例数据。我通常最终要么从不同的项目加载一些类似的数据集,要么只是添加一些正弦函数和噪声并花一些时间来调整它。

你的方法是什么?您如何生成具有特定规格的噪声信号?我是不是忽略了一些非常明显的标准包,它们正是这样做的?

我通常希望在我的模拟数据中获得的特征:

我想得到一个类似于下面两个的时间序列[A]:

我通常会使用如下代码创建一个时间序列:

import numpy as np

n = 1000
limit_low = 0
limit_high = 0.48
my_data = np.random.normal(0, 0.5, n) \
          + np.abs(np.random.normal(0, 2, n) \
                   * np.sin(np.linspace(0, 3*np.pi, n)) ) \
          + np.sin(np.linspace(0, 5*np.pi, n))**2 \
          + np.sin(np.linspace(1, 6*np.pi, n))**2

scaling = (limit_high - limit_low) / (max(my_data) - min(my_data))
my_data = my_data * scaling
my_data = my_data + (limit_low - min(my_data))

这会导致这样的时间序列:

这是我可以使用的东西,但仍然不是我想要的。这里的问题主要是:

  1. 它没有 history/random 步行方面
  2. 这是相当多的代码和调整(如果我想分享样本时间序列,这尤其是个问题)
  3. 我需要重新调整值(正弦频率等)以生成另一个相似但不完全相同的时间序列。

[A]:对于那些想知道的人,前两张图片中描绘的时间序列是三天(从午夜到早上 6 点被剪掉)在一条道路上的两个点的交通强度(以汽车/秒为单位)(移动汉宁window 平均超过 2 分钟)。重采样到 1000 点。

您是否研究过 TSimulus? By using Generators,您应该能够生成具有特定模式、周期和周期的数据。

The TSimulus project provides tools for specifying the shape of a time series (general patterns, cycles, importance of the added noise, etc.) and for converting this specification into time series values.


否则,您可以自己尝试 "drawing" 数据并使用 Time Series Maker.

导出这些数据点