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

import math	#uporabljene funkcije

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

def sito(u,z,w,q):	#izracun prevajalne funkcije LPF
	y=1/z		#Norton
	i=u/z
	c=180e-12	#vzporedni kondenzator 180pF
	y=y+complex(0,w*c)
	z=1/y		#Thevenin
	u=i/y
	l=3.3e-6	#zaporedna tuljava 3.3uH
	z=z+complex(w*l/q,w*l)
	y=1/z		#Norton
	i=u/z
	c=180e-12	#vzporedni kondenzator 180pF
	y=y+complex(0,w*c)
	z=1/y		#Thevenin
	u=i/y
	return [u,z]

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

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

