#!/usr/bin/env perl # L network design in perl use Math::Complex; sub Lnet { print "\33[H\33[J". " | \n". " ( ) RFC \n". " ( ) \n". " ( ) Rs = Output series impedance \n". " | \n". " | L1 C2 \n". " Co | \n". " +---------------()()()()---+---| |-----> Rload \n". " Ba |/ | \n". " -------| | \n". " |\\ - C1 \n". " | - \n". " Em | | \n". " +--------------------------+----------> Ground \n\n"; } print "\n\t\tRF L Network Design\n\n"; while (!$vcc) { print "Enter Vcc (in volts): "; chomp($vcc = ); $vcc =~ tr/0-9.//csd; } print "\n"; while (!$po) { print "Enter Pout (in watts): "; chomp($po = ); $po =~ tr/0-9.//csd; } print "\n"; while (!$cout) { print "Enter Cout (in picofarads): "; chomp($cout = ); $cout =~ tr/0-9.//csd; } print "\n"; while (!$freq) { print "Enter frequency (in MHz): "; chomp($freq = ); $freq =~ tr/0-9.//csd; } print "\n"; while (!$rl) { print "Enter load impedence (in ohms): "; chomp($rl = ); $rl =~ tr/0-9.//csd; } print "\n"; while (!$qi) { print "Enter desired Q: "; chomp($qi = ); $qi =~ tr/0-9.//csd; } $rout = ($vcc * $vcc) / (2 * $po); $xcout = 1 / (2 * pi * ($freq * 1000000) * ($cout / 1000000000000)); $rs = $rout / (1 + (($rout / $xcout) ** 2)); $xcs = $rs * ($rout / $xcout); $rv = (($qi ** 2) + 1) * $rs; $ql = sqrt ($rv / $rl) - 1; $xl1 = ($rs * $qi) + $xcs; $xc2 = $ql * $rl; $xc1 = $rv / ($qi - $ql); $l1 = $xl1 / (2 * pi * $freq); $c2 = 1 / (2 * pi * $freq * $xc2); $c1 = 1 / (2 * pi * $freq * $xc1); $rfc = 1000000 * ((4 * $rout) / (2 * pi * ($freq * 1000000))); &Lnet; printf " Frequency : %s MHz\n". " R source : %.3f ohms\n". " R load : %s ohms\n\n", $freq, $rs, $rl; printf " L1 : %.6f uH\n". " C1 : %.6f uF or %.2f pF\n", $l1, $c1, $c1 * 1000000; printf " C2 : %.6f uF or %.2f pF\n". " RFC : %.6f uH\n\n", $c2, $c2 * 1000000, $rfc;