在 MATLAB 中,给定一个数据向量,找到阈值内的零交叉点
In MATLAB, find zero crossings within a threshold, given a vector of data
我在 MATLAB 中编写了一个函数来计算给定信号数据向量的过零次数。如果我发现过零,我也会检查所涉及的两个向量索引之间的绝对差值是否大于阈值——这是为了尽量减少信号噪声的影响。
zc = [];
thresh = 2;
for i = 1:length(v)-1
if ( (v(i)>0 && v(i+1)<0) || (v(i)<0 && v(i+1)>0) ) && abs(v(i)-v(i+1)) >= thresh
zc = [zc; i+1];
end
end
zcCount = length(zc);
我在这里使用过零函数的向量来测试它:http://hips.seas.harvard.edu/content/count-zero-crossings-matlab
A = [-0.49840598306643,
1.04975509964655,
-1.67055867973620,
-2.01437026154355,
0.98661592496732,
-0.06048256273708,
1.19294080740269,
2.68558025885591,
0.85373360483580,
1.00554850567375];
它似乎工作正常,但有没有更有效的方法来实现相同的结果?例如。在上面的网页上,他们简单地使用以下行来计算过零:
z=find(diff(v>0)~=0)+1;
有没有办法将阈值检查合并到类似有效的东西中?
怎么样
zeroCrossIndex=diff(v>0)~=0
threshholdIndex = diff(v) >= thresh;
zcCount = sum(zeroCrossIndex & threshholdIndex)
我在 MATLAB 中编写了一个函数来计算给定信号数据向量的过零次数。如果我发现过零,我也会检查所涉及的两个向量索引之间的绝对差值是否大于阈值——这是为了尽量减少信号噪声的影响。
zc = [];
thresh = 2;
for i = 1:length(v)-1
if ( (v(i)>0 && v(i+1)<0) || (v(i)<0 && v(i+1)>0) ) && abs(v(i)-v(i+1)) >= thresh
zc = [zc; i+1];
end
end
zcCount = length(zc);
我在这里使用过零函数的向量来测试它:http://hips.seas.harvard.edu/content/count-zero-crossings-matlab
A = [-0.49840598306643,
1.04975509964655,
-1.67055867973620,
-2.01437026154355,
0.98661592496732,
-0.06048256273708,
1.19294080740269,
2.68558025885591,
0.85373360483580,
1.00554850567375];
它似乎工作正常,但有没有更有效的方法来实现相同的结果?例如。在上面的网页上,他们简单地使用以下行来计算过零:
z=find(diff(v>0)~=0)+1;
有没有办法将阈值检查合并到类似有效的东西中?
怎么样
zeroCrossIndex=diff(v>0)~=0
threshholdIndex = diff(v) >= thresh;
zcCount = sum(zeroCrossIndex & threshholdIndex)