在 MATLAB 中,在给定数据向量的情况下,在阈值内找到零交叉点



我在 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)

最新更新