#!/usr/bin/env perl # Pi network design in perl use Math::Complex; sub Pinet { print "\33[H\33[J". " \n". " L1 \n\n". " +------+---()()()()---+------+ \n". " | | | | \n". " Rsource < > | | < > Rload \n". " < > - C1 C2 - < > \n". " < > - - < > \n". " < > | | < > \n". " | | | | \n". " | | | | \n". " +------+--------------+------+--> Ground \n\n"; } print "\n\t\tRF Pi Network Design\n\n"; while (!$rs) { print "Enter source impedance (in ohms): "; chomp($rs = ); } print "\n"; while (!$rl) { print "Enter load impedance (in ohms): "; chomp($rl = ); $rl =~ tr/0-9.//csd; } print "\n"; while (!$fq) { print "Enter frequency (in MHz): "; chomp($fq = ); $fq =~ tr/0-9.//csd; } print "\n"; while (!$q) { # use low Q in solid state circuits (5-15) print "Enter desired Q: "; chomp($q = ); $q =~ tr/0-9.//csd; } $xc1 = $rs / $q; $a = ($rs / $rl) / ((($q ** 2) + 1) - ($rs / $rl)); $xc2 = $rl * (sqrt $a); $xl = (($q * $rs) + (($rs * $rl) / $xc2)) / (($q ** 2) + 1); $C1 = 1 / (2 * pi * $fq * $xc1); $C2 = 1 / (2 * pi * $fq * $xc2); $L1 = $xl / (2 * pi * $fq); &Pinet; printf " Frequency : %s MHz\n". " R source : %.3f ohms\n". " R load : %.3f ohms\n\n", $fq, $rs, $rl; printf " L1 : %.6f uH\n". " : %.6f nH\n", $L1, $L1 * 1000; printf " C1 : %.6f uF or %.2f pF\n", $C1, $C1 * 1000000; printf " C2 : %.6f uF or %.2f pF\n\n", $C2, $C2 * 1000000;