【发布时间】:2015-01-04 08:52:19
【问题描述】:
这解释起来有点复杂。我的时间序列数据格式如下:https://docs.google.com/spreadsheets/d/1B8mN0uD-t4kQr2U20gS713ZFHN6IgGB7OMR3-pqJjrw/edit?usp=sharing
该数据表示以 0.01 秒为间隔的电压记录。绘制时看起来像这样:
基本上我想做的是找到每个非常窄的对中第一个峰值出现的时间(即在 ~.1、0.75、1.6 等处)。
时间值在一个单独的数组中,但索引值(行号)在两组之间对应。
关于如何做到这一点的任何想法?
我最初的尝试是 matlab 手册中的类似内容
function [edges2] = risingEdge2(time, data)
threshold = 0.4;
offsetData = [data(2:end); NaN];
edges2 = find(data < threshold & offsetData > threshold);
end
在第一个峰值之后的 n 秒内,我想不出一个忽略的好方法……我也得到了比预期更多的峰值……可能是因为噪声数据。
【问题讨论】:
-
您有没有尝试过但遇到问题的方法?
-
信号处理工具箱能用吗?
-
@AnonSubmitter85 刚刚更新了我的尝试
-
好吧,sig proc 工具箱中有
findpeaks命令,但我不知道这是否适用于方脉冲序列顶部的上下性质。这必须有多普遍和稳健?如果您对简单的阈值处理感到满意,那么您可以设置阈值并忽略高于阈值超过 N 秒的区域。不过,这样做有点骇人听闻。如果窄信号是周期性的,你能在频域中隔离它们吗?再一次,方脉冲序列可能会让这很难做到。 -
因此,如果您只设置阈值,您将得到一个由 1 和 0 组成的向量。找出每个连续跨度 1 的长度并丢弃那些太长的。剩下的将是更窄的冲动。