Создание нерегулярной пилообразной функции в python

1

У меня есть интересное упражнение, которое я не могу понять. Это упражнение:

Начните сейчас с временного ряда 1 Myr, пильного диска с длиной волны 0,1 млн. В среднем. Длина волны изменяется случайным образом ± 0,02 млн. Лет (так между 80 и 120 кирсами), амплитуда снова 1.

Поэтому я должен создать временной ряд пилообразной функции длиной 1000 киров с временными отметками 1 кир. Длина волны пилообразных колец должна быть случайной, со средним значением 100 кир и варьирующимся от 80 до 120 кир. Я хочу, чтобы временные ряды начинались с нуля и заканчивались на нуле, поэтому не останавливайтесь на полпути во время пилообразного хода. Сейчас я использую это:

time = np.arange(0,1000,1)
func = scipy.signal.sawtooth(2 * np.pi* 0.01 * time-np.pi) 

Это приводит к следующему:

Пилотная функция

Я пытаюсь понять, как сделать длину волны нерегулярной, но все же пусть временные ряды заканчиваются на нуле. У кого-нибудь есть идея?

заранее спасибо

  • 0
    Я не уверен, что возможно, чтобы вариация была случайной, и все же она должна заканчиваться на 0, если вам нужен фиксированный интервал времени. Вы можете попробовать что-то вроде stackoverflow.com/a/2640079/7748810, чтобы сгенерировать периоды и сделать так, чтобы все они суммировались с общей длиной. Но это может нарушать ограничения по длине волны
Теги:
time-series

1 ответ

0
Лучший ответ

Вы можете конкатенировать волны с различными длинами волн, которые вы создаете с помощью np.linspace и random.randrange:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import random

waveform = np.concatenate(
    [signal.sawtooth(2 * np.pi * np.linspace(0, 1, random.randrange(30, 150))) for _ in range(10)]
)

plt.plot(waveform)
plt.show()

Результат выглядит следующим образом: Изображение 174551

  • 0
    Спасибо! Это хорошее начало и метод, о котором еще не думали. Тем не менее, этот метод не делает временной ряд желаемой длины в 1000 kyrs ... Я попытаюсь заставить его работать с этим.
  • 0
    Конечно, вам нужно немного изменить его, чтобы соответствовать требованиям. Эта статья может помочь вам sunny.today/generate-random-integers-with-fixed-sum , чтобы получить список целых чисел с заданной суммой, мин и макс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню