summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xvolume_pot/volume.f170
-rwxr-xr-xvolume_pot/volume.pl1
2 files changed, 171 insertions, 0 deletions
diff --git a/volume_pot/volume.f b/volume_pot/volume.f
new file mode 100755
index 0000000..7a22ed1
--- /dev/null
+++ b/volume_pot/volume.f
@@ -0,0 +1,170 @@
+ FUNCTION LOGPOT(X)
+ REAL*4 X, LOGPOT
+ REAL*4 YM, A, B
+
+ DATA YM /0.2/
+
+ B = ((1. / YM) - 1.) ** 2.
+
+ A = 1. / (B - 1.)
+
+ LOGPOT = A * (B ** X) - A
+ END FUNCTION
+
+
+ FUNCTION LOGPRO(V, T1, T2)
+ REAL*4 V, T1, T2, LOGPRO
+ REAL*4 LOGPOT
+ REAL*4 LV, LT1, LT2
+
+ LV = LOGPOT(V)
+ LT1 = LOGPOT(T1)
+ LT2 = LOGPOT(T2)
+
+ LOGPRO = (LV - LT1) / (LT2 - LT1)
+ END FUNCTION
+
+ FUNCTION PAR(A, B)
+ COMPLEX*8 A, B, PAR
+
+ PAR = 1. / ((1. / A) + (1. / B))
+ END FUNCTION
+
+ FUNCTION CAP(C, F)
+ REAL*4 C, F, PI
+ COMPLEX*8 CAP
+
+ DATA PI /3.14159265358979/
+
+ CAP = (0, -1) / ( C * 2 * PI * F)
+ END FUNCTION
+
+ FUNCTION GAIN(F, K)
+ REAL*4 F, K, GAIN
+
+ REAL*4 LOGPOT
+ REAL*4 LOGPRO
+ COMPLEX*8 PAR
+ COMPLEX*8 CAP
+
+ REAL*4 TE, TD, RAC
+ REAL*4 RAE, RAD, RED, RDC, TOT
+ COMPLEX*8 LD, LE
+
+ COMPLEX*8 ERAE, ERAD, ERED, ERAC, ERDC, ETOT
+ COMPLEX*8 PE, PD, PA, PED, PDA, G
+ REAL*4 V
+
+ DATA TE /0.4/
+ DATA TD /0.6/
+ DATA RAC /470.E3/
+
+ LD = 18.E3 + CAP( 47.E-9, F)
+ LE = 4.7E3 + CAP( 250.E-9, F)
+
+
+ RAE = RAC * LOGPOT(TE)
+ RAD = RAC * LOGPOT(TD)
+
+ RED = RAD - RAE
+ RDC = RAC - RAD
+
+ TOT = RAE + RED + RDC
+
+ WRITE(*,*) "TRACK RESISTANCES: ", RAE, "+", RED, "+",
+ C RDC, "=", TOT
+
+ ERAE = PAR(RAE * (1, 0.), LE)
+ ERAD = PAR(ERAE + RED, LD)
+ ERED = ERAD - ERAE
+ ERAC = ERAD + RDC
+ ERDC = ERAC - ERAD
+
+ ETOT = ERAC + 150000. + CAP(15.E-9, F) +
+ C PAR((1100., 0.), CAP(120.E-9, F))
+
+ WRITE(*, *) "EFFECTIVE TOTAL IMPEDANCE", ERAE, "+",
+ C ERED, "+", ERDC, "=", ERAC
+
+ PE = ERAE / ETOT
+ PD = ERAD / ETOT
+ PA = ERAC / ETOT
+ PED = PD - PE
+ PDA = PA - PD
+
+ V = K / 10.
+
+ IF (V.LT.TE) THEN
+ G = PE * LOGPRO(V, 0., TE)
+ ELSEIF (V.LT.TD) THEN
+ G = PE + (PED * LOGPRO(V, TE, TD))
+ ELSE
+ G = PD + ( PDA * LOGPRO( V, TD, 1. ) )
+ ENDIF
+
+ GAIN = ABS(G)
+ END FUNCTION
+
+
+ PROGRAM MAIN
+ INTEGER*4 K
+ REAL*4 F, G, GMAX
+ CHARACTER*13 FN
+ CHARACTER*1 FNA
+ INTEGER*1 INA
+ DIMENSION FNA(13), INA(13)
+ EQUIVALENCE(FN,FNA,INA)
+ DATA FNA /'V','O','L','U','M','E','-','0','0','.','D','A','T'/
+
+
+ OPEN (UNIT = 10, FILE = 'VOLUME.PLT', ACCESS = 'SEQUENTIAL',
+ C STATUS = 'UNKNOWN')
+
+ WRITE(10, *) 'set term png size 1280,1024'
+ WRITE(10, *) 'set output "volume.png"'
+ WRITE(10, *) 'set logscale x'
+ WRITE(10, *) 'set logscale y'
+ WRITE(10, *) 'set yrange [:1.1]'
+ WRITE(10, *) 'set xlabel "frequency/Hz"'
+ WRITE(10, *) 'set ylabel "gain"'
+ WRITE(10, *) 'plot \';
+
+ DO 40 K = 1, 10
+
+ FNA(8) = '0'
+ INA(8) = INA(8) + (K / 10)
+ FNA(9) = '0'
+ INA(9) = INA(9) + MOD(K, 10)
+
+ WRITE(10, *) ' "', FN, '" using 1:2 with lines title "',
+ C K,'", \'
+
+ OPEN (UNIT = 11, FILE = FN, ACCESS = 'SEQUENTIAL',
+ C STATUS = 'UNKNOWN')
+
+
+ GMAX = 0.
+
+ F = 20.
+10 G = GAIN(F, 1. * K)
+ IF (G.GT.GMAX) THEN
+ GMAX = G
+ END IF
+ F = F * 1.1
+ IF (F - 20.E3) 10,10,20
+20 F = 20.
+30 G = GAIN(F, 1. * K)
+ WRITE(11, *) F, G, G / GMAX
+ F = F * 1.1
+ IF (F - 20.E3) 30,30,40
+40 CONTINUE
+
+ CLOSE(10)
+
+ WRITE(11,*) ''
+ CLOSE(11)
+
+ CALL SYSTEM('gnuplot VOLUME.PLT')
+
+ END PROGRAM
+
diff --git a/volume_pot/volume.pl b/volume_pot/volume.pl
index fff39fb..5a72674 100755
--- a/volume_pot/volume.pl
+++ b/volume_pot/volume.pl
@@ -68,6 +68,7 @@ sub calc_gain($$) {
my $ld = 18000. + cap( 47., $f ); #18k+47nF
my $le = 4700. + cap( 250., $f ); #4.7k+250nF
+
#compute resistances of track
my $rae = $rac * logpot($te);
my $rad = $rac * logpot($td);