diff options
Diffstat (limited to 'gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py')
-rw-r--r-- | gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py b/gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py index d4fef81ecf..b040d8c7f4 100644 --- a/gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py +++ b/gnuradio-core/src/python/gnuradio/blksimpl/ofdm.py @@ -24,6 +24,7 @@ import math from numpy import fft from gnuradio import gr, ofdm_packet_utils import gnuradio.gr.gr_threading as _threading +import psk, qam from gnuradio.blksimpl.ofdm_receiver import ofdm_receiver @@ -81,15 +82,21 @@ class ofdm_mod(gr.hier_block): padded_preambles.append(padded) symbol_length = options.fft_length + options.cp_length - - # The next step will all us to pass a constellation into a generic mapper function instead - # of using these hard-coded versions - if self._modulation == "bpsk": - self._pkt_input = gr.ofdm_bpsk_mapper(msgq_limit, options.occupied_tones, options.fft_length) - elif self._modulation == "qpsk": - self._pkt_input = gr.ofdm_qpsk_mapper(msgq_limit, options.occupied_tones, options.fft_length) - else: - print "Modulation type not supported (must be \"bpsk\" or \"qpsk\"" + + mods = {"bpsk": 2, "qpsk": 4, "8psk": 8, "qam8": 8, "qam16": 16, "qam64": 64, "qam256": 256} + arity = mods[self._modulation] + + rot = 1 + if self._modulation == "qpsk": + rot = (0.707+0.707j) + + if(self._modulation.find("psk") >= 0): + rotated_const = map(lambda pt: pt * rot, psk.gray_constellation[arity]) + elif(self._modulation.find("qam") >= 0): + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + #print rotated_const + self._pkt_input = gr.ofdm_mapper_bcv(rotated_const, msgq_limit, + options.occupied_tones, options.fft_length) self.preambles = gr.ofdm_insert_preamble(self._fft_length, padded_preambles) self.ifft = gr.fft_vcc(self._fft_length, False, win, True) @@ -104,7 +111,8 @@ class ofdm_mod(gr.hier_block): self._print_verbage() if options.log: - fg.connect(self._pkt_input, gr.file_sink(gr.sizeof_gr_complex*options.fft_length, "ofdm_mapper_c.dat")) + fg.connect(self._pkt_input, gr.file_sink(gr.sizeof_gr_complex*options.fft_length, + "ofdm_mapper_c.dat")) gr.hier_block.__init__(self, fg, None, self.scale) @@ -119,8 +127,8 @@ class ofdm_mod(gr.hier_block): msg = gr.message(1) # tell self._pkt_input we're not sending any more packets else: # print "original_payload =", string_to_hex_list(payload) - pkt = ofdm_packet_utils.make_packet(payload, 1, 1, self._pad_for_usrp) - + pkt = ofdm_packet_utils.make_packet(payload, 1, 1, self._pad_for_usrp, whitening=True) + #print "pkt =", string_to_hex_list(pkt) msg = gr.message_from_string(pkt) self._pkt_input.msgq().insert_tail(msg) @@ -208,9 +216,22 @@ class ofdm_demod(gr.hier_block): self.ofdm_recv = ofdm_receiver(fg, self._fft_length, self._cp_length, self._occupied_tones, self._snr, preambles, options.log) - self.ofdm_demod = gr.ofdm_frame_sink(self._rcvd_pktq, - self._occupied_tones, - self._modulation) + + mods = {"bpsk": 2, "qpsk": 4, "8psk": 8, "qam8": 8, "qam16": 16, "qam64": 64, "qam256": 256} + arity = mods[self._modulation] + + rot = 1 + if self._modulation == "qpsk": + rot = (0.707+0.707j) + + if(self._modulation.find("psk") >= 0): + rotated_const = map(lambda pt: pt * rot, psk.gray_constellation[arity]) + elif(self._modulation.find("qam") >= 0): + rotated_const = map(lambda pt: pt * rot, qam.constellation[arity]) + #print rotated_const + self.ofdm_demod = gr.ofdm_frame_sink(rotated_const, range(arity), + self._rcvd_pktq, + self._occupied_tones) fg.connect((self.ofdm_recv, 0), (self.ofdm_demod, 0)) fg.connect((self.ofdm_recv, 1), (self.ofdm_demod, 1)) |