$\begingroup$

In my opinion, the following code should produce a sine wave that has a frequency of $2\text{Hz}$ at $t=20$, but when I count the periods between $t=19$ and $t=20$, I count more than 3 periods. What am I doing wrong?

clear all, close all, clc; t=linspace(0,20,10000); y=sin(2*pi*(1+(5/100)*t).*t); plot(t,y); hold on; 

My plot:

$\endgroup$7

2 Answers

$\begingroup$

If you look carefully at

y=sin(2*pi*(1+(5/100)*t).*t); 

you'll see that the variable $t$ appears to the second power. You've graphed a section of $$ y = \sin(C t^2) $$ rather than $$ y = \sin(C t). $$

Looking closely at your picture, you can see that the spacing of the "humps" changes from left to right, so what you've shown can't possibly be a true sinusoid.

General matlab debugging hint: it's so easy to do stuff -- especially big stuff, like building large matrices, or functions represented by 100,000 samples --- that it's easy to delude yourself into thinking you must have done it right. Always write your code so that you can look at corresponding small cases during debugging -- 20 samples of a function of low frequency rather than 20,000 samples of a high-freq function, or the 2 x 2 output matrix from a small example rather than the 200 x 200 output from a large one.

$\endgroup$4$\begingroup$

The argument of sine function represents the phase of the wave. In general, to find the frequency of the wave at time 't', you have to differentiate it wrt 't'.

f = (1/2*pi) * d/dt (phase).

However for the phase that linearly varies with time, i.e., frequency being independent of time, you can just divide it by 't'.

f = (1/2*pi) * (1/t) * (phase).

$\endgroup$2

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy