Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我试图用Matlab找到峰值前后的过零点_Matlab - Fatal编程技术网

我试图用Matlab找到峰值前后的过零点

我试图用Matlab找到峰值前后的过零点,matlab,Matlab,我从记录的脑电通道中找到了一个峰值的位置,我正试图用Matlab找到该峰值的积分(面积)。但是,我很难找到峰值所在点前后的过零点 我知道如何找到零交叉点的命令,但我似乎无法让它自动返回峰值开始和结束的位置。我最终将不得不对多个峰值执行此操作,并且不希望手动查找每个交叉点 我正在处理的图像如下所示: 我假设自您编写 我知道如何找到零交点的命令 我还假设在x0中有最大峰值位置,可能是从 [~,imax]=max(EEGsignal); x0=x(imax); %if your data pairs

我从记录的脑电通道中找到了一个峰值的位置,我正试图用Matlab找到该峰值的积分(面积)。但是,我很难找到峰值所在点前后的过零点

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

我正在处理的图像如下所示:


我假设自您编写

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

我还假设在
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
这些
zerocross
将位于
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=find(zerocrossesx0,1,'first');
第一个交叉=零交叉(ind1);
第二个交叉=零交叉(ind2);
索引
ind1
ind2
将告诉您要查找的
zerocross
的特殊索引


注意:一般来说,你必须小心一点:你的峰值可能在第一个零之前,或者在最后一个零之后。对于这种情况,您应该检查
isempty(第一个十字)
还是
isempty(第二个十字)
。我的回答中没有包括这一点,因为在这种情况下,您的“峰值”定义不明确,您不应该整合它(因此需要以一种非平凡的方式进行处理)。

您可以发布数据的屏幕截图吗?当你说“峰值”时,我假设你指的是一个局部最大值的单点,但你说你想在峰值下积分,这意味着这是一个跨越某个时间范围的信号。我用来查找峰值的命令只会返回最大点的位置,所以这是我必须处理的唯一信息。不过,峰值确实出现在短时间内@布莱恩:好吧,你最好看看零点交叉点,找到你单峰附近的两个交叉点。应该不难做到。但这仅仅是你感兴趣的最高峰吗?也许你应该看看所有的峰值(可能是看信号的一阶/二阶导数)。编辑:单峰示例:如果最大峰值位于
x0
,零交叉位于数组
zerocross
,那么
ind1=find(zerocrossesx0,1,'first')
,那么你的两个零是
zerocross(ind1)
zerocross(ind2)
@stepmoy你可能有机会看看我的答案吗?