我有一个记录的EEG通道的峰值位置,我正在尝试使用Matlab找到该峰值的积分(面积)。但是,我无法在峰值所在点之前和之后找到过零点。
我知道如何找到过零点的命令,但我似乎无法让它自动返回峰值开始和结束的位置。我最终必须为多个峰值执行此操作,并且不希望手动找到每个交叉点。
我正在使用的图像看起来像这样:
答案 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);
索引ind1
,ind2
会告诉您正在寻找的zerocrosses
的特殊索引。
注意:一般来说,您必须要小心:您的峰值可能发生在第一个零点之前,或者在最后一个零点之后。在这种情况下,您应该检查isempty(first_cross)
或isempty(second_cross)
。我没有在我的回答中包含这个,因为在这种情况下你的&#34;峰值&#34;是不明确的,你不应该整合它(所以它需要以非平凡的方式对待)。