#include #include "math.h" main() { double series(); double square(); int i; double F0, F1, F2, F3, F4, F5, F6, F7; double C0, C1, C2, Pad_C, Cvar_Min, Cvar_Max, C6, C7; double K0, K1, K2, K3, K4, K5, Osc_total_C, Little_Guess, Big_Guess; double pi, T1, T2, X1, X2, track_error=1000, T0; double L0, Aer_L, Osc_L; printf("\nMin input frequency in MHz "); scanf("%lf",&F3); F3 = F3 * 1e6; printf("\nMax input frequency in MHz "); scanf("%lf",&F4); F4 = F4 * 1e6; printf("\nIntermediate frequency in MHz "); scanf("%lf",&F7); F7 = F7 * 1e6; printf("\nMax tuning capacitor value in pF "); scanf("%lf",&Cvar_Max); Cvar_Max = Cvar_Max * 1e-12; printf("\nMin tuning capacitor value in pF "); scanf("%lf",&Cvar_Min); Cvar_Min = Cvar_Min * 1e-12; /* printf("\n\n*****\n%f\n%f\n%f\n%f\n%f\n*****\n", F3, F4, F7, Cvar_Max*1e12, Cvar_Min*1e12); */ pi = 3.1415926805; F1 = ( F3 + F4 ) / 2.0; F5 = F3 + F7; F6 = F4 + F7; T1 = 0; T2 = 0; /* Aerial Circuit */ X1 = square( F4 / F3); C1 = (Cvar_Max - X1*Cvar_Min)/(X1-1); Aer_L = square( 0.5/( pi * F3 )) /( C1 + Cvar_Max ); /* Oscillator Circuit */ X2 = square( F6 / F5); Big_Guess = Cvar_Max * 1e4; Little_Guess = Cvar_Min / 1e4; /* Make a guess at Padding Capacitor value */ for(;track_error > 100;) { Pad_C = sqrt( Little_Guess * Big_Guess); /* printf("\nTrying Padder value %12.2lf pF.", Pad_C * 1e12); printf("\n*****\n%lf %lf %lf %lf\n*****\n", Pad_C, Little_Guess, Big_Guess, track_error); */ C6 = series( Cvar_Max, Pad_C ); C7 = series( Cvar_Min, Pad_C ); C2 = (C6 - X2 * C7) / (X2 -1); Osc_L = square( 0.5 / ( pi * F5) ) / (C6 + C2); /* Now see if our guess was any good */ C0 = square( 0.5 / ( pi * F1 ) ) / Aer_L - C1; Osc_total_C = C2 + series( C0, Pad_C); F2 = 0.5 / (pi * sqrt( Osc_L * Osc_total_C )); track_error = ( F2 - (F1 + F7)); if( track_error > 50) Big_Guess = Pad_C; if( track_error < -50) Little_Guess = Pad_C; track_error = fabs( track_error); } /* printf("\n\n*****\n%lf %lf %lf %lf\n*****\n", Pad_C, Little_Guess, Big_Guess, track_error); */ /* List Tracking Error versus Frequency */ printf("\n\nAerial Freq. Osc. Freq. Track Err."); printf("\n Hz. Hz. Hz.\n"); F1 = F3; for(i=1; i<=11; i++) { C0 = square(0.5/( pi * F1)) / Aer_L - C1; K2 = series( C0, Pad_C ) + C2; F2 = 0.5/( pi * sqrt( Osc_L * K2) ); T0 = F2 - F1 - F7; /* Update Worst error figures */ if( T0 < T1 ) T1 = T0; if( T0 > T2 ) T2 = T0; printf("\n%12.2lf %12.2lf %12.2lf", F1, F2, T0); F1 += ( F4 - F3 )/10.0; } printf("\n\nWorst tracking error %12.2lf to %12.2lf\n\n",T1, T2 ); printf("\nAerial circuit values Oscillator values\n"); printf("\nInductor %12.2lf uH Inductor %12.2lf uH",Aer_L * 1e6, Osc_L * 1e6); printf("\nTrimmer %12.2lf pF Trimmer %12.2lf pF",C1 * 1e12, C2 * 1e12); printf("\n Padder %12.2lf pF\n",Pad_C * 1e12); } double square(A) double A; { return( A * A ); } double series(A,B) double A,B; { return( A * B / ( A + B)); }