#!/usr/bin/perl -T #!/usr/local/bin/perl -T ## --> Minimum Jammer Power, jammin.cgi ## --> Green Bay Professional Packet Radio, www.gbppr.org ## This file Copyright 2003 under the GPL ## NO WARRANTY. Please send bug reports / patches / reports. # Setup # use Math::Complex; select STDOUT; $| = 1; my $pic = "pics/jammin.png"; # Print MIME # print "Content-type:text/html\n\n"; # Read environment # read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } my $pt = $FORM{'pt'}; my $pt_val = $FORM{'pt_val'}; my $ht = $FORM{'ht'}; my $ht_val = $FORM{'ht_val'}; my $dt = $FORM{'dt'}; my $dt_val = $FORM{'dt_val'}; my $hj = $FORM{'hj'}; my $hj_val = $FORM{'hj_val'}; my $dj = $FORM{'dj'}; my $dj_val = $FORM{'dj_val'}; my $n = $FORM{'n'}; # Clean up user input data # # Power # $pt =~ tr/0-9.-//csd; if ($pt == 0) { $pt = 0.001; } if ($pt_val eq "dBm") { $pt = 10 ** (($pt - 30) / 10); # dBm to W } $pt_w = sprintf "%.3f", $pt; $pt_dbm = sprintf "%.3f", (10 * log10($pt_w)) + 30; # Elevation # $ht =~ tr/0-9.//csd; if (!$ht) { $ht = 385; # 385 meters } if ($ht_val eq "feet") { $ht = $ht * 0.3048; # ft to m } $ht_m = sprintf "%.3f", $ht; $ht_ft = sprintf "%.3f", $ht * 3.2808399; $hj =~ tr/0-9.//csd; if (!$hj) { $hj = 386; # 386 meters } if ($hj_val eq "feet") { $hj = $hj * 0.3048; # ft to m } $hj_m = sprintf "%.3f", $hj; $hj_ft = sprintf "%.3f", $hj * 3.2808399; # Distance # $dj =~ tr/0-9.//csd; if (!$dj) { $dj = 17; # 17 kilometers } if ($dj_val eq "miles") { $dj = $dj * 1.609344; # mi to km } $dj_km = sprintf "%.3f", $dj; $dj_mi = sprintf "%.3f", $dj * 0.62137119; $dt =~ tr/0-9.//csd; if (!$dt) { $dt = 9; # 9 kilometers } if ($dt_val eq "miles") { $dt = $dt * 1.609344; # mi to km } $dt_km = sprintf "%.3f", $dt; $dt_mi = sprintf "%.3f", $dt * 0.62137119; if ($n eq "Level terrain (over water, sea, lakes, and ponds) - good conductivity") { $nv = 2; } elsif ($n eq "Rolling hills (farmland type terrain) - good conductivity") { $nv = 3; } elsif ($n eq "Moderately rough terrain (rolling to high hills, forested farmland) - fair/good conductivity") { $nv = 4; } elsif ($n eq "Very rough terrain (rocky mountains or desert) - poor conductivity") { $nv = 5; } # Start calculations # %hash = ( "0.05" => 400.0, "0.10" => 44.5, "0.15" => 25.0, "0.20" => 16.0, "0.25" => 11.2, "0.30" => 8.2, "0.35" => 6.3, "0.40" => 5.0, "0.45" => 4.0, "0.50" => 3.4, "0.55" => 2.8, "0.60" => 2.4, "0.65" => 2.3, "0.70" => 2.1, "0.75" => 1.8, "0.80" => 1.6, "0.85" => 1.4, "0.90" => 1.3, "0.95" => 1.2, "1.00" => 1.0, "1.05" => 0.91, "1.10" => 0.83, "1.15" => 0.76, "1.20" => 0.70, "1.25" => 0.64, "1.30" => 0.60, "1.35" => 0.55, "1.40" => 0.52, "1.45" => 0.48, "1.50" => 0.45, "1.55" => 0.42, "1.60" => 0.40, "1.65" => 0.37, "1.70" => 0.35, "1.75" => 0.40, "1.80" => 0.37, "1.85" => 0.35, "1.90" => 0.33, "1.95" => 0.28, "2.00" => 0.25, "2.05" => 0.24, "2.10" => 0.23, "2.15" => 0.22, "2.20" => 0.21, "2.25" => 0.20, "2.30" => 0.19, "2.35" => 0.18, "2.40" => 0.17, "2.45" => 0.17, "2.50" => 0.16, "2.55" => 0.15, "2.60" => 0.15, "2.65" => 0.14, "2.70" => 0.14, "2.75" => 0.13, "2.80" => 0.13, "2.85" => 0.12, "2.90" => 0.12, "2.95" => 0.11, "3.00" => 0.11, ); $A = ($hj_m / $ht_m) * 100; $B = sprintf "%3.0f", $A; $E = ($B - ($B % 5)) / 100; $F = sprintf "%1.2f",$E; $gta = (($dj_km / $dt_km) ** $nv) * 2; if ($F > "3.00") { $elev_f = 0.11; } elsif ($F < "0.05") { $elev_f = 400.0; } else { $elev_f = $hash{$F}; } $pj = $elev_f * $gta * $pt_w; $pj_w = sprintf "%.3f", $pj; $pj_dbm = sprintf "%.3f", (10 * log10($pj_w)) + 30; $elev_f = sprintf "%.2f", $elev_f; $nv = sprintf "%.2f", $nv; # Make all pretty # $date = scalar gmtime; # Draw me a web page # $g = ""; $r = ""; $b = ""; $e = ""; print < Minimum Jammer Power Results

Minimum Jammer Power Results


[jammin]

              $r Power Output of the Enemy Transmitter : $e$pt_w$r Watts ($e$pt_dbm$r dBm) $e
 $r Elevation of the Enemy Transmitter Location (AMSL) : $e$ht_m$r meters ($e$ht_ft$r feet) $e
      $r Enemy Transmitter-to-Target Receiver Distance : $e$dt_km$r kilometers ($e$dt_mi$r miles) $e

$g Elevation of the Jammer Transmitter Location (AMSL) : $e$hj_m$g meters ($e$hj_ft$g feet) $e $g Jammer Location-to-Target Receiver Distance : $e$dj_km$g kilometers ($e$dj_mi$g miles) $e
$b Terrain and Ground Conductivity Factor : $e$nv $b Elevation Factor : $e$elev_f $b Minimum Jammer Output Power : $e$pj_w$b Watts ($e$pj_dbm$b dBm) $e

Jammer's antenna gain is not taken into account.  Cut Minimum Jammer Output Power in half for every 3 dB of antenna gain.  (Assuming the jammer's antenna is pointed in the right direction, dumbass!)

Calculated on $date GMT

EOF