self.txpath = usrp_transmit_path.usrp_transmit_path(modulator_class, options)
Leads me to usrp_transimit_path.py, which sets some USRP sink options, then passes the work to transmit_path.py.
The options passed to transmit_path.py include:
- verbose
- tx_amplitude
- bitrate
- samples_per_symbol
...and then the 'modulator class':
self._modulator_class = modulator_class # Get mod_kwargs mod_kwargs = \ self._modulator_class.extract_kwargs_from_options(options) # transmitter modulator = self._modulator_class(**mod_kwargs) self.packet_transmitter = \ blks2.mod_pkts(modulator, access_code=None, msgq_limit=4, pad_for_usrp=True)
Then you connect the 'packet_transmitter', amplitude, and transmit path together.
self.connect(self.packet_transmitter, self.amp, self) ... def send_pkt(self, payload='', eof=False): """ Calls the transmitter method to send a packet """ return self.packet_transmitter.send_pkt(payload, eof)
gnuradio-3.3.0/gnuradio-core/src/python/gnuradio/blks2impl/pkt.py: blks2.mod_pkts
class mod_pkts gets passed an instance of a modulator class (gr_block of heir_block2). It then simply connects a packet input block (gr_message_source(sizeof char, msgq_limit):
self._pkt_input = gr.message_source(gr.sizeof_char, msgq_limit) self.connect(self._pkt_input, self._modulator, self)
Modulation classes (tx_voice.py):
from gnuradio import gr, gru, modulation_utils ... mods = modulation_utils.type_1_mods() ... for mod in mods.values(): mod.add_options(expert_grp) ... # pass it down: tx_voice.py -> usrp_transmit_path.py -> transmit_path.py -> pkt.py tb = my_top_block(mods[options.modulation], options)
This particular example generated packets from a message queue attached to a voice coder:
from gnuradio.vocoder import gsm_full_rate ... voice_coder = gsm_full_rate.encode_sp()
The corresponding C++ block, gsm_fr_encode_sp, has a simple work function:
for (int i = 0; i < noutput_items; i++){ gsm_encode (d_gsm, const_cast(in), out); in += GSM_SAMPLES_PER_FRAME; out += sizeof (gsm_frame); }
This references C code which does the GSM (de/en)coding.
Here are the modulators available in tx_voice.py:
gnuradio.blks2impl.cpm.cpm_mod gnuradio.blks2impl.d8psk.d8psk_mod gnuradio.blks2impl.qam8.qam8_mod gnuradio.blks2impl.dbpsk.dbpsk_mod gnuradio.blks2impl.dqpsk.dqpsk_mod gnuradio.blks2impl.gmsk.gmsk_mod
Implemented as separate Python files in gnuradio-core/src/python/gnuradio/blks2impl. The other blks2 folder ties it all together.
No comments:
Post a Comment