mirror of
https://github.com/brmlab/osmo-tetra.git
synced 2025-06-07 17:34:10 +02:00
works with rtl sdr and gnuradio 3.8
This commit is contained in:
parent
1d569bbd62
commit
0aef6eb648
2 changed files with 17 additions and 72 deletions
|
@ -94,7 +94,7 @@ class cqpsk_mod(gr.hier_block2):
|
|||
raise TypeError, ("sbp must be an integer >= 2, is %d" % samples_per_symbol)
|
||||
|
||||
ntaps = 11 * samples_per_symbol
|
||||
|
||||
|
||||
arity = 8
|
||||
|
||||
# turn bytes into k-bit vectors
|
||||
|
@ -122,10 +122,10 @@ class cqpsk_mod(gr.hier_block2):
|
|||
|
||||
if verbose:
|
||||
self._print_verbage()
|
||||
|
||||
|
||||
if log:
|
||||
self._setup_logging()
|
||||
|
||||
|
||||
# Connect & Initialize base class
|
||||
self.connect(self, self.bytes2chunks, self.symbol_mapper, self.diffenc,
|
||||
self.chunks2symbols, self.rrc_filter, self)
|
||||
|
@ -150,7 +150,7 @@ class cqpsk_mod(gr.hier_block2):
|
|||
self.connect(self.symbol_mapper,
|
||||
blocks.file_sink(gr.sizeof_char, "tx_graycoder.dat"))
|
||||
self.connect(self.diffenc,
|
||||
blocks.file_sink(gr.sizeof_char, "tx_diffenc.dat"))
|
||||
blocks.file_sink(gr.sizeof_char, "tx_diffenc.dat"))
|
||||
self.connect(self.chunks2symbols,
|
||||
blocks.file_sink(gr.sizeof_gr_complex, "tx_chunks2symbols.dat"))
|
||||
self.connect(self.rrc_filter,
|
||||
|
@ -184,7 +184,7 @@ class cqpsk_mod(gr.hier_block2):
|
|||
|
||||
class cqpsk_demod(gr.hier_block2):
|
||||
|
||||
def __init__(self,
|
||||
def __init__(self,
|
||||
samples_per_symbol=_def_samples_per_symbol,
|
||||
excess_bw=_def_excess_bw,
|
||||
costas_alpha=_def_costas_alpha,
|
||||
|
@ -236,13 +236,13 @@ class cqpsk_demod(gr.hier_block2):
|
|||
raise TypeError, "sbp must be >= 2, is %d" % samples_per_symbol
|
||||
|
||||
arity = pow(2,self.bits_per_symbol())
|
||||
|
||||
|
||||
# Automatic gain control
|
||||
scale = (1.0/16384.0)
|
||||
self.pre_scaler = blocks.multiply_const_cc(scale) # scale the signal from full-range to +-1
|
||||
#self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100)
|
||||
self.agc = analog.feedforward_agc_cc(16, 2.0)
|
||||
|
||||
|
||||
# RRC data filter
|
||||
ntaps = 11 * samples_per_symbol
|
||||
self.rrc_taps = firdes.root_raised_cosine(
|
||||
|
@ -251,7 +251,7 @@ class cqpsk_demod(gr.hier_block2):
|
|||
1.0, # symbol rate
|
||||
self._excess_bw, # excess bandwidth (roll-off factor)
|
||||
ntaps)
|
||||
self.rrc_filter=filter.interp_fir_filter_ccf(1, self.rrc_taps)
|
||||
self.rrc_filter=filter.interp_fir_filter_ccf(1, self.rrc_taps)
|
||||
|
||||
if not self._mm_gain_mu:
|
||||
sbs_to_mm = {2: 0.050, 3: 0.075, 4: 0.11, 5: 0.125, 6: 0.15, 7: 0.15}
|
||||
|
@ -262,7 +262,7 @@ class cqpsk_demod(gr.hier_block2):
|
|||
self._costas_beta = 0.25 * self._costas_alpha * self._costas_alpha
|
||||
fmin = -0.025
|
||||
fmax = 0.025
|
||||
|
||||
|
||||
if not _def_has_gr_digital:
|
||||
self.receiver=gr.mpsk_receiver_cc(arity, pi/4.0,
|
||||
self._costas_alpha, self._costas_beta,
|
||||
|
@ -292,10 +292,10 @@ class cqpsk_demod(gr.hier_block2):
|
|||
|
||||
if verbose:
|
||||
self._print_verbage()
|
||||
|
||||
|
||||
if log:
|
||||
self._setup_logging()
|
||||
|
||||
|
||||
# Connect & Initialize base class
|
||||
self.connect(self, self.pre_scaler, self.agc, self.rrc_filter, self.receiver,
|
||||
self.diffdec, self.to_float, self.rescale, self)
|
||||
|
@ -331,7 +331,7 @@ class cqpsk_demod(gr.hier_block2):
|
|||
self.connect(self.receiver,
|
||||
blocks.file_sink(gr.sizeof_gr_complex, "rx_receiver.dat"))
|
||||
self.connect(self.diffdec,
|
||||
blocks.file_sink(gr.sizeof_gr_complex, "rx_diffdec.dat"))
|
||||
blocks.file_sink(gr.sizeof_gr_complex, "rx_diffdec.dat"))
|
||||
self.connect(self.to_float,
|
||||
blocks.file_sink(gr.sizeof_float, "rx_to_float.dat"))
|
||||
self.connect(self.rescale,
|
||||
|
|
|
@ -25,10 +25,7 @@ from optparse import OptionParser
|
|||
import osmosdr
|
||||
import wx
|
||||
|
||||
try:
|
||||
import cqpsk
|
||||
except:
|
||||
from tetra_demod import cqpsk
|
||||
import cqpsk
|
||||
|
||||
# applies frequency translation, resampling and demodulation
|
||||
|
||||
|
@ -45,15 +42,10 @@ 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))
|
||||
|
||||
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)
|
||||
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)
|
||||
|
||||
# may differ from the requested rate
|
||||
sample_rate = self.src.get_sample_rate()
|
||||
|
@ -118,53 +110,6 @@ 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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue