diff options
-rwxr-xr-x | volume_pot/volume.f | 170 | ||||
-rwxr-xr-x | volume_pot/volume.pl | 1 |
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); |