我正在寻找一种在 Python 中自动找到信号上升起点的方法。数据以 10k 的频率(每个 0.0001 s)收集,因此每个点之间的差异非常小,在噪声中丢失。我之前使用数据分析软件手动发现了这一点(黑点),但我有多个文件,手动过程无法正常工作。我试图想一些与导数(红点)或滚动方差(绿点)有关的事情,但现在对我来说这是一个死胡同。以下是选择手动点的方式:
我选择了一个在我看来最接近上升信号但在上升之前仍处于噪声中间的点。手动选择它只是我的粗略估计,但我不介意从“正确”的起始上升点错一两点。我将使用它来抵消我的信号,以便在 X = 0 时或多或少地开始上升。
现在我想用python找到它。完整的信号如下所示:
导数:
滚动方差:
所以它们都靠近兴趣点(黑点),但我不知道接下来该怎么处理它们。如果我更改限制,它看起来像这样:
任何想法如何解决我的问题?简单的代码示例如下(不包括绘图)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.optimize import curve_fit
import scipy.signal as sig
#reading dataset
signal = pd.read_csv('dataset.txt', delimiter=' ' )
signal.columns = ['time','current']
#calculating derivative, finding max and min indices of derivative
signal_derivative = np.gradient(signal,axis=0)
signal['derivative'] = pd.DataFrame(signal_derivative[:,1])
index_derivative_max = signal['derivative'].index[signal['derivative'] == signal['derivative'].max()]
index_derivative_min = signal['derivative'].index[signal['derivative'] == signal['derivative'].min()]
#calculating rolling variance, range 50 points, finding indices of peaks
signal['rolling_var'] = signal['current'].rolling(window=50,center=False).std()
index_rolling_max = signal['rolling_var'].index[signal['rolling_var'] == signal['rolling_var'].max()]
index_rolling_2nd_max = signal['rolling_var'].index[signal['rolling_var'] == signal['rolling_var'][:100000].max()]






