Matlab output is not matching with the mathematics...

4 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.

Categories

Find more on Signal Generation and Preprocessing in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!