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

Swi*_*ier 10 python signal-processing time-series

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

你的方法是什么?如何使用某些规格生成噪声信号?我是否只是忽略了一些明显明显的标准包装呢?

我通常希望在我的模拟数据中获得的功能:

  • 随着时间的推移噪音水平不同
  • 信号中的一些历史(如随机漫步?)
  • 信号的周期性
  • 能够生成具有相似(但不完全相同)特征的另一个时间序列
  • 也许是一堆奇怪的逢低/峰值/高原
  • 能够重现它(一些种子和一些参数吗?)

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

实时系列1 实时系列2

我通常最终创建一个时间序列,其代码如下:

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))
Run Code Online (Sandbox Code Playgroud)

这会产生如下时间序列:

模拟时间序列

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

  1. 它没有历史/随机游走方面
  2. 它是相当多的代码和调整(如果我想分享一个示例时间序列,这尤其是一个问题)
  3. 我需要重新记录值(正弦等的频率)以产生另一个相似但不完全相同的时间序列.

[A]:对于那些想知道的人来说,前两张图片中描绘的时间序列是每秒车辆在三天(午夜到早上6点被修剪)的两条路上的两个点的交通强度(移动汉宁窗平均超过2分钟) ).重新采样到1000点.

Pet*_*Why 3

您研究过TSimulus吗?通过使用Generators,您应该能够生成具有特定模式、周期性和循环的数据。

TSimulus 项目提供了用于指定时间序列形状(一般模式、周期、添加噪声的重要性等)以及将此规范转换为时间序列值的工具。


否则,您可以尝试自己“绘制”数据并使用Time Series Maker导出这些数据点。