【问题标题】:How to generate noisy mock time series or signal (in Python)如何生成嘈杂的模拟时间序列或信号(在 Python 中)
【发布时间】:2023-03-07 03:42:02
【问题描述】:

我经常不得不处理一堆嘈杂的、有些相关的时间序列。有时我需要一些模拟数据来测试我的代码,或者为 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. 它没有历史/随机游走方面
  2. 这是相当多的代码和调整(如果我想分享一个示例时间序列,这尤其是一个问题)
  3. 我需要重新调整值(正弦的频率等)以生成另一个相似但不完全相同的时间序列。

[A]:对于那些想知道的人来说,前两张图像中描绘的时间序列是三天内(截断午夜至早上 6 点)沿一条道路的两个点的交通强度(移动汉宁窗平均值)超过 2 分钟)。重采样到 1000 个点。

【问题讨论】:

  • 您是否考虑过采用理想的数据集并为其添加一些白噪声?
  • 是的,但是我仍然遇到一个问题,即所有实际特征(奇怪的下降/峰值、周期性等)仍然完全相同
  • 为了改变周期性,我想将各个部分重新采样到稍微多或少的点是可行的。
  • 您有没有想过使用生物数据?检查一下,您冷下载一个大染色体(例如 chr1)或最小的(chr21),然后使用移动平均值计算 %GC 含量。没有什么比高原、局部下降和峰值的随机游走的生物数据更...
  • 你找到好的时间序列生成器了吗?我也在寻找这样的java或python库......?

标签: python time-series signal-processing


【解决方案1】:

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

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


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

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2023-04-02
    • 2019-11-04
    • 2015-11-13
    • 2016-03-21
    • 2015-08-31
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多