kopia lustrzana https://github.com/cyoung/stratux
				
				
				
			
		
			
	
	
		
			125 wiersze
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
		
		
			
		
	
	
			125 wiersze
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
|   | # dump978
 | ||
|  | 
 | ||
|  | Experimental demodulator/decoder for 978MHz UAT signals. | ||
|  | 
 | ||
|  | ## A note about future development
 | ||
|  | 
 | ||
|  | I'm in Europe which doesn't use UAT, so there won't be much spontaneous | ||
|  | development going on now that the demodulator is at a basic "it works" stage. | ||
|  | 
 | ||
|  | I'm happy to look at signal or message captures and help with further | ||
|  | development, but it really needs to be driven by whoever is actually using the | ||
|  | code to receive UAT! | ||
|  | 
 | ||
|  | ## Demodulator
 | ||
|  | 
 | ||
|  | dump978 is the demodulator. It expects 8-bit I/Q samples on stdin at | ||
|  | 2.083334MHz, for example: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ rtl_sdr -f 978000000 -s 2083334 -g 48 - | ./dump978 | ||
|  | ```` | ||
|  | 
 | ||
|  | It outputs one one line per demodulated message, in the form: | ||
|  | 
 | ||
|  | ```` | ||
|  | +012345678..; this is an uplink message | ||
|  | -012345678..; this is a downlink message | ||
|  | ```` | ||
|  | 
 | ||
|  | For parsers: ignore everything between the first semicolon and newline that | ||
|  | you don't understand, it will be used for metadata later. See reader.[ch] for | ||
|  | a reference implementation. | ||
|  | 
 | ||
|  | ## Decoder
 | ||
|  | 
 | ||
|  | To decode messages into a readable form use uat2text: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ rtl_sdr -f 978000000 -s 2083334 -g 48 - | ./dump978 | ./uat2text | ||
|  | ```` | ||
|  | 
 | ||
|  | ## Sample data
 | ||
|  | 
 | ||
|  | Around 1100 sample messages are in the file sample-data.txt.gz. They are the | ||
|  | output of the demodulator from various RF captures I have on hand. This file | ||
|  | can be fed to uat2text etc: | ||
|  | 
 | ||
|  | $ zcat sample-data.txt.gz | ./uat2text | ||
|  | 
 | ||
|  | When testing, this is much easier on your CPU (and disk space!) than starting | ||
|  | from the raw RF captures. | ||
|  | 
 | ||
|  | ## Filtering for just uplink or downlink messages
 | ||
|  | 
 | ||
|  | As the uplink and downlink messages start with different characters, you can | ||
|  | filter for just one type of message very easily with grep: | ||
|  | 
 | ||
|  | ```` | ||
|  |   # Uplink messages only: | ||
|  | $ zcat sample-data.txt.gz | grep "^+" | ./uat2text | ||
|  |   # Downlink messages only: | ||
|  | $ zcat sample-data.txt.gz | grep "^-" | ./uat2text | ||
|  | ```` | ||
|  | 
 | ||
|  | ## Map generation via uat2json
 | ||
|  | 
 | ||
|  | uat2json writes aircraft.json files in the format expected by dump1090's | ||
|  | map html/javascript. | ||
|  | 
 | ||
|  | To set up a live map feed: | ||
|  | 
 | ||
|  | 1) Get a copy of dump1090, we're going to reuse its mapping html/javascript: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ git clone https://github.com/mutability/dump1090 dump1090-copy | ||
|  | ```` | ||
|  | 
 | ||
|  | 2) Put the html/javascript somewhere your webserver can reach: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ mkdir /var/www/dump978map | ||
|  | $ cp -a dump1090-copy/public_html/* /var/www/dump978map/ | ||
|  | ```` | ||
|  | 
 | ||
|  | 3) Create an empty "data" subdirectory | ||
|  | 
 | ||
|  | ```` | ||
|  | $ mkdir /var/www/dump978map/data | ||
|  | ```` | ||
|  | 
 | ||
|  | 4) Feed uat2json from dump978: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ rtl_sdr -f 978000000 -s 2083334 -g 48 - | \ | ||
|  |   ./dump978 | \ | ||
|  |   ./uat2json /var/www/dump978map/data | ||
|  | ```` | ||
|  | 
 | ||
|  | 5) Go look at http://localhost/dump978map/ | ||
|  | 
 | ||
|  | ## uat2esnt: convert UAT ADS-B messages to Mode S ADS-B messages.
 | ||
|  | 
 | ||
|  | Warning: This one is particularly experimental. | ||
|  | 
 | ||
|  | uat2esnt accepts 978MHz UAT downlink messages on stdin and | ||
|  | generates 1090MHz Extended Squitter messages on stdout. | ||
|  | 
 | ||
|  | The generated messages mostly use DF18 with CF=6, which is | ||
|  | for rebroadcasts of ADS-B messages (ADS-R). | ||
|  | 
 | ||
|  | The output format is the "AVR" text format; this can be | ||
|  | fed to dump1090 on port 30001 by default. Other ADS-B tools | ||
|  | may accept it too - e.g. VRS seems to accept most of it (though | ||
|  | it ignores DF18 CF=5 messages which are generated for | ||
|  | non-ICAO-address callsign/squawk information. | ||
|  | 
 | ||
|  | You'll want a pipeline like this: | ||
|  | 
 | ||
|  | ```` | ||
|  | $ rtl_sdr -f 978000000 -s 2083334 -g 48 - | \ | ||
|  |   ./dump978 | \ | ||
|  |   ./uat2esnt | \ | ||
|  |   nc -q1 localhost 30001 | ||
|  | ```` |