我试图使用Matlab在峰值之前和之后找到过零点

时间:2015-10-20 22:01:22

标签: matlab

我有一个记录的EEG通道的峰值位置,我正在尝试使用Matlab找到该峰值的积分(面积)。但是,我无法在峰值所在点之前和之后找到过零点。

我知道如何找到过零点的命令,但我似乎无法让它自动返回峰值开始和结束的位置。我最终必须为多个峰值执行此操作,并且不希望手动找到每个交叉点。

我正在使用的图像看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:0)

我假设您已经在数组zerocrosses中拥有所有零交叉,因为您写了

  

我知道如何找到零交叉的命令

我还假设您在x0中有最大峰值位置,可能来自

[~,imax]=max(EEGsignal);
x0=x(imax); %if your data pairs are EEGsignal vs x

好的,为了完整起见,这是获得零交叉的方法:

inds=find(diff(sign(EEGsignal))); %find indices of sign change
zerocrosses=(x(inds+1)+x(inds))/2; %in between grid points

这些zerocrosses将落在x网格点之间,以获得最大精度。但是,如果出于某种原因,您希望坚持输入x值,那么如果您的x(inds)足够密集(并且似乎就是这种情况),则选择x就足够了。

然后你可以在你的数组中找到那两个由x0

组成的零
ind1=find(zerocrosses<x0,1,'last');
ind2=find(zerocrosses>x0,1,'first');

first_cross=zerocrosses(ind1);
second_cross=zerocrosses(ind2);

索引ind1ind2会告诉您正在寻找的zerocrosses的特殊索引。

注意:一般来说,您必须要小心:您的峰值可能发生在第一个零点之前,或者在最后一个零点之后。在这种情况下,您应该检查isempty(first_cross)isempty(second_cross)。我没有在我的回答中包含这个,因为在这种情况下你的&#34;峰值&#34;是不明确的,你不应该整合它(所以它需要以非平凡的方式对待)。