#!/usr/bin/perl sub log10 { log($_[0]) * (1 / log(10)); } print "\n\n\t\tVHF/UHF Free Space Loss \\ Received Power Level Calculator\n\n"; while (!m/^([0-9.]+)(ft|FT|m|M|km|KM|mi|MI+)$/) { undef $_; undef $dis; undef $unit; print "\nft = feet\n". "m = meters\n". "km = kilometers\n". "mi = miles\n\n". "Enter Distance Between Antennas [value][ft,m,km,mi]: "; chomp($_ = ); } if (m/^([0-9.]+)(ft|FT|m|M|km|KM|mi|MI+)$/) { $dis = $1; $unit = $2; } if ($unit =~ /ft/i) { $unit = "feet"; $dist = $dis / 5280; } elsif ($unit eq "m" or $unit eq "M") { $unit = "meter"; $dist = $dis * 0.00062137119; } elsif ($unit =~ /km/i) { $unit = "kilometer"; $dist = $dis * 0.62137119; } elsif ($unit =~ /mi/i) { $unit = "mile"; $dist = $dis; } print "\n"; while (!$frq) { print "Enter Frequency (in MHz): "; chomp($frq = ); $frq =~ tr/0-9.//csd; } print "\n"; while (!$pwr) { print "Enter Transmitter Power (in Watts): "; chomp($pwr = ); $pwr =~ tr/0-9.//csd; } print "\n"; while (!$txant) { print "Enter Transmitter Antenna Gain (in dBi): "; chomp($txant = ); $txant =~ tr/0-9.-//csd; } print "\n"; while (!$rxant) { print "Enter Receive Antenna Gain (in dBi): "; chomp($rxant = ); $rxant =~ tr/0-9.-//csd; } $tx_dbm = 10 * log10($pwr) + 30; $fs = (20 * (log10 $frq)) + (20 * (log10 ($dist * 1.609344))) + 32.447782; $rx_dbm = $tx_dbm - $fs - ($txant + $rxant); $rx_uvolt = (sqrt(( 10 ** ($rx_dbm / 10) / 1000) * 50)) * 1000000; print "\n\n--------\n\n"; printf " Antenna Spacing : %.3f %s%s\n", $dis, $unit, ($dis == 1) ? "" : "s"; printf " Transmitter Power : %.3f Watts (%.3f dBm)\n", $pwr, $tx_dbm; printf " Transmitter Frequency : %.3f MHz\n", $frq; printf " Transmitter Antenna Gain : %.3f dB\n", $txant; printf " Receive Antenna Gain : %.3f dB\n\n", $rxant; printf " Received Voltage : %.9f microvolts\n", $rx_uvolt; printf " Received Power : %.3f dBm\n", $rx_dbm; printf " Free Space Attenuation : %.3f dB\n\n", $fs;