mirror of
				https://github.com/brmlab/osmo-tetra.git
				synced 2025-10-30 23:14:00 +01:00 
			
		
		
		
	add demodulator for multiple channels
This commit is contained in:
		
							parent
							
								
									f7479db0d2
								
							
						
					
					
						commit
						fb9381ed2a
					
				
					 1 changed files with 96 additions and 0 deletions
				
			
		
							
								
								
									
										96
									
								
								src/demod/python/osmosdr-tetra-multidemod.py
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										96
									
								
								src/demod/python/osmosdr-tetra-multidemod.py
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,96 @@ | ||||||
|  | #!/usr/bin/env python2 | ||||||
|  | 
 | ||||||
|  | from gnuradio import blocks | ||||||
|  | from gnuradio import eng_notation | ||||||
|  | from gnuradio import filter | ||||||
|  | from gnuradio import gr | ||||||
|  | from gnuradio.eng_option import eng_option | ||||||
|  | from gnuradio.filter import firdes | ||||||
|  | from gnuradio.filter import pfb | ||||||
|  | import osmosdr | ||||||
|  | import tetra_demod | ||||||
|  | 
 | ||||||
|  | class top_block(gr.top_block): | ||||||
|  | 
 | ||||||
|  |     def __init__(self): | ||||||
|  |         gr.top_block.__init__(self) | ||||||
|  | 
 | ||||||
|  |         ################################################## | ||||||
|  |         # Variables | ||||||
|  |         ################################################## | ||||||
|  |         self.symbol_rate = symbol_rate = 18000 | ||||||
|  |         self.samp_per_sym = samp_per_sym = 2 | ||||||
|  |         self.channel_width = channel_width = 25e3 | ||||||
|  |         self.chans = chans = 36*2  # must be multiple of 36 | ||||||
|  |         self.sample_rate = sample_rate = chans * channel_width | ||||||
|  |         self.out_samp_rate = out_samp_rate = symbol_rate*samp_per_sym | ||||||
|  |         self.offset = offset = -73e3 | ||||||
|  |         self.lowpass = lowpass = 17.5e3 | ||||||
|  |         self.fnames = '/home/test/tetra-tmp/fifo' | ||||||
|  | 
 | ||||||
|  |         #### LIST OF DEMODULATED CHANNELS | ||||||
|  |         # numbered from leftmost to rightmost | ||||||
|  |         self.selected = [ 6,7,8,9,12,13,14,16,17,19,20,21,23,24,26,31,32,33,34,35,38,42,43,44,45,46,47,50,52,53,55,56,61,62,69,70] | ||||||
|  | 
 | ||||||
|  |         ################################################## | ||||||
|  |         # Blocks | ||||||
|  |         ################################################## | ||||||
|  | 
 | ||||||
|  |         # Common for all targets | ||||||
|  |         #self.source = osmosdr.source( args="rtl_tcp=radio-tetra.brm:1234") | ||||||
|  |         self.source = osmosdr.source() | ||||||
|  |         self.source.set_sample_rate(sample_rate) | ||||||
|  |         self.source.set_center_freq(424.065e6, 0) | ||||||
|  |         self.source.set_freq_corr(0, 0) | ||||||
|  |         self.source.set_dc_offset_mode(0, 0) | ||||||
|  |         self.source.set_iq_balance_mode(0, 0) | ||||||
|  |         self.source.set_gain_mode(0, 0) | ||||||
|  |         self.source.set_gain(31, 0) | ||||||
|  |         self.source.set_if_gain(20, 0) | ||||||
|  |         self.source.set_bb_gain(20, 0) | ||||||
|  |         self.source.set_antenna("", 0) | ||||||
|  |         self.source.set_bandwidth(0, 0) | ||||||
|  | 
 | ||||||
|  |         self.channelizer = pfb.channelizer_ccf( | ||||||
|  |               chans, | ||||||
|  |               (), | ||||||
|  |               1.0, | ||||||
|  |               100) | ||||||
|  | 
 | ||||||
|  |         self.channelizer.set_channel_map((range(chans/2, chans)+range(0,chans/2))) | ||||||
|  | 
 | ||||||
|  |         # Generate per-target blocks | ||||||
|  |         self.sinks = list() | ||||||
|  |         self.demods = list() | ||||||
|  |         self.resamplers = list() | ||||||
|  |         sel = 1 | ||||||
|  |         for i in range(chans): | ||||||
|  |             if i in self.selected: | ||||||
|  |                 self.resamplers.append(filter.rational_resampler_ccc( | ||||||
|  |                     interpolation=36, | ||||||
|  |                     decimation=25, | ||||||
|  |                     taps=None, | ||||||
|  |                     fractional_bw=None, | ||||||
|  |                 )) | ||||||
|  | 
 | ||||||
|  |                 self.demods.append(tetra_demod.demod()) | ||||||
|  |                 self.sinks.append(blocks.file_sink(gr.sizeof_float, "%s/floats%d" % (self.fnames, sel))) | ||||||
|  |                 self.connect((self.channelizer, i), (self.resamplers[i], 0)) | ||||||
|  |                 self.connect((self.resamplers[i], 0),  (self.demods[i], 0),  (self.sinks[i], 0)) | ||||||
|  |                 sel = sel + 1 | ||||||
|  |                 print "Enabled channel %d" % i | ||||||
|  |             else: | ||||||
|  |                 self.resamplers.append(None) | ||||||
|  |                 self.demods.append(None) | ||||||
|  |                 self.sinks.append(blocks.null_sink(gr.sizeof_gr_complex*1)) | ||||||
|  |                 self.connect((self.channelizer, i), (self.sinks[i], 0)) | ||||||
|  |                 print "Skipping channel %d" % i | ||||||
|  | 
 | ||||||
|  |         # Connections | ||||||
|  |         self.connect((self.source, 0), (self.channelizer, 0)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | if __name__ == '__main__': | ||||||
|  |     tb = top_block() | ||||||
|  |     tb.run() | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jiří Pinkava
						Jiří Pinkava