Testing reception quality: Difference between revisions

From LinuxTVWiki
Jump to navigation Jump to search
(Added the actual scripts)
(more structure)
Line 1: Line 1:
== Testing all channels and get an average ==
== Testing all channels and get an average ==
=== Why? When? ===

Script that gets you all channels and averages everything
Script that gets you all channels and averages everything


Can be good when doing major changes to the installation, like replacing cables or installing a masthead amplifier. Create a baseline, then compare.
Can be good when doing major changes to the installation, like replacing cables or installing a masthead amplifier. Create a baseline, then compare.


=== Script ===


#!/usr/bin/perl -w
#!/usr/bin/perl -w
Line 98: Line 101:


Original author: José Oliver Segura
Original author: José Oliver Segura


== How? ===


Requirements: a channels.conf file, tzap, veryfy the locations of programs and files in the code.
Requirements: a channels.conf file, tzap, veryfy the locations of programs and files in the code.
Line 103: Line 109:
Usage:
Usage:
tzap channel | tzapfilter.py
tzap channel | tzapfilter.py


=== Sample output ===




== Test a channel continuously ==
== Test a channel continuously ==
=== Why? When? ===


Script that takes a channel and gives continuous results.
Script that takes a channel and gives continuous results.


Can be good when pointing the antenna.
Can be good when pointing the antenna.


=== Script ===


#!/usr/bin/env python
#!/usr/bin/env python
Line 133: Line 148:


Original author: Matt Doran
Original author: Matt Doran


=== How? ===


Requirements: a channels.conf file, tzap
Requirements: a channels.conf file, tzap
Line 138: Line 156:
Usage:
Usage:
tzap channel | tzapfilter.py
tzap channel | tzapfilter.py


=== Sample output ===

Revision as of 12:27, 2 February 2008

Testing all channels and get an average

Why? When?

Script that gets you all channels and averages everything

Can be good when doing major changes to the installation, like replacing cables or installing a masthead amplifier. Create a baseline, then compare.


Script

#!/usr/bin/perl -w

# Original script from José Oliver Segura <primijos@gmail.com>
# From Hex to % for signal strength by Nicolas Will <nico@youplala.net> Feb. 1, 2008
# License unknown....
# Make sure that the tzap and channels.conf locations are correct

#use strict;

my($tzap) = "/usr/bin/tzap";
my($tzapArgs) = "-r";
my(@channels);
my(%channelsHz);
my(%channelsFEC1);
my(%channelsFEC2);
my(%signalFreqAcum);
my(%signalFreqCount);
my(%berFreqAcum);
my(%berFreqCount);
my(%uncFreqAcum);
my(%uncFreqCount);

sub loadChannels() {
        my $file = $ENV{"HOME"} . "/.tzap/channels.conf";
        open (CHANNELS,"< $file") or die $!;
        while (<CHANNELS>) {
                chomp;
                @_ = split (/:/,$_);
                my $channelName = $_[0];
		$channelsHz{$channelName} = $_[1];
		$channelsFEC1{$channelName} = $_[4];
		$channelsFEC2{$channelName} = $_[5];
                push(@channels,$channelName);
        }
        close CHANNELS;
}

&loadChannels();
print "Starting...\n";
my $channel;
foreach $channel (@channels) {
	my $count = 0;
	my $freq = $channelsHz{$channel};
	my $fec1 = $channelsFEC1{$channel};
	my $fec2 = $channelsFEC2{$channel}; 

	print "================================================================================";
	print "\n";
	print "Tunning channel $channel ($freq)\n";
        my $zapPid = open ZAP, "$tzap $tzapArgs \"$channel\" 2>&1 |" or die $! . ": $tzap $tzapArgs \"$channel\"";
	while ( $count < 10 && defined( my $line = <ZAP> )  ) {
     		chomp($line);
		if ($line =~ /FE_HAS_LOCK/) {
     			#print "$line\n";
			$count++;
			##
			## status 1f | signal a1ae | snr 0000 | ber 00000000 | unc 00000012 | FE_HAS_LOCK
			##
			$line =~ /.+signal (....).+ber (........).+unc (........).+/;
			my $signal = hex $1;
			my $ber = hex $2;
			my $unc = hex $3;
			$signalFreqAcum{$freq} += $signal;
			$signalFreqCount{$freq}++;
			$berFreqAcum{$freq} += $ber;
			$berFreqCount{$freq}++;
			$uncFreqAcum{$freq} += $unc;
			$uncFreqCount{$freq}++;
			print join("\t","Signal: ".int($signal/65536*100)."%","BER ".$ber,"UNC ".$unc),"\n";
		} else {
			print "$line\n";
		}
   	}
	close ZAP;
	print "\n";
}

print "Summary statistics:\n";
print "Frequency\tSignal\tBer     \tUnc\n";
print "=========\t======\t========\t========\n";
my $freq;
foreach $freq (keys(%signalFreqAcum)) {
	print "$freq\t";
	print int($signalFreqAcum{$freq}/$signalFreqCount{$freq}/65536*100)." %";
	print "\t";
	#printf "%08x",$berFreqAcum{$freq}/$berFreqCount{$freq};
	print $berFreqAcum{$freq}/$berFreqCount{$freq};
	print "\t";
	printf "%08x",$uncFreqAcum{$freq}/$uncFreqCount{$freq};
	print "\n";
}

Original author: José Oliver Segura


How? =

Requirements: a channels.conf file, tzap, veryfy the locations of programs and files in the code.

Usage:

tzap channel | tzapfilter.py


Sample output

Test a channel continuously

Why? When?

Script that takes a channel and gives continuous results.

Can be good when pointing the antenna.


Script

#!/usr/bin/env python

import sys

f = sys.stdin
while True:
       l = f.readline().strip()
       fields = l.split(" | ") 
       if len(fields) < 2:
               print l
       else:
               # Sig Strength
               sigStr = fields[1].split(" ")[1]
               sig = int(sigStr, 16) / float(int('ffff', 16))
               fields[1] = "signal %.1f%%" % (sig * 100.0)

               # BER 
               berStr = fields[3].split(" ")[1]
               ber = int(berStr, 16) 
               fields[3] = "ber %08d" % (ber)
               print " | ".join(fields)

Original author: Matt Doran


How?

Requirements: a channels.conf file, tzap

Usage:

tzap channel | tzapfilter.py


Sample output