I wrote a script to sort of do this. I only ran for 15 second intervals because the amount of traffic can change a lot throughout the day. But you can try different durations.
It gives an output like:
test 1 of 10
gain= 49.6 messages= 771 positions= 41 planes= 49
gain= 48.0 messages= 742 positions= 43 planes= 51
gain= 44.5 messages= 785 positions= 37 planes= 51
gain= 40.2 messages= 677 positions= 35 planes= 51
gain= 37.2 messages= 743 positions= 32 planes= 48
gain= 32.8 messages= 711 positions= 37 planes= 46
test 2 of 10
gain= 49.6 messages= 667 positions= 32 planes= 44
...
test 10 of 10
gain= 49.6 messages= 757 positions= 43 planes= 49
gain= 48.0 messages= 814 positions= 37 planes= 51
gain= 44.5 messages= 830 positions= 37 planes= 50
gain= 40.2 messages= 766 positions= 49 planes= 43
gain= 37.2 messages= 671 positions= 31 planes= 50
gain= 32.8 messages= 651 positions= 27 planes= 43
===Totals===
Gain, Messages, Positions, Aircraft
49.6 6925 361 73
48.0 7230 331 76
44.5 7149 347 75
40.2 6883 352 71
37.2 7071 351 69
32.8 6653 332 69
Plotting the data into excel you can give helpful graphs
Although for tuning the Prostick it didn’t help me that much, since a lot of gains gave similar results
Here’s the code. It’s pretty dumb (like it just waits 2 seconds after starting dump1090 rather than checking to see if dump1090 is actually ready). You probably want to change the measure_duration, ntests, and gains variables at the top.
Stop any existing dump1090 process before running the script. sudo /etc/init.d/fadump1090.sh stop or **sudo service dump1090-mutability stop
**
#!/usr/bin/python2
import time, socket, subprocess
measure_duration = 15 #seconds
ntests = 10 #Number of tests
mutability = False #set to True if you use dump1090-mutability
#gains = "20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6".split()
gains = "36.4 38.6 40.2 42.1 44.5 48.0 49.6".split()
#gains = "22.9 25.4 28.0 29.7 32.8 33.8 36.4".split()
gains.reverse()
results = {}
for i in range(ntests):
print "test", i+1, "of", ntests
for g in gains:
if g not in results:
results[g] = [0,0,{}] #msgs, positions, aircraft
if mutability:
p = subprocess.Popen(('/usr/bin/dump1090-mutability --net --gain '+g+' --oversample --fix --phase-enhance --quiet').split(),shell=False,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
else:
p = subprocess.Popen(('/usr/bin/dump1090 --net --gain '+g+' --quiet').split(),shell=False,stdout=subprocess.PIPE, stderr=subprocess.PIPE)
time.sleep(2)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost',30003))
t = time.time()
d = ''
while 1:
d += s.recv(32)
if time.time() - t > measure_duration:
break
s.close()
p.terminate()
messages = 0
positions = 0
planes = {}
for l in d.split('
'):
a = l.split(',')
messages += 1
if len(a) > 4:
if a[1] == '3':
positions += 1
planes[a[4]] = 1
print "gain=",g, "messages=", messages, "positions=", positions, "planes=", len(planes.keys())
results[g][0] += messages
results[g][1] += positions
for hex in planes.keys():
results[g][2][hex] = 1
print "
===Totals==="
print "Gain, Messages, Positions, Aircraft"
for g in gains:
(messages,positions,planes) = results[g]
print g, messages, positions, len(planes.keys())