sin-superposition.mws

Exercises with Maple

Calculate Amplitude and Phase of a Harmonic Oscillation

Write a Maple Procedure that calculates numerically the resulting amplitude and phase of a sum of sin-oscillations,

which all have the same frequency but possibly different amplitudes and phases, i.e., calculate A and Phi ,

so that for a given number N and given a[k], phi[k]   it holds:

                                                sum(a[k]*sin(w*t+phi[k]),k = 1 .. N) = A*sin(w*t+Phi)

(w is a fixed angular frequency, t a time parameter).

A Solution:

The array a[1] .. a[N] contains the amplitudes of the given superposition,

the array phi[1]..phi[N ] the corresponding phase shifts. The procedure  result

gives the resulting amplitude A and the corresponding phase Phi  of the given

superposition. We calculate the resulting phase in three different ways.
Explain the different phase results in the examples

>    restart:

>    result:=proc(a,phi)

>    local N::integer,s1,s2; global Amplitude,Phase;

>    N:=linalg[vectdim](a);

>    s1:=evalf(sum(a[k]*cos(phi[k]),k=1..N)):print('s1'=evalf(s1));

>    s2:=evalf(sum(a[k]*sin(phi[k]),k=1..N)):print('s2'=evalf(s2));

>    Amplitude:=evalf(sqrt(s1^2+s2^2)):print('Amplitude'=Amplitude);

>    #Now you can calculate the phase using the arccos

>    #We first consider the cases of phase 0 and phase Pi,

>    #then the other cases

>    if Amplitude=0 or s1=Amplitude then Phase:=0 elif s1=-Amplitude then Phase:=Pi

>    else Phase:=evalf(signum(s2)*arccos(s1/Amplitude))

>    end if:

>    print('Phase'=Phase);

>    # alternatively you can use the arctan using the theorem: arccos(x)=P/2-arctan(x/sqrt(1-x^2))

>    if Amplitude=0 or s1=Amplitude then Phase:=0 elif s1=-Amplitude then Phase:=Pi  

>    else Phase:=evalf(signum(s2)*(Pi/2-arctan(s1/sqrt(Amplitude^2-s1^2))))

>    end if:  print('Phase'=Phase);

>    # 3rd formula again using the arctan

>    if Amplitude=0 then Phase:=0 elif s1=0 then Phase:=signum(s2)*Pi/2  

>    elif s1>0 then Phase:=evalf(arctan(s2/s1))

>    elif s2>=0 then Phase:= evalf(arctan(s2/s1)+Pi)

>    else Phase:= evalf(arctan(s2/s1)-Pi)

>    end if:  

>    print('Phase'=Phase);

>    end;

result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...
result := proc (a, phi) local N::integer, s1, s2; global Amplitude, Phase; N := linalg[vectdim](a); s1 := evalf(sum(a[k]*cos(phi[k]),k = 1 .. N)); print(('s1') = evalf(s1)); s2 := evalf(sum(a[k]*sin(ph...

  At first,   test the cases A=0, phi=0, phi=Pi, Phi=Pi/2, phi=-Pi/2 :

>    a:=vector([1,-1]);phi:=vector([1,1]); #given amplitudes and phases in the superposition

a := vector([1, -1])

phi := vector([1, 1])

>    result(a,phi);                 #Amplitude and Phase of the resulting sine wave

s1 = 0.

s2 = 0.

Amplitude = 0.

Phase = 0

Phase = 0

Phase = 0

>   

>    a:=vector([1,1]);phi:=vector([0,0]); #given amplitudes and phases in the superposition

a := vector([1, 1])

phi := vector([0, 0])

>    result(a,phi);                 #Amplitude and Phase of the resulting sine wave

s1 = 2.

s2 = 0.

Amplitude = 2.000000000

Phase = 0

Phase = 0

Phase = 0.

>    a:=vector([1,4]);phi:=vector([Pi,Pi]); #given amplitudes and phases in the superposition

a := vector([1, 4])

phi := vector([Pi, Pi])

>    result(a,phi);                 #Amplitude and Phase of the resulting sine wave

s1 = -5.

s2 = 0.

Amplitude = 5.000000000

Phase = Pi

Phase = Pi

Phase = 3.141592654

>   

>    a:=vector([1,1]);phi:=vector([Pi/2,Pi/2]); #given amplitudes and phases in the superposition

a := vector([1, 1])

phi := vector([1/2*Pi, 1/2*Pi])

>    result(a,phi);                 #Amplitude and Phase of the resulting sine wave

s1 = 0.

s2 = 2.

Amplitude = 2.000000000

Phase = 1.570796327

Phase = 1.570796327

Phase = 1/2*Pi

>   

>    a:=vector([1,1]);phi:=vector([-Pi/2,-Pi/2]); #given amplitudes and phases in the superposition

a := vector([1, 1])

phi := vector([-1/2*Pi, -1/2*Pi])

>    result(a,phi);                 #Amplitude and Phase of the resulting sine wave

s1 = 0.

s2 = -2.

Amplitude = 2.000000000

Phase = -1.570796327

Phase = -1.570796327

Phase = -1/2*Pi

  Then test other examples

  Example 1:   We calculate the resulting amplitude and phase for

               2*sin(w*t)+2.5*cos(w*t+Pi/3)-4*sin(w*t-Pi/4).

To apply the above procedure we note that  cos(w*t+Pi/3) = sin(w*t+5*Pi/6) .

>    a:=vector([2,2.5,-4]);phi:=vector([0,5*Pi/6,-Pi/4]);

a := vector([2, 2.5, -4])

phi := vector([0, 5/6*Pi, -1/4*Pi])

>    result(a,phi);

s1 = -2.993490634

s2 = 4.078427124

Amplitude = 5.059106047

Phase = 2.203966619

Phase = 2.203966619

Phase = 2.203966620

>    Amplitude;Phase;

5.059106047

2.203966620

 Example 2:   We calculate the resulting amplitude and phase for

                       cos(w*t)+sqrt(3)*cos(w*t+Pi/2).

>    b:=vector([1,sqrt(3)]);psi:=vector([Pi/2,Pi]);

b := vector([1, 3^(1/2)])

psi := vector([1/2*Pi, Pi])

>    result(b,psi);

s1 = -1.732050808

s2 = 1.

Amplitude = 2.000000000

Phase = 2.617993878

Phase = 2.617993879

Phase = 2.617993878

  Example 3:     We calculate the resulting amplitude and phase for

                        sin(w*t+Pi/4)+3*sin(w*t-3*Pi/4).

>    c:=vector([1,3]);alpha:=vector([Pi/4,-3*Pi/4]);

c := vector([1, 3])

alpha := vector([1/4*Pi, -3/4*Pi])

>    result(c,alpha);

s1 = -1.414213562

s2 = -1.414213562

Amplitude = 1.999999999

Phase = -2.356194490

Phase = -2.356194491

Phase = -2.356194491

>