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
Click For Summary
SUMMARY

This discussion focuses on detecting zero-crossings in a continuous sine wave using MATLAB. The sine wave is defined by the equation y = A sin(ωt - φ) + B, with parameters A=1, B=0, ω=2πf (where f=1000), and φ=0. The provided code efficiently identifies zero-crossings by iterating through time and checking the sign change of the sine wave, storing results in an array called "xcross." The algorithm achieves a timing accuracy of 1 microsecond and is suitable for continuous time signals.

PREREQUISITES
  • Understanding of continuous time signals
  • Familiarity with MATLAB programming
  • Knowledge of sine wave properties and equations
  • Basic concepts of numerical methods for signal processing
NEXT STEPS
  • Learn MATLAB's built-in functions for signal processing
  • Explore advanced zero-crossing detection techniques
  • Investigate the effects of noise on sine wave detection
  • Study the implementation of filtering techniques in MATLAB
USEFUL FOR

Engineers, signal processing specialists, and MATLAB users interested in analyzing continuous sine waves and improving zero-crossing detection methods.

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
Tell us about the "sine" wave. How is it generated, does it have noise or harmonics?
 
Its a simple sine wave without any noise or harmonics
 
A sine wave is given as the following analytic expression:

<br /> y = A \, \sin{(\omega t - \phi)} + B<br />

Do you know the coefficients A, B, \omega, \phi 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:
<br /> \sin{(2 \pi 1000 t)} = 0, 0 &lt; t &lt; 5<br />
which means:
<br /> t = \frac{n}{2000}<br />
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
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
903
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K