import math
#initialisation of variables
#Caption:Fourth Order Butterworth Filter
#Given Data
fo=1.0 #Cutoff Frequency in Hz
#For n = 4
k1=0.765
k2=1.848
Av1 = 3-k1
Av2 = 3-k2
#Calculations
print('For a fourth order Buttworth filter we cacade 2 second order Buttworth filter with parameters R1 R2 R1d R2d R C')
#we arbitrarily choose
R1=10.0 #in K
print("The value of R1= %.2f K " %R1)
#Av1=(R1+R1d)/R1
R1d=(Av1*R1)-R1
print("The value of R1d= %.2f K " %R1d)
R2 = 10.0 #in K
print("The value of R2= %.2f K " %R2)
R2d=(Av2*R2)-R2
print("The value of R2d= %.2f K " %R2d)
#Results
#To satisfy fo = 1/(2*math.pi*r*c) = 1kHz
R=1#in K
C = 1/(2*math.pi*R*fo)
print("The value of R = %.2f K " %R)
print("The value of C = %.2f microF " %C)
import math
#initialisation of variables
Ao=50.0 #Gain
fo=160.0 #center frequency
B=16.0 #Bandwidth in Hz
C1=0.1 #in microF
C2=0.1 #in microF
#Required Formulae
#Calculations
Q=fo/B
R1=(1000*Q)/(Ao*2*math.pi*fo*C1)
R3=(1000*Q)/((2*math.pi*fo)*(C1*C2/(C1+C2)))
#As C is in microFarad to compensate for it 1000 is multiplied
#Let r = R'
r=(10**6)/((2*math.pi*fo)**2*R3*C1*C2)
R2=(R1*r)/(R1-r)
#Results
print("The value of R1= %.2f K " %R1)
print("The value of R3= %.2f K " %R3)
print("The value of r= %.2f ohm " %(r*10**3))
print("The value of R2= %.2f ohm " %(R2*10**3))
import math
#initialisation of variables
Avo=-25.0
Vagc=20.0 #in V
Vcc=6.0 #in V
hfe=50.0
rbb=50.0 #in ohm
Cs=5.0 #in pF
Cl=5.0 #in pF
Ie1=1.0 #in mA
ft=900.0 #in MHz
Vt=26.0 #in V
n=2.0 #eeta
#re2 = infinity
#Calculations
#Since Vagc=0 , transistor Q2 is in cut off region and collector current of Q1 flows through Q3....So
Ie2=0
Ie3=1.0 #in mA
re3 = (n*Vt)/Ie3 #in ohm
print("The value of re3 = %.2f ohm " %re3)
gm = (Ie1)/Vt #in ohm^-1
print("The value of gm = %.2f ohm^-1 " %gm)
rbe=hfe/gm
print("The value of rbe = %.2f ohm " %rbe)
Ce=gm/(2*math.pi*ft*10**-6)
print("The value of Ce = %.2f pF " %Ce)
a3=1.0 #we make an assumption that alpha is one
s=0
#Av0 = -((a3*gm)/(re3*rbb))*(1/(((1/rbb)+(1/rbe)+(s*Ce))*((1/re3)+(s*Cs))*((1/Rl)+(s*(Cs+Cl)))))
#From here we can find Rl
k = -((a3*gm)/(re3*rbb))*(1/(((1/rbb)+(1/rbe)+(s*Ce))*((1/re3)+(s*Cs))))
Rl=Avo/k
print("The value of Rl = %.2f ohm " %Rl)
#C is in picoFarad so to compensate the whole equation some constants are multiplied
f1 = 1.0/(2*math.pi*Rl*(Cs+Cl)*10**-6)
#Results
print("The value of f1 = %.2f MHz " %f1)
f2 = 1.0/(2*math.pi*Ce*10**-6*((rbe*rbb)/(rbe+rbb)))
print("The value of f2 = %.2f MHz " %f2)
f3 = 1.0/(2*math.pi*Cs*re3*10**-6)
print("The value of f3 = %.2f MHz " %f3)
import math
#initialisation of variables
Vbb = 1.15 #in V
Vee=5.20 #in V
Vbe5=0.7 #in V
R=1.18 #in K
r=300.0 #in ohm
Vbecutin=0.5 #in V
#Calculations
#If all inputs are low then we assume that Q1,Q2 and Q3 are cutoff and Q4 is conducting
Ve=-Vbb-Vbe5#Voltage at Common Emitter in V
#Current I in 1.18K Resistor
I = (Ve+Vee)/R#in mA
I1=I
print("Current in 300 ohm resistance I= %.2f mA " %I)
#Output Voltage at Y
vy = -(r*I/1000)-Vbe5 #I is in mA so 1000 is multiplied
Vbe = vy-Ve
print("The value of Vbe is %.2f v " %Vbe)
if Vbe<Vbecutin :
print('Input transistors are non conducting as was assumed')
print('If atleast one input is high then it is assumed that curent in 1.18K resistance is switched to R and Q4 is cutoff')
print('Drop in 300 ohm resistance is zero.Since the base aand collector are tied together Q5 now behaves as a diode')
print('Across Q5')
v=0.7#voltage across Q5 in V
rQ5 = 1.5#in K
i = (Vee-v)/rQ5
v = 0.75#from the graph in V
print("The value of i is %.2f mA " %i)
print("The value of V is %.2f v " %v)
Ve = -v-Vbe5
Vbe4=-Vbb-Ve
print("The value of Vbe4 is %.2f v " %Vbe4)
#Results
print('The total output swing between two logic gates')
vo = -vy-v
print("The value of vo is %.2f v " %vo)
import math
#initialisation of variables
Vbb = 1.15 #in V
Vee=5.20 #in V
Vbe5=0.7 #in V
R=1.18 #in K
r=300 #in ohm
Vbecutin=0.5 #in V
#Calculations
#If all inputs are low then we assume that Q1,Q2 and Q3 are cutoff and Q4 is conducting
Ve=-Vbb-Vbe5 #Voltage at Common Emitter in V
#Current I in 1.18K Resistor
I = (Ve+Vee)/R#in mA
I1=I
#Output Voltage at Y
vy = -(r*I/1000)-Vbe5 #I is in mA so 1000 is multiplied
Vbe = vy-Ve
if Vbe<Vbecutin :
v=0.7 #voltage across Q5 in V
rQ5 = 1.5#in K
i = (Vee-v)/rQ5
v = 0.75 #from the graph in V
Ve = -v-Vbe5
Vbe4=-Vbb-Ve
vo = -vy-v
#Results
#Calculation of noise margin
vn = Vbecutin-Vbe4
print('Positive noise spike which will cause the gate to malfunction')
print("The value of vn is %.2f v " %vn)
import math
#initialisation of variables
#Verify that conducting transistor is in active region
#Given Data
Vbb = 1.15 #in V
Vee=5.20 #in V
Vbe5=0.7 #in V
R=1.18 #in K
r=300.0 #in ohm
Vbecutin=0.5 #in V
#Calculations
#If all inputs are low then we assume that Q1,Q2 and Q3 are cutoff and Q4 is conducting
Ve=-Vbb-Vbe5#Voltage at Common Emitter in V
#Current I in 1.18K Resistor
I = (Ve+Vee)/R #in mA
I1=I
#Output Voltage at Y
vy = -(r*I/1000)-Vbe5 #I is in mA so 1000 is multiplied
Vbe = vy-Ve
if Vbe<Vbecutin :
v=0.7 #voltage across Q5 in V
rQ5 = 1.5 #in K
i = (Vee-v)/rQ5
v = 0.75 #from the graph in V
Ve = -v-Vbe5
Vbe4=-Vbb-Ve
vo = -vy-v
Vb4 = Vbb
Vc4 = -(I*r)/1000 #in V
Vcb4 = Vc4+Vb4
print("The value of Vcb4 is %.2f v " %Vcb4)
if Vcb4>0 :
print('For on npn transistor this represents a reverse bias and Q4 must be in active region')
Vb1 = v
Vc1 = vy+Vbe5
Vcb1 = Vc1 + Vb1
#Results
print("The value of Vc1 is %.2f v " %Vc1)
print("The value of Vcb1 is %.2f v " %Vcb1)
if Vcb1<0 :
print('For an npn transistor this represents a forward bias.... therefore Q1 is in saturation region')
import math
#initialisation of variables
Vbb = 1.15 #in V
Vee=5.20 #in V
Vbe5=0.7 #in V
R=1.18 #in K
r=300.0 #in ohm
Vbecutin=0.5 #in V
#Calculations
#If all inputs are low then we assume that Q1,Q2 and Q3 are cutoff and Q4 is conducting
Ve=-Vbb-Vbe5#Voltage at Common Emitter in V
#Current I in 1.18K Resistor
I = (Ve+Vee)/R#in mA
I1=I
#Output Voltage at Y
vy = -(r*I/1000.0)-Vbe5#I is in mA so 1000 is multiplied
Vbe = vy-Ve
if Vbe<Vbecutin :
v=0.7#voltage across Q5 in V
rQ5 = 1.5#in K
i = (Vee-v)/rQ5
v = 0.75#from the graph in V
Ve = -v-Vbe5
Vbe4=-Vbb-Ve
vo = -vy-v
#Verify that conducting transistor is in active region
Vb4 = Vbb
Vc4 = -(I*r)/1000#in V
Vcb4 = Vc4+Vb4
Vb1 = v
Vc1 = vy+Vbe5
Vcb1 = Vc1 + Vb1
Vbe1 = Vbe5
Ve = -(Vb1+Vbe1)
#Results
print("The value of Ve is %.2f v " %Ve)
I = (Ve + Vee)/R
I2=I
R = -Vc1/I
print("The value of R is %.2f ohm " %R)
import math
#initialisation of variables
Vbb = 1.15#in V
Vee=5.20#in V
Vbe5=0.7#in V
R=1.18#in K
r=300.0 #in ohm
Vbecutin=0.5#in V
#Calculations
#If all inputs are low then we assume that Q1,Q2 and Q3 are cutoff and Q4 is conducting
Ve=-Vbb-Vbe5#Voltage at Common Emitter in V
#Current I in 1.18K Resistor
I = (Ve+Vee)/R#in mA
I1=I
#Output Voltage at Y
vy = -(r*I/1000.0)-Vbe5#I is in mA so 1000 is multiplied
Vbe = vy-Ve
if Vbe<Vbecutin :
v=0.7#voltage across Q5 in V
rQ5 = 1.5#in K
i = (Vee-v)/rQ5
v = 0.75#from the graph in V
Ve = -v-Vbe5
Vbe4=-Vbb-Ve
vo = -vy-v
Vb4 = Vbb
Vc4 = -(I*r)/1000.0#in V
Vcb4 = Vc4+Vb4
Vb1 = v
Vc1 = vy+Vbe5
Vcb1 = Vc1 + Vb1
Vbe1 = Vbe5
Ve = -(Vb1+Vbe1)
I = (Ve + Vee)/R
I2=I
I =(I1+I2)/2.0
#Results
print("The value of I is %.2f mA " %I)
I2 = (Vee-v)/rQ5
I3 = (Vee+vy)/rQ5
I = I + I2 + I3
P = Vee*I
print("Power dissipated is %.2f mW " %P)
import math
#initialisation of variables
C=50.0 #nF
Ra=10.0 #kOhm
Vcc=5.0 #V
beta=20.0
#Calculations
T=1.1*Ra*C
Ib=(Vcc-0.7)/100
Ic=beta*Ib
dt=C*(Vcc/Ic)
#Results
print("Another pulse can be generated at hte output after time period of = %.2f ns " %dt)