#!/usr/bin/env perl # VHF Line of Sight Distance / Isotropic Radiation Field Strength Calculator sub Power { print "\n"; while (!$pwr) { print "Enter antenna input power (in watts): "; chomp($pwr = ); $pwr =~ tr/0-9.//csd; } } sub Fs { $ss = ((30 * $pwr) ** .5) / $dism; $ssu = $ss * 1000; } sub Print { print "\n\n Transmitter power : $pwr Watts\n"; printf " Antenna Height Above Ground Level : %.2f m (%.2f ft)\n", $heightm, $heightf; printf " Approximate distance to radio horizon : %.2f km (%.2f mi)\n", $diskm, $dismi; printf " Approximate field strength at horizon : %.5f mV/m (%.5f uV/m)\n\n", $ss, $ssu; } sub Print1 { print "\n\n"; if ($unit eq "feet" && $dis == 1) { $unit = "foot"; } elsif ($unit eq "feet" && $dis > 1) { printf " Approximate field strength of %s Watts at %.2f feet:\n\n", $pwr, $dis; printf " millivolts per meter : %.5f mV/m\n". " microvolts per meter : %.5f uV/m\n\n", $ss, $ssu; exit 0; } printf " Approximate field strength of %s Watts at %.2f %s%s:\n\n", $pwr, $dis, $unit, ($dis == 1) ? "" : "s"; printf " millivolts per meter : %.5f mV/m\n". " microvolts per meter : %.5f uV/m\n\n", $ss, $ssu; exit 0; } while (!$ans || $ans > 2 || $ans =~ m/[a-z]/i) { print "\33[H\33[J". "VHF Line of Sight / Isotropic Radiation Field Strength Calculator\n\n\n". "1) Calculate VHF Line of Sight Distance\n". "2) Calculate Isotropic Radiation Field Strength\n\n". "Enter your selection: "; chomp($ans = ); } if ($ans == 1) { while (!m/^([0-9.]+)(ft|FT|m|M+)$/) { undef $_; undef $height; undef $unit; print "\nft = feet\n". "m = meters\n\n". "Enter antenna height above average terrain [height][ft,m]: "; chomp($_ = ); } if (m/^([0-9.]+)(ft|FT|m|M+)$/) { $height = $1; $unit = $2; } if ($unit =~ /ft/i) { $dismi = sqrt (2 * $height); $diskm = $dismi * 1.609344; $dism = $diskm * 1000; $heightf = $height; $heightm = $heightf * 0.3048; } elsif ($unit =~ /m/i) { $diskm = sqrt (17 * $height); $dism = $diskm * 1000; $dismi = $diskm / 1.609344; $heightm = $height; $heightf = $height / 0.3048; } &Power; &Fs; &Print; } elsif ($ans == 2) { while (!m/^([0-9.]+)(mi|MI|km|KM|m|M|ft|FT+)$/) { undef $_; undef $dis; undef $unit; print "\nmi = miles\n". "km = kilometers\n". "m = meters\n". "ft = feet\n\n". "Enter distance from antenna [distance][mi,km,m,ft]: "; chomp($_ = ); } if (m/^([0-9.]+)(mi|MI|km|KM|m|M|ft|FT+)$/) { $dis = $1; $unit = $2; } if ($unit =~ /mi/i) { $unit = "mile"; $dism = $dis * 1609.344; } elsif ($unit =~ /km/i) { $unit = "kilometer"; $dism = $dis * 1000; } elsif ($unit =~ /m/i) { $unit = "meter"; $dism = $dis; } elsif ($unit =~ /ft/i) { $unit = "feet"; $dism = $dis * 0.3048; } &Power; &Fs; &Print1; }