Výpočet LQLF filtra

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání


Program je napísany v jazyky Python, je možné ho spustiť v dávkovom alebo v interaktívnom móde.

 1 #!/usr/bin/env python
 2 from scipy import *
 3 import sys
 4 
 5 def lqlf(f,q,c2,c4, k=1, r11=0, r12=0, r3=0):
 6 	
 7 	print '>>><<< Filter LQ-LF'
 8 	print '       Input data '
 9 
10 	# priamy vypocet filra
11 	if r11==0:
12 		print '         f   = ', f, ' [Hz]'
13 		print '         Q   = ', q
14 		print '         K   = ', k
15 		print '         C2  = ', c2, ' [nF]'
16 		print '         C4  = ', c4, ' [nF]'
17 		
18 		c2=c2*1e-9
19 		c4=c4*1e-9
20 		s=1.0/(2.0*q*q)*c2/c4
21 
22 		if s>=2.0:
23 			print '>>><<< Error:'
24 			print '       Value C2 > ',4*q*q*c4 *1e-9, ' [nf]'
25 			return
26 		
27 		P=(s-1)+sqrt((s-1)*(s-1)-1)
28 		r1=1.0/(2*pi*f*sqrt(P*c2*c4))
29 		r3=P*r1
30 		
31 		if k==1:
32 			r11=r1
33 			r12=1e90
34 		else:
35 			r11=r1/k
36 			r12=r1/(1-k)
37 		
38 		print '       Output data'
39 		print '         R11 = ', r11, ' [Ohm]'
40 		print '         R12 = ', r12, ' [Ohm]'
41 		print '         R3  = ', r3, ' [Ohm]'
42 		return
43 	
44 	else:		# kontrola parametrov
45 		print '         Q   = ', q
46 		print '         K   = ', r12/(r11+r12)
47 		print '         C2  = ', c2, ' [nF]'
48 		print '         C4  = ', c4, ' [nF]'
49 		print '         R11 = ', r11, ' [Ohm]'
50 		print '         R12 = ', r12, ' [Ohm]'
51 		print '         R3  = ', r3, ' [Ohm]'
52 		print '       Output data'
53 		
54 		r1=r11*r12/(r11+r12)
55 		c2=c2*1e-9
56 		c4=c4*1e-9
57 		f=1.0/(2*pi)*1/sqrt(r1*r3*c2*c4)
58 		print '         f   = ', f, ' [Hz]'
59 		return
60 
61 #=======================================================================
62 if __name__ == '__main__':
63 	if len(sys.argv)<5:
64 		print ">>><<< LQLF Filter Calculation "
65 		print "       For parameter calculation use "
66 		print "           python lqlf.py f Q C2 C4 K"
67 		print "       or for parameter test"
68 		print "           python lqlf.py f Q C2 C4 K R11 R12 R3"
69 		print ""
70 		exit(2)
71 	else:
72 		p=[0,0,0,0,0,0,0,0]
73 		i=0
74 		for x in sys.argv[1:]:
75 			p[i]=float(x)
76 			i=i+1
77 		if p[4]==0 : p[4]=1
78 		lqlf(p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7])