Efficient Zero-Crossing Detection Code for Continuous Sine Waves in MATLAB

  • Context: MATLAB 
  • Thread starter Thread starter elecz
  • Start date Start date
  • Tags Tags
    Detection
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
6 replies · 5K views
elecz
Messages
17
Reaction score
0
I want to detect all zero-crossings in a sine wave through matlab. Kindly tell me about a simple code which detects all zero-crossings and stores them in an array. The sine wave is continuous time signal, not discrete...
 
Physics news on Phys.org
Its a simple sine wave without any noise or harmonics
 
A sine wave is given as the following analytic expression:

[tex] y = A \, \sin{(\omega t - \phi)} + B[/tex]

Do you know the coefficients [itex]A, B, \omega, \phi[/itex] from your example?
 
ϕ=0 and w=2*pi*f; f=1000; B=0 and A=1; 0<t<5
 
Well, you need to solve the equation:
[tex] \sin{(2 \pi 1000 t)} = 0, 0 < t < 5[/tex]
which means:
[tex] t = \frac{n}{2000}[/tex]
where n is an integer that must be in a particular interval so that the constraints on t are met.
 
This is a simple code (but not Matlab) that records all zero crossings (of both signs) in array "xcross" to a timing accuracy of 1 microsecond.

PROGRAM xcrossing
DIM xcross(100000,3)
OPTION NOLET
f=1000
w=2*pi*f
dt=1e-6
t=-dt/2
y=sin(w*t)
N=0
DO
t=t+dt
yold=y
y=sin(w*t)
IF yold=0 then yold=1E-12 ! eliminates divide by zero problem
IF y/yold<0 then
N=N+1
xcross(N,1)=N
xcross(N,2)=t-dt/2
xcross(N,3)=sgn(y)
END IF
LOOP while t<1
FOR N=1 to 30 ! sample array printout
PRINT xcross(N,1),xcross(N,2),xcross(N,3)
NEXT N
END