mirror of
https://github.com/thetechprepper/emcomm-tools-os-community.git
synced 2026-09-17 15:41:44 -04:00
133 lines
3.4 KiB
Perl
Executable File
133 lines
3.4 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# Author: Jari Perkiömäki OH6BG
|
|
# 12 June 2016: initial release
|
|
# 18 June 2016: added Long-Path predictions; use unpack for extracting table data
|
|
# 18 June 2016: added Power, Mode; small improvements
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
my @relhour = ();
|
|
my @sdbwhour = ();
|
|
my @co = ();
|
|
my @mo = ();
|
|
my @pwr = ();
|
|
my @db = ();
|
|
my $km = 0;
|
|
my $mi = 0;
|
|
my $brn = 0;
|
|
my $fh;
|
|
my $voa;
|
|
my $mode;
|
|
my $path = "Short-Path";
|
|
|
|
# main loop
|
|
open $fh, '>>', \$voa or die $!;
|
|
process ();
|
|
close $fh;
|
|
print $voa;
|
|
exit;
|
|
|
|
### end ###
|
|
|
|
sub process {
|
|
my $format = 'A4 A5 A5 A5 A5 A5 A5 A5 A5 A5';
|
|
while (<>) {
|
|
|
|
s/^\s+|\s+$//g;
|
|
|
|
if ( substr ($_, -1) eq "s" ) { @mo = split /\s+/; }
|
|
|
|
elsif ( substr ($_, -2) eq "kW" ) { @pwr = split /\s+/; }
|
|
elsif ( substr ($_, -2) eq "dB" ) {
|
|
|
|
@db = split /\s+/;
|
|
if ( $db[13] eq "24.0" ) { $mode = "CW"; }
|
|
elsif ( $db[13] eq "38.0" ) { $mode = "SSB"; }
|
|
else { $mode = "AM"; }
|
|
|
|
}
|
|
|
|
elsif ( /Long/ ) { $path = "Long-Path"; }
|
|
|
|
elsif ( substr ($_, -1) =~ /\d/ ) {
|
|
|
|
@co = split /\s+/;
|
|
$brn = sprintf "%d", $co[9] + 0.5;
|
|
$km = sprintf "%d", $co[12] + 0.5;
|
|
$mi = sprintf "%d", ($co[12] * 0.62137) + 0.5;
|
|
|
|
}
|
|
|
|
elsif ( substr ($_, -3) eq "REL" ) { push (@relhour, [ unpack( $format, $_ ) ] ); }
|
|
elsif ( substr ($_, -3) eq "DBW" ) { push (@sdbwhour,[ unpack( $format, $_ ) ] ); }
|
|
|
|
} # while
|
|
|
|
for ($fh) {
|
|
print $_ "VOACAP Prediction via $path. $mo[0] $mo[1]: SSN $mo[4] Power = $pwr[$#pwr], $mode\n";
|
|
print $_ "TX ($co[0]$co[1], $co[2]$co[3]) to RX ($co[5]$co[6], $co[7]$co[8]): $km km, $mi mi, $brn deg\n\n";
|
|
print $_ " | 01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|\n";
|
|
}
|
|
|
|
foreach my $freq (reverse 1..9) {
|
|
print $fh band($freq) . "|";
|
|
foreach my $h (0..23) { print $fh makehourfreq( $h, $freq ); }
|
|
print $fh "|" . band($freq) . "\n";
|
|
}
|
|
|
|
for ($fh) {
|
|
print $_ " | 01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|\n\n";
|
|
print $_ "A = 90 - 100% d = 25 - 49% * = REL 0%, but Signal Power over Noise\n";
|
|
print $_ "B = 75 - 89% e = 10 - 24%\n";
|
|
print $_ "C = 50 - 74% f = 1 - 9%\n\n";
|
|
}
|
|
|
|
@relhour = ();
|
|
@sdbwhour = ();
|
|
|
|
} # process
|
|
|
|
sub makehourfreq {
|
|
|
|
my $h = $_[0];
|
|
my $f = $_[1];
|
|
my $r = $relhour[$h][$f];
|
|
my $s = $sdbwhour[$h][$f];
|
|
|
|
if ( ($r == 0.00 && $s >= -167) ) { return " * "; }
|
|
else { return col($relhour[$h][$f]); }
|
|
|
|
}
|
|
|
|
sub band {
|
|
|
|
my $b = $_[0];
|
|
|
|
if ($b == 1) { return "80"; }
|
|
if ($b == 2) { return "60"; }
|
|
if ($b == 3) { return "40"; }
|
|
if ($b == 4) { return "30"; }
|
|
if ($b == 5) { return "20"; }
|
|
if ($b == 6) { return "17"; }
|
|
if ($b == 7) { return "15"; }
|
|
if ($b == 8) { return "12"; }
|
|
if ($b == 9) { return "10"; }
|
|
|
|
}
|
|
|
|
sub col {
|
|
|
|
my $rel = $_[0];
|
|
|
|
if ($rel == 0.00 ) { return " "; }
|
|
elsif ($rel >= 0.01 && $rel < 0.10 ) { return " f "; }
|
|
elsif ($rel >= 0.10 && $rel < 0.25 ) { return " e "; }
|
|
elsif ($rel >= 0.25 && $rel < 0.50 ) { return " d "; }
|
|
elsif ($rel >= 0.50 && $rel < 0.75 ) { return " C "; }
|
|
elsif ($rel >= 0.75 && $rel < 0.90 ) { return " B "; }
|
|
elsif ($rel >= 0.90 && $rel < 1.01 ) { return " A "; }
|
|
else { return " - "; }
|
|
|
|
} |