Python信号计数器

876*_*674 5 python signals analysis

我从实验中获得了两个数据阵列; x(时间)和y(电压).这些绘制如下.每隔200微秒,信号就是三种状态之一:

  1. 取负值(即<-0.25 V)
  2. 取正值(即> 0.3 V)
  3. 保持在噪声水平(即~0到0.1 V之间)

x,y绘制

我想'数字化'这个信号,所以情况1.,2.和3.,对应于-1,+ 1或0的离散值.

如何通过分析数据数组来做到最好?

我目前的想法:

  • 插值以找到y满足每个阈值的x值.

np.interp(0.5,x,y)

问题:

  • 如何满足y阈值的多个位置?

小智 0

假设您将我们的数据存储在 pandas 数据表中(data包含列xy),我会首先清理一下您的数据(将其数字化)。

data.loc[data['y'] > 0.3, 'y'] = +1
data.loc[data['y'] < -0.25, 'y'] = -1
data.loc[(data['y'] >= -0.25) & (data['y'] <= 0.3), 'y'] = 0
Run Code Online (Sandbox Code Playgroud)

之后我会通过计算后续元素之间的差异来检查斜率

data_diff = data.set_index('x').diff(periods=1, axis=0)
Run Code Online (Sandbox Code Playgroud)

现在计算一下您的差异并计算

state = 0
pos_peaks = 0
neg_peaks = 0
flats = 0
for row in data_diff.itertuples():
    if row[1] > 0 and state == 0:
        pos_peaks += 1
        state = 1
    elif row[1] < 0 and state == 0:
        neg_peaks +=1
        state = -1
    elif row[1] < 0 and state == 1:
        flats += 1
        state = 0
    elif row[1] > 0 and state == -1:
        flats += 1
        state = 0
Run Code Online (Sandbox Code Playgroud)