#!/usr/bin/python
##### Smerni diagram kvadratne napake faze v ravnini E - S53MV 10.03.2018 #####

import math,cmath	#uporabljene funkcije

k=0.001		#korak risanja v radianih
s=20.0/math.log(10.0)
h=10.0		#visina lijaka v valovnih dolzinah

def vsota(h,t,d):	#integracija vsote sevanja
	n=1000.0
	kh=h/n
	v=complex(0.0,0.0)
	x=(kh-h)/2.0
	while x<h/2.0:
		a=2.0*math.pi*x*math.sin(t)	#zakasnitev
		a=a+d*((2.0*x/h)**2)	#dodaj kvadratno napako faze
		v=v+cmath.exp(complex(0.0,a))
		x=x+kh
	return abs(v)/n

x=[]		#polja za risanje grafa
y=[]
z1=[]
z2=[]
z4=[]

t=k/2.0		#kot theta v radianih
while t<=math.pi/2.0:
	x=x+[t]			#dodaj tocko v risbo
	f=(1.0+math.cos(t))/2.0
	ff=f*math.sin(h*math.pi*math.sin(t))/(h*math.pi*math.sin(t)) #brez napake faze
	y=y+[s*math.log(math.fabs(ff))]
	d=math.pi/4.0	#kvadratna napaka faze pi/4
	z1=z1+[s*math.log(math.fabs(f*vsota(h,t,d)))]
	d=math.pi/2.0	#kvadratna napaka faze pi/2
	z2=z2+[s*math.log(math.fabs(f*vsota(h,t,d)))]
	d=math.pi	#kvadratna napaka faze pi
	z4=z4+[s*math.log(math.fabs(f*vsota(h,t,d)))]
	t=t+k			#povecaj t za korak

import matplotlib.pyplot as plt		#risanje grafa funkcije
fig=plt.figure()
plt.plot(x,y,'r-',lw=2)
plt.plot(x,z1,'c-',lw=2)
plt.plot(x,z2,'b-',lw=2)
plt.plot(x,z4,'y-',lw=2)
plt.grid(True)
plt.axis([0.0,math.pi/2,-40,2])
plt.title('Kvadratna napaka faze v ravnini E')
plt.xticks([0.0,math.pi/8,math.pi/4,3*math.pi/8,math.pi/2],['0',r'$\pi$/8',r'$\pi$/4',r'3$\pi$/8',r'$\pi$/2'])
plt.yticks([-40,-35,-30,-25,-20,-15,-10,-5,0])
plt.xlabel(r'Polarna razdalja $\Theta$ [rd]')
plt.ylabel('Logaritemsko merilo [dB]')
fig.savefig('napaka-e.png', transparent=True)
plt.show()

#konec programa

