#!/usr/bin/python
##### Amplituda prilagoditve in prevajalne funkcije - S53MV 08.12.2018 #####

import math	#uporabljene funkcije

amin=-50	#minimalna amplituda [dB]
amax=0		#maksimalna amplituda [dB]
fmin=1e+8	#zacetna frekvenca [Hz]
fmax=2e+8	#koncna frekvenca [Hz]
q=200		#kvaliteta tuljav
zk=complex(50,0)	#karakteristicna impedanca [Ohm]

def sito(u,z,w,q):	#izracun prevajalne funkcije LC sita "bpf144"
	l=400e-9	#zaporedna tuljava 400nH
	z=z+complex(w*l/q,w*l)
	y=1/z		#Norton
	i=u/z
	c=8.6e-12	#vzporedni kondenzator 8.6pF
	y=y+complex(0,w*c)
	l=200e-9	#vzporedna tuljava 200nH
	y=y+1/complex(w*l/q,w*l)
	z=1/y		#Thevenin
	u=i/y
	c=0.5e-12	#zaporedni kondenzator 0.5pF
	z=z+1/complex(0,w*c)
	y=1/z		#Norton
	i=u/z
	c=8.6e-12	#vzporedni kondenzator 8.6pF
	y=y+complex(0,w*c)
	l=200e-9	#vzporedna tuljava 200nH
	y=y+1/complex(w*l/q,w*l)
	z=1/y		#Thevenin
	u=i/y
	l=400e-9	#zaporedna tuljava 400nH
	z=z+complex(w*l/q,w*l)
	return [u,z]

print 'Racunanje odziva sita...'
xx=[]		#polja za risanje grafa
yy=[]
zz=[]
f=fmin		#zacetna frekvenca
k=(fmax-fmin)/800	#800 frekvencnih korakov
while f<=fmax:
	xx=xx+[f]	#polje frekvenc
	w=2*math.pi*f
	u=complex(2,0)	#vir (2V,zk)
	z=zk
	[u,z]=sito(u,z,w,q)
#	[u,z]=sito(u,z,w,q)
#	[u,z]=sito(u,z,w,q)
	g=20*math.log10(abs((z-zk)/(z+zk)))	#prilagoditev [dB]
	zz=zz+[g]	#polje prilagoditve
	a=20*math.log10(abs(u*zk/(z+zk)))	#prevajalna funkcija [dB]
	yy=yy+[a]	#polje prevajalne funkcije
	f=f+k

print 'Risanje matplotlib...'
import matplotlib.pyplot as plt		#risanje grafov funkcij
plt.plot(xx,zz,'r-')	#prilagoditev
plt.plot(xx,yy,'c-')	#prevajalna funkcija
plt.axis([fmin,fmax,amin,amax])
plt.title('Prevajalna funkcija in prilagoditev lestvicastega vezja')
plt.xlabel('Frekvenca [Hz]')
plt.ylabel('Amplituda [dB]')
plt.grid(True)
plt.show()

#konec programa

