From 7727b7c9024b8b33a766bec19937104c6629b737 Mon Sep 17 00:00:00 2001 From: Nick Foster Date: Mon, 20 Sep 2010 11:09:59 -0700 Subject: [PATCH] Fixed some bugs where I was treating sample data as an integer. Allows use with UHD without multiplying everything up by 64K. =) Also changed the reference level printout to show dB instead of sample value. This seems more useful. 0dB is full scale. --- src/lib/air_modes_framer.cc | 4 ++-- src/lib/air_modes_preamble.cc | 2 +- src/lib/air_modes_slicer.cc | 2 +- src/python/altitude.py | 1 + src/python/altitude.pyc | Bin 1417 -> 1420 bytes src/python/cpr.py | 13 ++++++++----- src/python/cpr.pyc | Bin 5823 -> 5836 bytes src/python/modes_print.py | 2 +- src/python/uhd_modes.py | 5 ++--- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/lib/air_modes_framer.cc b/src/lib/air_modes_framer.cc index 7fbbc86..f4b9baf 100644 --- a/src/lib/air_modes_framer.cc +++ b/src/lib/air_modes_framer.cc @@ -39,7 +39,7 @@ int air_modes_framer::work(int noutput_items, int size = noutput_items - d_check_width; //need to be able to look ahead a full frame - int reference_level = 0; + float reference_level = 0; framer_packet_type packet_attrib; for(int i = 0; i < size; i++) { @@ -67,7 +67,7 @@ int air_modes_framer::work(int noutput_items, //NOTE: you can change the default here to be short packet, and then check for a long packet. don't know which way is better. for(int j = (65 * d_samples_per_symbol); j < (70 * d_samples_per_symbol); j += d_samples_per_symbol) { - int t_max = (bit_energy(&inraw[i+j], d_samples_per_chip) > bit_energy(&inraw[i+j+d_samples_per_chip], d_samples_per_chip)) ? bit_energy(&inraw[i+j], d_samples_per_chip) : bit_energy(&inraw[i+j+d_samples_per_chip], d_samples_per_chip); + float t_max = (bit_energy(&inraw[i+j], d_samples_per_chip) > bit_energy(&inraw[i+j+d_samples_per_chip], d_samples_per_chip)) ? bit_energy(&inraw[i+j], d_samples_per_chip) : bit_energy(&inraw[i+j+d_samples_per_chip], d_samples_per_chip); if(t_max < (reference_level / 2)) packet_attrib = Short_Packet; } diff --git a/src/lib/air_modes_preamble.cc b/src/lib/air_modes_preamble.cc index 1c309a2..156072a 100644 --- a/src/lib/air_modes_preamble.cc +++ b/src/lib/air_modes_preamble.cc @@ -39,7 +39,7 @@ int air_modes_preamble::work(int noutput_items, int size = noutput_items - d_check_width; int pulse_offsets[4]; - int bit_energies[4]; + float bit_energies[4]; for(int i = d_samples_per_chip; i < size; i++) { float pulse_threshold = bit_energy(&inavg[i], d_samples_per_chip) * d_threshold; diff --git a/src/lib/air_modes_slicer.cc b/src/lib/air_modes_slicer.cc index 1035b05..18baf3d 100644 --- a/src/lib/air_modes_slicer.cc +++ b/src/lib/air_modes_slicer.cc @@ -90,7 +90,7 @@ int air_modes_slicer::work(int noutput_items, // confidence = bool(int(firstchip_inref) + int(secondchip_inref)); //one and only one chip in the reference zone //below is the Lincoln Labs slicer. it may produce greater bit errors. supposedly it is more resistant to mode A/C FRUIT. - + //see http://adsb.tc.faa.gov/WG3_Meetings/Meeting8/Squitter-Lon.pdf if(firstchip_inref && !secondchip_inref) { slice = 1; confidence = 1; diff --git a/src/python/altitude.py b/src/python/altitude.py index ce40d7d..c541fb9 100644 --- a/src/python/altitude.py +++ b/src/python/altitude.py @@ -3,6 +3,7 @@ #betcha this would be faster if you used a table for mode C #you could strip out D1 since it's never used, that leaves 11 bits (table is 2048 entries) +#on the other hand doing it this way is educational for others def decode_alt(alt, bit13): if alt & 0x40 and bit13 is True: return "METRIC ERROR" diff --git a/src/python/altitude.pyc b/src/python/altitude.pyc index 1beff4be6502dc76c96a6460c1dde367849c02e3..9bfe393cc159d499f41d0fa907c8fbb602b46980 100644 GIT binary patch delta 100 zcmeC=?%`&?_=%URnt#eh_I=EZdXpVlMOkz6Q&Nj3-)B~1WS`8&avnwWJ&O#Z<76II f6BN<=%o5@p3=9l5K&_=Ysdnr@b};Isk&(H$Cy delta 150 zcmeC-?&M~__=%Tmsr`hF?E9FdbQu^J^fU5vQ}y#Qle6{Hi*yq+i*!Nk$sbw7Cx2(= tXJnhq&T<~VLK#Mf$$YFP_!WsulyCrTv&qd*Da}c>V*|2_nScbR6#(azEBgQd diff --git a/src/python/cpr.py b/src/python/cpr.py index a1099db..3f2b892 100644 --- a/src/python/cpr.py +++ b/src/python/cpr.py @@ -2,12 +2,15 @@ #from string import split, join #from math import pi, floor, cos, acos import math, time -#this implements CPR position decoding. local only for now. +#this implements CPR position decoding. latz = 15 nbits = 17 -my_lat = 37.76225 #update these later! -my_lon = -122.44254 +#my_lat = 37.76225 #update these later! +#my_lon = -122.44254 +#ER +my_lat = 37.40889176297184 +my_lon = -122.07765340805054 def nz(ctype): @@ -229,8 +232,8 @@ def range_bearing(loc_a, loc_b): avg_lat = (a_lat + b_lat) / 2.0 - R1 = earth_radius_mi*(1.0-esquared)/pow((1.0-esquared*pow(math.sin(avg_lat),2)),1.5) - + R1 = earth_radius_mi*(1.0-esquared)/pow((1.0-esquared*pow(math.sin(avg_lat),2)),1.5) + R2 = earth_radius_mi/math.sqrt(1.0-esquared*pow(math.sin(avg_lat),2)) distance_North = R1*delta_lat diff --git a/src/python/cpr.pyc b/src/python/cpr.pyc index cd9c3b662cceb8dfc0a82e9a02508835c1ca0d08..9e746771c4acb1bf07d7d1a725c85320b79d39a2 100644 GIT binary patch delta 431 zcmdn5dq$W2;wN4%JLxGC+0XK?Ke25>*cK;;bOr_nw;wGNABQt)PM*LaDxaI5l3J`^ zT$HR|P+5|ZpQoQ(P^1TBG65ClRS8VaV>}K~$qH6E*`G<8QFwATQ$9pg3739Wkp7(b z)O`8Pg3N-95Y@6cR0pvGRVz&nVL6Ismn3t3p6X_QRvD-PP)D?~DKZ*tUd|?rE-VjJ zZ!!5B`%D7%i306&oP3buH;R4NI5imEH~;5!Vnz{;=G9~j+T6-}gat)7SxAwwYjdj* vKdS0=qT-DACm$1?j-t3+OjnwPjggI+lbMqTh?zOLIXO5vIoW`;1!pJ#*f)Yw delta 394 zcmX@3yI+_6;wN6NCH500vY+Kw+)$J;@u8DL`u|g2lY{0=d>qcGF}aXUlqD}SIeT&- zlQ26I0|P@|74PJH#^b0`(u@L=bD8o{1%=N5N2fuO3P1< zU^$8`5y<oS&z(IfPXPMFY_O$@AFw7l}QAU@|99&M!=rR?&VvPQq`+1MBpvmxa0UeuMP!yk%nw+1K+P-;$5I>4; ukcTXQYVJ(FBsv{U^W^DbQqqiUjBL!D%$z(x%*@Hn$-&9V$p)k?I70#UV{4!Q diff --git a/src/python/modes_print.py b/src/python/modes_print.py index 29563b7..7d74c13 100644 --- a/src/python/modes_print.py +++ b/src/python/modes_print.py @@ -33,7 +33,7 @@ def modes_print(message): else: output = "No handler for message type " + str(msgtype) + " from " + str(ecc) - output = "(%.0f) " % float(reference) + output + output = "(%.0f) " % (10.0*math.log10(float(reference))) + output return output diff --git a/src/python/uhd_modes.py b/src/python/uhd_modes.py index a79b5c9..966af10 100755 --- a/src/python/uhd_modes.py +++ b/src/python/uhd_modes.py @@ -33,7 +33,7 @@ The following are optional command line parameters: -R SUBDEV Daughter board specification, defaults to first found -f FREQ USRP receive frequency (1090 MHz Default) -g GAIN Daughterboard gain setting. Defaults to mid-range. --d DECIM USRP decimation rate +-r RATE USRP sample rate -t THRESH Receiver valid pulse threshold -a Output all frames. Defaults only output frames @@ -80,7 +80,6 @@ class adsb_rx_block (gr.top_block): if options.output_all : pass_all = 1 - self.gain = gr.multiply_const_cc(1000000) self.demod = gr.complex_to_mag() self.avg = gr.moving_average_ff(100, 1.0/100, 400); self.preamble = air.modes_preamble(rate, options.threshold) @@ -95,7 +94,7 @@ class adsb_rx_block (gr.top_block): # else: self.filt = self.u - self.connect(self.filt, self.gain, self.demod) + self.connect(self.filt, self.demod) self.connect(self.demod, self.avg) self.connect(self.demod, (self.preamble, 0)) self.connect(self.avg, (self.preamble, 1))