t = linspace(0,10*pi,200);
x = sin(t);
mcs = x .* circshift(x, [0 -1]);
zxix = find(mcs <= 0);
for k1 = 1:2:size(zxix,2)-1
zx(k1) = interp1(x(zxix(k1):zxix(k1)+1), t(zxix(k1):zxix(k1)+1), 0);
plot(zx, zeros(size(zx)), '+r', 'MarkerSize',10)
The ‘mcs’ variable detects the nearest zero-crossings, ‘zxix’ is their indices, and ‘zx’ uses interp1 to calculate the ‘t’ (the independent variable) coordinate corresponding to the actual zero-crossing. The plot displays the signal and the zero-crossings that distinguish the various cycles of your sine wave.