Glam Prestige Journal

Bright entertainment trends with youth appeal.

$\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