mirror of
				https://github.com/brmlab/osmo-tetra.git
				synced 2025-10-31 15:33:59 +01:00 
			
		
		
		
	works with b210
This commit is contained in:
		
							parent
							
								
									bf8a080c10
								
							
						
					
					
						commit
						f30c673b5b
					
				
					 2 changed files with 67 additions and 10 deletions
				
			
		|  | @ -15,6 +15,7 @@ import sys | |||
| import math | ||||
| from gnuradio import gr, gru, eng_notation, blocks, filter | ||||
| from gnuradio.eng_option import eng_option | ||||
| from gnuradio import wxgui | ||||
| from gnuradio.wxgui import fftsink2 | ||||
| from gnuradio.wxgui import scopesink2 | ||||
| from gnuradio.wxgui import forms | ||||
|  | @ -24,7 +25,10 @@ from optparse import OptionParser | |||
| import osmosdr | ||||
| import wx | ||||
| 
 | ||||
| import cqpsk | ||||
| try: | ||||
|     import cqpsk | ||||
| except: | ||||
|     from tetra_demod import cqpsk | ||||
| 
 | ||||
| # applies frequency translation, resampling and demodulation | ||||
| 
 | ||||
|  | @ -40,10 +44,15 @@ class top_block(grc_wxgui.top_block_gui): | |||
|     self.src = osmosdr.source(options.args) | ||||
|     self.src.set_center_freq(self.ifreq) | ||||
|     self.src.set_sample_rate(int(options.sample_rate)) | ||||
|     self.src.set_freq_corr(0, 0) | ||||
|     self.src.set_dc_offset_mode(2, 0) | ||||
|     self.src.set_iq_balance_mode(2, 0) | ||||
|     self.src.set_gain_mode(1, 0) | ||||
| 
 | ||||
|     if self.rfgain is None: | ||||
|         self.src.set_gain_mode(1) | ||||
|         self.iagc = 1 | ||||
|         self.rfgain = 0 | ||||
|     else: | ||||
|         self.iagc = 0 | ||||
|         self.src.set_gain_mode(0) | ||||
|         self.src.set_gain(self.rfgain) | ||||
| 
 | ||||
|     # may differ from the requested rate | ||||
|     sample_rate = self.src.get_sample_rate() | ||||
|  | @ -77,7 +86,7 @@ class top_block(grc_wxgui.top_block_gui): | |||
| 
 | ||||
|     self.output = blocks.file_sink(gr.sizeof_float, options.output_file) | ||||
| 
 | ||||
|     rerate = float(sample_rate / float(first_decim)) / float(out_sample_rate) | ||||
|     rerate = float(sample_rate) / float(first_decim) / float(out_sample_rate) | ||||
|     sys.stderr.write("resampling factor: %f\n" % rerate) | ||||
| 
 | ||||
|     if rerate.is_integer(): | ||||
|  | @ -86,7 +95,8 @@ class top_block(grc_wxgui.top_block_gui): | |||
|         self.resamp = filter.fir_filter_ccf(int(rerate), firdes.low_pass(1,int(sample_rate/first_decim), 50000,5000)) | ||||
|     else: | ||||
|         sys.stderr.write("using pfb resampler\n") | ||||
|         self.resamp = filter.pfb_arb_resampler_ccf(1 / rerate,[], 0) | ||||
|         t = filter.firdes.low_pass_2(32, 32.0*sample_rate/first_decim, 60000, 5000, attenuation_dB=3, window=filter.firdes.WIN_BLACKMAN_hARRIS) | ||||
|         self.resamp = filter.pfb_arb_resampler_ccf(1.0/rerate, t, 32) | ||||
| 
 | ||||
|     self.connect(self.src, self.tuner, self.resamp, self.demod, self.output) | ||||
| 
 | ||||
|  | @ -109,6 +119,53 @@ class top_block(grc_wxgui.top_block_gui): | |||
|     ) | ||||
|     self.Add(self._ifreq_text_box) | ||||
| 
 | ||||
|     def set_iagc(iagc): | ||||
|         self.iagc = iagc | ||||
|         self._agc_check_box.set_value(self.iagc) | ||||
|         self.src.set_gain_mode(self.iagc, 0) | ||||
|         self.src.set_gain(0 if self.iagc == 1 else self.rfgain, 0) | ||||
| 
 | ||||
|     self._agc_check_box = forms.check_box( | ||||
|         parent=self.GetWin(), | ||||
|         value=self.iagc, | ||||
|         callback=set_iagc, | ||||
|         label="Automatic Gain", | ||||
|         true=1, | ||||
|         false=0, | ||||
|     ) | ||||
| 
 | ||||
|     self.Add(self._agc_check_box) | ||||
| 
 | ||||
|     def set_rfgain(rfgain): | ||||
|         self.rfgain = rfgain | ||||
|         self._rfgain_slider.set_value(self.rfgain) | ||||
|         self._rfgain_text_box.set_value(self.rfgain) | ||||
|         self.src.set_gain(0 if self.iagc == 1 else self.rfgain, 0) | ||||
| 
 | ||||
|     _rfgain_sizer = wx.BoxSizer(wx.VERTICAL) | ||||
|     self._rfgain_text_box = forms.text_box( | ||||
|         parent=self.GetWin(), | ||||
|         sizer=_rfgain_sizer, | ||||
|         value=self.rfgain, | ||||
|         callback=set_rfgain, | ||||
|         label="RF Gain", | ||||
|         converter=forms.float_converter(), | ||||
|         proportion=0, | ||||
|     ) | ||||
|     self._rfgain_slider = forms.slider( | ||||
|         parent=self.GetWin(), | ||||
|         sizer=_rfgain_sizer, | ||||
|         value=self.rfgain, | ||||
|         callback=set_rfgain, | ||||
|         minimum=0, | ||||
|         maximum=50, | ||||
|         num_steps=200, | ||||
|         style=wx.SL_HORIZONTAL, | ||||
|         cast=float, | ||||
|         proportion=1, | ||||
|     ) | ||||
| 
 | ||||
|     self.Add(_rfgain_sizer) | ||||
| 
 | ||||
|     self.Add(self.Main) | ||||
| 
 | ||||
|  | @ -167,9 +224,9 @@ class top_block(grc_wxgui.top_block_gui): | |||
|         ac_couple=False, | ||||
|         xy_mode=False, | ||||
|         num_inputs=1, | ||||
|         #trig_mode=gr.gr_TRIG_MODE_AUTO, | ||||
|         trig_mode=wxgui.TRIG_MODE_AUTO, | ||||
|         y_axis_label="Counts", | ||||
| 	) | ||||
|     ) | ||||
|     self.Main.GetPage(2).Add(self.scope3.win) | ||||
| 
 | ||||
|     self.connect(self.demod, self.scope3) | ||||
|  |  | |||
|  | @ -1,3 +1,3 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
|  ./demod/python/osmosdr-tetra_demod_fft.py -f 390.912600M -o /dev/stdout | ./float_to_bits /dev/stdin /dev/stdout | ./tetra-rx /dev/stdin | ||||
|  ./demod/python/osmosdr-tetra_demod_fft.py -f 393.0880M -g 10 -o /dev/stdout | ./float_to_bits /dev/stdin /dev/stdout | ./tetra-rx /dev/stdin | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Bastian Bloessl
						Bastian Bloessl