No MATLAB, encontre zero cruzamentos dentro de um limite, dado um vetor de dados
Eu escrevi uma função no MATLAB para contar o número de cruzamentos de zero, dado um vetor de dados de sinal. Se eu encontrar um cruzamento de zero, também verifico se a diferença absoluta entre os dois índices de vetores envolvidos é maior que um valor limite - isso é para tentar reduzir a influência do ruído do sinal.
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);
Eu usei o vetor da função de cruzamento zero aqui para testá-lo: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];
Parece funcionar bem, mas existe uma maneira mais eficiente de obter o mesmo resultado? Por exemplo. na página acima, eles simplesmente usam a seguinte linha para calcular zero cruzamentos:
z=find(diff(v>0)~=0)+1;
Existe uma maneira de incorporar a verificação de limite em algo igualmente eficiente?