首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matlab/freemat -寻找图上两点间的时间

matlab/freemat -寻找图上两点间的时间
EN

Stack Overflow用户
提问于 2013-12-06 12:24:18
回答 1查看 386关注 0票数 1

我有以下情节(来自WAV文件):

https://docs.google.com/file/d/0B0HeCXXvk2r5SzNpM0dvSjJ1RWM

我想测量两个噪声块之间的时间(x轴)(在两个点之间,y开始大于0.02)。

我使用的是FreeMat,所以我无法访问Matlab工具箱。

我该怎么做呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-06 12:29:17

假设您有一个带有x值的向量x和一个带有y值的向量,那么使用发现在满足条件y > 0.2x中找到相应条目的索引。

例如:

代码语言:javascript
复制
idx_start = find(y > 0.2, 1, 'first')
idx_end = find(y > 0.2, 1, 'last')

然后计算它的时间:

代码语言:javascript
复制
deltaT = x(idx_end)-x(idx_start)

编辑:好的,我在回答中有个小问题。由于我没有太多关于您的流程以及数据在另一种情况下的样子的背景信息,所以我建议您使用以下两种方法:

( A)你只需做这样的事情:

代码语言:javascript
复制
idx_start = find(y > 0.2, 1, 'first')
idx_end = find(y(ceil(length(y)/2)) > 0.2, 1, 'last')

取决于数据的外观,即第二个峰值是否总是在下半年。

( B)首先可以将每个峰值转换为逻辑向量,如下所示:

代码语言:javascript
复制
idx = y > 0.2

看起来像这样:

代码语言:javascript
复制
[0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0]

然后,您可以搜索它中的模式01的出现,这将产生信号从低峰值到高峰值的转变:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20423864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档