У меня есть интересное упражнение, которое я не могу понять. Это упражнение:
Начните сейчас с временного ряда 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)
Это приводит к следующему:
Я пытаюсь понять, как сделать длину волны нерегулярной, но все же пусть временные ряды заканчиваются на нуле. У кого-нибудь есть идея?
заранее спасибо
Вы можете конкатенировать волны с различными длинами волн, которые вы создаете с помощью 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()
Результат выглядит следующим образом: