2 回答

TA貢獻1883條經驗 獲得超3個贊
您可以使用例如numpyPython 模塊生成信號。你可以將你的脈沖添加到這個信號中(當然,如果尺寸是正確的)。我已經為您編寫了一個示例,我在其中生成了一個正弦信號,numpy并且在您的問題中添加了類似的脈沖signal.unit_impulse()。為了更好地理解,我在代碼中添加了一些注釋。
代碼:
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal
positive_impulses = signal.unit_impulse(200, [10, 50, 60]) # Generate positive impulses
negative_impulses = signal.unit_impulse(200, [80, 100, 150])*-1 # Generate negative impulses
# Generate the Sinus signal.
t = np.linspace(1, 200, 200)
x_sin_sig = np.sin(t / (2 * np.pi))
plt.subplot(4, 1, 1)
plt.plot(t, x_sin_sig)
plt.title("Signal")
plt.ylabel("Sin")
plt.subplot(4, 1, 2)
plt.plot(t, x_sin_sig + positive_impulses) # Add the positive impulses to the original signal
plt.title("Signal with positive impulses")
plt.subplot(4, 1, 3)
plt.plot(t, x_sin_sig + negative_impulses) # Add the negative impulses to the original signal
plt.title("Signal with negative impulses")
plt.subplot(4, 1, 4)
plt.plot(t, x_sin_sig + positive_impulses + negative_impulses) # Add the both impulses to the original signal
plt.title("Signal with different impulses")
plt.tight_layout()
plt.show()
輸出:
筆記:
為您的信號生成隨機脈沖可能更有效。你可以用模塊來做random。
import random
positive_impulses = signal.unit_impulse(200, random.sample(range(200), 5)) # Generate positive impulses
negative_impulses = signal.unit_impulse(200, random.sample(range(200), 5))*-1 # Generate negative impulses
將random.sample(range(200), 5)返回從 0 到 200 范圍內選擇的 5 個數字的列表,沒有重復。
一個隨機脈沖的例子:

TA貢獻1830條經驗 獲得超3個贊
可以通過將輸出視為正常signal
和一些噪聲的組合來合成時間序列中的異常。最常見的噪聲模型是加性噪聲,這意味著輸出很簡單out = signal + noise
。在你的情況下,你會在添加之前將單位脈沖縮放到合適的幅度。在這個例子中,脈沖噪聲的振幅似乎在 15 左右。
PS:幅度,脈沖之間的距離和脈沖的寬度/形狀都應該是隨機變量。

TA貢獻1878條經驗 獲得超4個贊
謝謝你的邀請。關于如何產生周期異常值,我到現在還沒有這樣的經驗。但由于它是基于時間序列的,所以我認為我們可以從 Arima 概念開始。
如果你能找到
p
,d
,q
參數,你就已經找到了數據答案。雖然有很高的計算成本。StackOverflow 中有一些關于如何找到p
q
d
處理時間序列,平穩是Arima模式中最重要的事情。您可以嘗試做一階微分或二階微分。如果數據集只有1個特征,異常值已經直接顯示出來了。
祝你好運。
添加回答
舉報