我有以下情节(来自WAV文件):
https://docs.google.com/file/d/0B0HeCXXvk2r5SzNpM0dvSjJ1RWM
我想测量两个噪声块之间的时间(x轴)(在两个点之间,y开始大于0.02)。
我使用的是FreeMat,所以我无法访问Matlab工具箱。
我该怎么做呢?谢谢!
发布于 2013-12-06 12:29:17
假设您有一个带有x值的向量x和一个带有y值的向量,那么使用发现在满足条件y > 0.2的x中找到相应条目的索引。
例如:
idx_start = find(y > 0.2, 1, 'first')
idx_end = find(y > 0.2, 1, 'last')然后计算它的时间:
deltaT = x(idx_end)-x(idx_start)编辑:好的,我在回答中有个小问题。由于我没有太多关于您的流程以及数据在另一种情况下的样子的背景信息,所以我建议您使用以下两种方法:
( A)你只需做这样的事情:
idx_start = find(y > 0.2, 1, 'first')
idx_end = find(y(ceil(length(y)/2)) > 0.2, 1, 'last')取决于数据的外观,即第二个峰值是否总是在下半年。
( B)首先可以将每个峰值转换为逻辑向量,如下所示:
idx = y > 0.2看起来像这样:
[0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0]然后,您可以搜索它中的模式01的出现,这将产生信号从低峰值到高峰值的转变:
idx_trans = findstr([0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0],[0 1])
deltaT = x(idx_trans(1)+1)-x(idx_trans(2)+1)当有两个像这样的峰值并且没有噪音峰值超过0.2时,它就能工作了。我想findstr也存在于freemat中,如果没有,我找到了一个移植代码:http://www2.hawaii.edu/~ramonf/FreeMat/findstr.m。
https://stackoverflow.com/questions/20423864
复制相似问题