Matlab output is not matching with the mathematics...

3 views (last 30 days)
S1=cos(2*pi*f1*t);
S2=cos(2*pi*f2*t);
arg1=acos(S1)=2*pi*f1*t;
arg2=acos(S2)=2*pi*f2*t;
cos(arg1-arg2)=cos(2*pi*(f1-f2)*t);
But output is not coming as expected.if you observe the frequency spectrum of both they are not same.
Why it is happening ?
  2 Comments
per isakson
per isakson on 25 Nov 2019
Edited: per isakson on 25 Nov 2019
Which values do you use for f1, f2 and t ? What differences do you see? Are they large compared to the expected floating point error?
KALYAN ACHARJYA
KALYAN ACHARJYA on 25 Nov 2019
arg1=acos(S1)=2*pi*f1*t;
This is not a valid Matlab statement.

Sign in to comment.

Accepted Answer

David Goodmanson
David Goodmanson on 25 Nov 2019
Edited: David Goodmanson on 25 Nov 2019
Hi Hari,
the problem is that 2*pi*f*t is a nice linear function of t for all t, but the output of acos is restricted to the range
0<= acos <pi. With
t = 0:.001:5;
f1 =1;
S1 = cos(2*pi*f1*t);
arg1 = acos(S1)
figure(1)
plot(t,2*pi*f1*t,t,arg1)
grid on
you will see that the two quanities agree at the beginning, but acos gets chopped up as t increases.
If you compare the cosines of (2*pi*f1*t) and arg1, then those agree as they must. But with cos(arg1-arg2) you are taking the cosine of the difference of two chopped up quantities with different periods, and it doesn't work.
  4 Comments
Hari Ijjada
Hari Ijjada on 25 Nov 2019
i am trying to develop the algorithim to provide the deviation in the phase or frequency b/w two signals.
if you see the above problem,there is a deviation between my two inputs
Signal1=cos(2*pi*fc*t),Signal2=cos(2*pi*(fc+f_delta)*t)
By taking these two signals as inputs i want to find the f_delta value.
This f_delta value is not constant..it varies from time to time.Whatever the value it is i have to track the f_delta.
For this purpose i used complex muliplication process.
exp(1i*(2*pi*(fc+f_del)*t)) , exp(-1j*2*pi*fc*t)
if i multiply these two signals output should be exp(1j*2*pi*f_del*t)
real value of the output is---cos(2*pi*f_del*t)
this is output is i will use for the further blocks.
but I am not getting as expected(expected output is cos(2*pi*f_del*t) ).
How to find the desired output ?
Walter Roberson
Walter Roberson on 25 Nov 2019
i followed this process........x1=acos(Signal1)....acos------>gives inverse of the Signal1.......2*pi*fc*t
That process is incorrect. acos(cos(2*pi*fc*t)) does not give 2*pi*fc*t outside of t in [0, 1/(2*fc)]

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 25 Nov 2019
arg1=acos(S1)=2*pi*f1*t;
arg2=acos(S2)=2*pi*f2*t;
Not correct. As you increase t past one period, acos(cos(x)) becomes mod(x,period) rather than x. Those mod() of the two components interact with each other.
  1 Comment
Hari Ijjada
Hari Ijjada on 25 Nov 2019
Can you please help me solving this issue ...
i am trying to develop the algorithim to provide the deviation in the phase or frequency b/w two signals.
if you see the above problem,there is a deviation between my two inputs
Signal1=cos(2*pi*fc*t),Signal2=cos(2*pi*(fc+f_delta)*t)
By taking these two signals as inputs i want to find the f_delta value.
This f_delta value is not constant..it varies from time to time.Whatever the value it is i have to track the f_delta.
For this purpose i used complex muliplication process.
exp(1i*(2*pi*(fc+f_del)*t)) , exp(-1j*2*pi*fc*t)
if i multiply these two signals output should be exp(1j*2*pi*f_del*t)
real value of the output is---cos(2*pi*f_del*t)
this is output is i will use for the further blocks.
but I am not getting as expected(expected output is cos(2*pi*f_del*t) ).
How to find the desired output ?

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!