diff options
-rwxr-xr-x | gr-digital/examples/ofdm/benchmark_rx.py | 124 | ||||
-rwxr-xr-x | gr-digital/examples/ofdm/benchmark_tx.py | 124 | ||||
-rwxr-xr-x | gr-digital/examples/ofdm/gr_plot_ofdm.py | 278 | ||||
-rwxr-xr-x | gr-digital/examples/ofdm/tunnel.py | 271 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_demod.xml | 144 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_frame_acquisition.xml | 78 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_frame_sink.xml | 80 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_insert_preamble.xml | 64 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_mod.xml | 157 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_sampler.xml | 68 | ||||
-rw-r--r-- | gr-digital/grc/digital_ofdm_sync_pn.xml | 62 | ||||
-rw-r--r-- | gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h | 83 | ||||
-rw-r--r-- | gr-digital/include/gnuradio/digital/ofdm_frame_sink.h | 72 | ||||
-rw-r--r-- | gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h | 80 | ||||
-rw-r--r-- | gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h | 68 | ||||
-rw-r--r-- | gr-digital/include/gnuradio/digital/ofdm_sampler.h | 58 |
16 files changed, 0 insertions, 1811 deletions
diff --git a/gr-digital/examples/ofdm/benchmark_rx.py b/gr-digital/examples/ofdm/benchmark_rx.py deleted file mode 100755 index fdf81176ac..0000000000 --- a/gr-digital/examples/ofdm/benchmark_rx.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2006,2007,2011,2013 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -from gnuradio import gr -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -from gnuradio import blocks -from gnuradio import digital - -# from current dir -from receive_path import receive_path -from uhd_interface import uhd_receiver - -import struct, sys - -class my_top_block(gr.top_block): - def __init__(self, callback, options): - gr.top_block.__init__(self) - - if(options.rx_freq is not None): - self.source = uhd_receiver(options.args, - options.bandwidth, options.rx_freq, - options.lo_offset, options.rx_gain, - options.spec, options.antenna, - options.clock_source, options.verbose) - elif(options.from_file is not None): - self.source = blocks.file_source(gr.sizeof_gr_complex, options.from_file) - else: - self.source = blocks.null_source(gr.sizeof_gr_complex) - - # Set up receive path - # do this after for any adjustments to the options that may - # occur in the sinks (specifically the UHD sink) - self.rxpath = receive_path(callback, options) - - self.connect(self.source, self.rxpath) - - -# ///////////////////////////////////////////////////////////////////////////// -# main -# ///////////////////////////////////////////////////////////////////////////// - -def main(): - - global n_rcvd, n_right - - n_rcvd = 0 - n_right = 0 - - def rx_callback(ok, payload): - global n_rcvd, n_right - n_rcvd += 1 - (pktno,) = struct.unpack('!H', payload[0:2]) - if ok: - n_right += 1 - print "ok: %r \t pktno: %d \t n_rcvd: %d \t n_right: %d" % (ok, pktno, n_rcvd, n_right) - - if 0: - printlst = list() - for x in payload[2:]: - t = hex(ord(x)).replace('0x', '') - if(len(t) == 1): - t = '0' + t - printlst.append(t) - printable = ''.join(printlst) - - print printable - print "\n" - - parser = OptionParser(option_class=eng_option, conflict_handler="resolve") - expert_grp = parser.add_option_group("Expert") - parser.add_option("","--discontinuous", action="store_true", default=False, - help="enable discontinuous") - parser.add_option("","--from-file", default=None, - help="input file of samples to demod") - - receive_path.add_options(parser, expert_grp) - uhd_receiver.add_options(parser) - digital.ofdm_demod.add_options(parser, expert_grp) - - (options, args) = parser.parse_args () - - if options.from_file is None: - if options.rx_freq is None: - sys.stderr.write("You must specify -f FREQ or --freq FREQ\n") - parser.print_help(sys.stderr) - sys.exit(1) - - # build the graph - tb = my_top_block(rx_callback, options) - - r = gr.enable_realtime_scheduling() - if r != gr.RT_OK: - print "Warning: failed to enable realtime scheduling" - - tb.start() # start flow graph - tb.wait() # wait for it to finish - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - pass diff --git a/gr-digital/examples/ofdm/benchmark_tx.py b/gr-digital/examples/ofdm/benchmark_tx.py deleted file mode 100755 index 47dc80964a..0000000000 --- a/gr-digital/examples/ofdm/benchmark_tx.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005,2006,2011,2013 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -from gnuradio import gr -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import time, struct, sys - -from gnuradio import digital -from gnuradio import blocks - -# from current dir -from transmit_path import transmit_path -from uhd_interface import uhd_transmitter - -class my_top_block(gr.top_block): - def __init__(self, options): - gr.top_block.__init__(self) - - if(options.tx_freq is not None): - self.sink = uhd_transmitter(options.args, - options.bandwidth, options.tx_freq, - options.lo_offset, options.tx_gain, - options.spec, options.antenna, - options.clock_source, options.verbose) - elif(options.to_file is not None): - self.sink = blocks.file_sink(gr.sizeof_gr_complex, options.to_file) - else: - self.sink = blocks.null_sink(gr.sizeof_gr_complex) - - # do this after for any adjustments to the options that may - # occur in the sinks (specifically the UHD sink) - self.txpath = transmit_path(options) - - self.connect(self.txpath, self.sink) - -# ///////////////////////////////////////////////////////////////////////////// -# main -# ///////////////////////////////////////////////////////////////////////////// - -def main(): - - def send_pkt(payload='', eof=False): - return tb.txpath.send_pkt(payload, eof) - - parser = OptionParser(option_class=eng_option, conflict_handler="resolve") - expert_grp = parser.add_option_group("Expert") - parser.add_option("-s", "--size", type="eng_float", default=400, - help="set packet size [default=%default]") - parser.add_option("-M", "--megabytes", type="eng_float", default=1.0, - help="set megabytes to transmit [default=%default]") - parser.add_option("","--discontinuous", action="store_true", default=False, - help="enable discontinuous mode") - parser.add_option("","--from-file", default=None, - help="use intput file for packet contents") - parser.add_option("","--to-file", default=None, - help="Output file for modulated samples") - - transmit_path.add_options(parser, expert_grp) - digital.ofdm_mod.add_options(parser, expert_grp) - uhd_transmitter.add_options(parser) - - (options, args) = parser.parse_args () - - # build the graph - tb = my_top_block(options) - - r = gr.enable_realtime_scheduling() - if r != gr.RT_OK: - print "Warning: failed to enable realtime scheduling" - - tb.start() # start flow graph - - # generate and send packets - nbytes = int(1e6 * options.megabytes) - n = 0 - pktno = 0 - pkt_size = int(options.size) - - while n < nbytes: - if options.from_file is None: - data = (pkt_size - 2) * chr(pktno & 0xff) - else: - data = source_file.read(pkt_size - 2) - if data == '': - break; - - payload = struct.pack('!H', pktno & 0xffff) + data - send_pkt(payload) - n += len(payload) - sys.stderr.write('.') - if options.discontinuous and pktno % 5 == 4: - time.sleep(1) - pktno += 1 - - send_pkt(eof=True) - time.sleep(2) # allow time for queued packets to be sent - tb.wait() # wait for it to finish - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - pass diff --git a/gr-digital/examples/ofdm/gr_plot_ofdm.py b/gr-digital/examples/ofdm/gr_plot_ofdm.py deleted file mode 100755 index b248551482..0000000000 --- a/gr-digital/examples/ofdm/gr_plot_ofdm.py +++ /dev/null @@ -1,278 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2007 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -import math, struct, sys -from optparse import OptionParser -from math import log10 - -try: - import scipy - from scipy import fftpack -except ImportError: - print "Error: Program requires scipy (see: www.scipy.org)." - sys.exit(1) - -try: - from pylab import * - from matplotlib.font_manager import fontManager, FontProperties -except ImportError: - print "Error: Program requires matplotlib (see: matplotlib.sourceforge.net)." - sys.exit(1) - -matplotlib.interactive(True) -matplotlib.use('TkAgg') - -class draw_constellation: - def __init__(self, options): - derot_file = "ofdm_frame_sink_c.dat" - acq_file = "ofdm_frame_acq_c.dat" - fft_file = "ofdm_receiver-fft_out_c.dat" - - self.h_derot_file = open(derot_file, "r") - self.h_acq_file = open(acq_file, "r") - self.h_fft_file = open(fft_file, "r") - - self.occ_tones = options.occ_tones - self.fft_size = options.fft_size - self.symbol = options.start - self.sample_rate = options.sample_rate - - self.axis_font_size = 16 - self.label_font_size = 18 - self.title_font_size = 20 - self.text_size = 22 - - # Setup PLOT - self.fig = figure(1, figsize=(14, 9), facecolor='w') - rcParams['xtick.labelsize'] = self.axis_font_size - rcParams['ytick.labelsize'] = self.axis_font_size - - self.text_sym = figtext(0.05, 0.95, ("Symbol: %s" % self.symbol), weight="heavy", size=self.text_size) - - self.make_plots() - - self.button_left_axes = self.fig.add_axes([0.45, 0.01, 0.05, 0.05], frameon=True) - self.button_left = Button(self.button_left_axes, "<") - self.button_left_callback = self.button_left.on_clicked(self.button_left_click) - - self.button_right_axes = self.fig.add_axes([0.50, 0.01, 0.05, 0.05], frameon=True) - self.button_right = Button(self.button_right_axes, ">") - self.button_right_callback = self.button_right.on_clicked(self.button_right_click) - - self.xlim = self.sp_eq.get_xlim() - - self.manager = get_current_fig_manager() - #connect('draw_event', self.zoom) - connect('key_press_event', self.click) - show() - - def get_data(self): - self.text_sym.set_text("Symbol: %d" % (self.symbol)) - - derot_data = scipy.fromfile(self.h_derot_file, dtype=scipy.complex64, count=self.occ_tones) - acq_data = scipy.fromfile(self.h_acq_file, dtype=scipy.complex64, count=self.occ_tones) - fft_data = scipy.fromfile(self.h_fft_file, dtype=scipy.complex64, count=self.fft_size) - if(len(acq_data) == 0): - print "End of File" - else: - self.acq_data_reals = [r.real for r in acq_data] - self.acq_data_imags = [i.imag for i in acq_data] - self.derot_data_reals = [r.real for r in derot_data] - self.derot_data_imags = [i.imag for i in derot_data] - - self.unequalized_angle = [math.atan2(x.imag, x.real) for x in fft_data] - self.equalized_angle = [math.atan2(x.imag, x.real) for x in acq_data] - self.derot_equalized_angle = [math.atan2(x.imag, x.real) for x in derot_data] - - self.time = [i*(1/self.sample_rate) for i in range(len(acq_data))] - ffttime = [i*(1/self.sample_rate) for i in range(len(fft_data))] - - self.freq = self.get_freq(ffttime, self.sample_rate) - - for i in range(len(fft_data)): - if(abs(fft_data[i]) == 0.0): - fft_data[i] = complex(1e-6,1e-6) - self.fft_data = [20*log10(abs(f)) for f in fft_data] - - def get_freq(self, time, sample_rate, T=1): - N = len(time) - Fs = 1.0 / (max(time) - min(time)) - Fn = 0.5 * sample_rate - freq = [-Fn + i*Fs for i in range(N)] - return freq - - def make_plots(self): - self.h_acq_file.seek(8*self.symbol*self.occ_tones, 0) - self.h_fft_file.seek(8*self.symbol*self.fft_size, 0) - self.h_derot_file.seek(8*self.symbol*self.occ_tones, 0) - - self.get_data() - - # Subplot: constellation of rotated symbols - self.sp_const = self.fig.add_subplot(4,1,1, position=[0.15, 0.55, 0.3, 0.35]) - self.sp_const.set_title(("Constellation"), fontsize=self.title_font_size, fontweight="bold") - self.sp_const.set_xlabel("Inphase", fontsize=self.label_font_size, fontweight="bold") - self.sp_const.set_ylabel("Qaudrature", fontsize=self.label_font_size, fontweight="bold") - self.plot_const = plot(self.acq_data_reals, self.acq_data_imags, 'bo') - self.plot_const += plot(self.derot_data_reals, self.derot_data_imags, 'ro') - self.sp_const.axis([-2, 2, -2, 2]) - - # Subplot: unequalized angle - self.sp_uneq = self.fig.add_subplot(4,2,1, position=[0.575, 0.55, 0.3, 0.35]) - self.sp_uneq.set_title(("Unequalized Angle"), fontsize=self.title_font_size, fontweight="bold") - self.sp_uneq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") - self.sp_uneq.set_ylabel("Angle", fontsize=self.label_font_size, fontweight="bold") - uneqscale = range(len(self.unequalized_angle)) - self.plot_uneq = plot(uneqscale, self.unequalized_angle, 'bo') - - # Subplot: equalized angle - self.sp_eq = self.fig.add_subplot(4,1,2, position=[0.15, 0.1, 0.3, 0.35]) - self.sp_eq.set_title(("Equalized Angle"), fontsize=self.title_font_size, fontweight="bold") - self.sp_eq.set_xlabel("Time (s)", fontsize=self.label_font_size, fontweight="bold") - self.sp_eq.set_ylabel("Angle", fontsize=self.label_font_size, fontweight="bold") - eqscale = range(len(self.equalized_angle)) - self.plot_eq = plot(eqscale, self.equalized_angle, 'bo') - self.plot_eq += plot(eqscale, self.derot_equalized_angle, 'ro', markersize=4) - - # Subplot: FFT - self.sp_fft = self.fig.add_subplot(4,2,2, position=[0.575, 0.1, 0.3, 0.35]) - self.sp_fft.set_title(("FFT"), fontsize=self.title_font_size, fontweight="bold") - self.sp_fft.set_xlabel("Frequency (MHz)", fontsize=self.label_font_size, fontweight="bold") - self.sp_fft.set_ylabel("Power (dBm)", fontsize=self.label_font_size, fontweight="bold") - self.plot_fft = plot(self.freq, self.fft_data, '-bo') - - draw() - - def update_plots(self): - eqscale = range(len(self.equalized_angle)) - uneqscale = range(len(self.unequalized_angle)) - self.plot_eq[0].set_data([eqscale, self.equalized_angle]) - self.plot_eq[1].set_data([eqscale, self.derot_equalized_angle]) - self.plot_uneq[0].set_data([uneqscale, self.unequalized_angle]) - self.sp_eq.set_ylim([-4, 4]) - self.sp_uneq.set_ylim([-4, 4]) - - #self.sp_iq.axis([min(self.time), max(self.time), - # 1.5*min([min(self.acq_data_reals), min(self.acq_data_imags)]), - # 1.5*max([max(self.acq_data_reals), max(self.acq_data_imags)])]) - - self.plot_const[0].set_data([self.acq_data_reals, self.acq_data_imags]) - self.plot_const[1].set_data([self.derot_data_reals, self.derot_data_imags]) - self.sp_const.axis([-2, 2, -2, 2]) - - self.plot_fft[0].set_data([self.freq, self.fft_data]) - - draw() - - def zoom(self, event): - newxlim = self.sp_eq.get_xlim() - if(newxlim != self.xlim): - self.xlim = newxlim - r = self.reals[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))] - i = self.imags[int(ceil(self.xlim[0])) : int(ceil(self.xlim[1]))] - - self.plot_const[0].set_data(r, i) - self.sp_const.axis([-2, 2, -2, 2]) - self.manager.canvas.draw() - draw() - - def click(self, event): - forward_valid_keys = [" ", "down", "right"] - backward_valid_keys = ["up", "left"] - - if(find(event.key, forward_valid_keys)): - self.step_forward() - - elif(find(event.key, backward_valid_keys)): - self.step_backward() - - def button_left_click(self, event): - self.step_backward() - - def button_right_click(self, event): - self.step_forward() - - def step_forward(self): - self.symbol += 1 - self.get_data() - self.update_plots() - - def step_backward(self): - # Step back in file position - self.symbol -= 1 - if(self.h_acq_file.tell() >= 16*self.occ_tones): - self.h_acq_file.seek(-16*self.occ_tones, 1) - else: - self.symbol = 0 - self.h_acq_file.seek(-self.h_acq_file.tell(),1) - - - if(self.h_derot_file.tell() >= 16*self.occ_tones): - self.h_derot_file.seek(-16*self.occ_tones, 1) - else: - self.symbol = 0 - self.h_derot_file.seek(-self.h_derot_file.tell(),1) - - - if(self.h_fft_file.tell() >= 16*self.fft_size): - self.h_fft_file.seek(-16*self.fft_size, 1) - else: - self.symbol = 0 - self.h_fft_file.seek(-self.h_fft_file.tell(),1) - - self.get_data() - self.update_plots() - - - -#FIXME: there must be a way to do this with a Python builtin -def find(item_in, list_search): - for l in list_search: - if item_in == l: - return True - return False - -def main(): - usage="%prog: [options]" - - parser = OptionParser(conflict_handler="resolve", usage=usage) - parser.add_option("", "--fft-size", type="int", default=512, - help="Specify the size of the FFT [default=%default]") - parser.add_option("", "--occ-tones", type="int", default=200, - help="Specify the number of occupied tones [default=%default]") - parser.add_option("-s", "--start", type="int", default=0, - help="Specify the starting symbol to plot [default=%default]") - parser.add_option("-R", "--sample-rate", type="float", default=1.0, - help="Set the sampler rate of the data [default=%default]") - - (options, args) = parser.parse_args () - - dc = draw_constellation(options) - -if __name__ == "__main__": - try: - main() - except KeyboardInterrupt: - pass - - - diff --git a/gr-digital/examples/ofdm/tunnel.py b/gr-digital/examples/ofdm/tunnel.py deleted file mode 100755 index 17b31db9af..0000000000 --- a/gr-digital/examples/ofdm/tunnel.py +++ /dev/null @@ -1,271 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005,2006,2011 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - - -# ///////////////////////////////////////////////////////////////////////////// -# -# This code sets up up a virtual ethernet interface (typically gr0), -# and relays packets between the interface and the GNU Radio PHY+MAC -# -# What this means in plain language, is that if you've got a couple -# of USRPs on different machines, and if you run this code on those -# machines, you can talk between them using normal TCP/IP networking. -# -# ///////////////////////////////////////////////////////////////////////////// - - -from gnuradio import gr, digital -from gnuradio import eng_notation -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -# from current dir -from receive_path import receive_path -from transmit_path import transmit_path -from uhd_interface import uhd_transmitter -from uhd_interface import uhd_receiver - -import os, sys -import random, time, struct - -#print os.getpid() -#raw_input('Attach and press enter') - - -# ///////////////////////////////////////////////////////////////////////////// -# -# Use the Universal TUN/TAP device driver to move packets to/from kernel -# -# See /usr/src/linux/Documentation/networking/tuntap.txt -# -# ///////////////////////////////////////////////////////////////////////////// - -# Linux specific... -# TUNSETIFF ifr flags from <linux/tun_if.h> - -IFF_TUN = 0x0001 # tunnel IP packets -IFF_TAP = 0x0002 # tunnel ethernet frames -IFF_NO_PI = 0x1000 # don't pass extra packet info -IFF_ONE_QUEUE = 0x2000 # beats me ;) - -def open_tun_interface(tun_device_filename): - from fcntl import ioctl - - mode = IFF_TAP | IFF_NO_PI - TUNSETIFF = 0x400454ca - - tun = os.open(tun_device_filename, os.O_RDWR) - ifs = ioctl(tun, TUNSETIFF, struct.pack("16sH", "gr%d", mode)) - ifname = ifs[:16].strip("\x00") - return (tun, ifname) - - -# ///////////////////////////////////////////////////////////////////////////// -# the flow graph -# ///////////////////////////////////////////////////////////////////////////// - -class my_top_block(gr.top_block): - def __init__(self, callback, options): - gr.top_block.__init__(self) - - self.source = uhd_receiver(options.args, - options.bandwidth, - options.rx_freq, - options.lo_offset, options.rx_gain, - options.spec, options.antenna, - options.clock_source, options.verbose) - - self.sink = uhd_transmitter(options.args, - options.bandwidth, options.tx_freq, - options.lo_offset, options.tx_gain, - options.spec, options.antenna, - options.clock_source, options.verbose) - - self.txpath = transmit_path(options) - self.rxpath = receive_path(callback, options) - - self.connect(self.txpath, self.sink) - self.connect(self.source, self.rxpath) - - def carrier_sensed(self): - """ - Return True if the receive path thinks there's carrier - """ - return self.rxpath.carrier_sensed() - - def set_freq(self, target_freq): - """ - Set the center frequency we're interested in. - """ - self.u_snk.set_freq(target_freq) - self.u_src.set_freq(target_freq) - - -# ///////////////////////////////////////////////////////////////////////////// -# Carrier Sense MAC -# ///////////////////////////////////////////////////////////////////////////// - -class cs_mac(object): - """ - Prototype carrier sense MAC - - Reads packets from the TUN/TAP interface, and sends them to the PHY. - Receives packets from the PHY via phy_rx_callback, and sends them - into the TUN/TAP interface. - - Of course, we're not restricted to getting packets via TUN/TAP, this - is just an example. - """ - def __init__(self, tun_fd, verbose=False): - self.tun_fd = tun_fd # file descriptor for TUN/TAP interface - self.verbose = verbose - self.tb = None # top block (access to PHY) - - def set_flow_graph(self, tb): - self.tb = tb - - def phy_rx_callback(self, ok, payload): - """ - Invoked by thread associated with PHY to pass received packet up. - - Args: - ok: bool indicating whether payload CRC was OK - payload: contents of the packet (string) - """ - if self.verbose: - print "Rx: ok = %r len(payload) = %4d" % (ok, len(payload)) - if ok: - os.write(self.tun_fd, payload) - - def main_loop(self): - """ - Main loop for MAC. - Only returns if we get an error reading from TUN. - - FIXME: may want to check for EINTR and EAGAIN and reissue read - """ - min_delay = 0.001 # seconds - - while 1: - payload = os.read(self.tun_fd, 10*1024) - if not payload: - self.tb.txpath.send_pkt(eof=True) - break - - if self.verbose: - print "Tx: len(payload) = %4d" % (len(payload),) - - delay = min_delay - while self.tb.carrier_sensed(): - sys.stderr.write('B') - time.sleep(delay) - if delay < 0.050: - delay = delay * 2 # exponential back-off - - self.tb.txpath.send_pkt(payload) - - -# ///////////////////////////////////////////////////////////////////////////// -# main -# ///////////////////////////////////////////////////////////////////////////// - -def main(): - - parser = OptionParser (option_class=eng_option, conflict_handler="resolve") - expert_grp = parser.add_option_group("Expert") - - parser.add_option("-m", "--modulation", type="choice", choices=['bpsk', 'qpsk'], - default='bpsk', - help="Select modulation from: bpsk, qpsk [default=%%default]") - - parser.add_option("-v","--verbose", action="store_true", default=False) - expert_grp.add_option("-c", "--carrier-threshold", type="eng_float", default=30, - help="set carrier detect threshold (dB) [default=%default]") - expert_grp.add_option("","--tun-device-filename", default="/dev/net/tun", - help="path to tun device file [default=%default]") - - digital.ofdm_mod.add_options(parser, expert_grp) - digital.ofdm_demod.add_options(parser, expert_grp) - transmit_path.add_options(parser, expert_grp) - receive_path.add_options(parser, expert_grp) - uhd_receiver.add_options(parser) - uhd_transmitter.add_options(parser) - - (options, args) = parser.parse_args () - if len(args) != 0: - parser.print_help(sys.stderr) - sys.exit(1) - - if options.rx_freq is None or options.tx_freq is None: - sys.stderr.write("You must specify -f FREQ or --freq FREQ\n") - parser.print_help(sys.stderr) - sys.exit(1) - - # open the TUN/TAP interface - (tun_fd, tun_ifname) = open_tun_interface(options.tun_device_filename) - - # Attempt to enable realtime scheduling - r = gr.enable_realtime_scheduling() - if r == gr.RT_OK: - realtime = True - else: - realtime = False - print "Note: failed to enable realtime scheduling" - - # instantiate the MAC - mac = cs_mac(tun_fd, verbose=True) - - - # build the graph (PHY) - tb = my_top_block(mac.phy_rx_callback, options) - - mac.set_flow_graph(tb) # give the MAC a handle for the PHY - - print "modulation: %s" % (options.modulation,) - print "freq: %s" % (eng_notation.num_to_str(options.tx_freq)) - - tb.rxpath.set_carrier_threshold(options.carrier_threshold) - print "Carrier sense threshold:", options.carrier_threshold, "dB" - - print - print "Allocated virtual ethernet interface: %s" % (tun_ifname,) - print "You must now use ifconfig to set its IP address. E.g.," - print - print " $ sudo ifconfig %s 192.168.200.1" % (tun_ifname,) - print - print "Be sure to use a different address in the same subnet for each machine." - print - - - tb.start() # Start executing the flow graph (runs in separate threads) - - mac.main_loop() # don't expect this to return... - - tb.stop() # but if it does, tell flow graph to stop. - tb.wait() # wait for it to finish - - -if __name__ == '__main__': - try: - main() - except KeyboardInterrupt: - pass diff --git a/gr-digital/grc/digital_ofdm_demod.xml b/gr-digital/grc/digital_ofdm_demod.xml deleted file mode 100644 index 1a7ce24e18..0000000000 --- a/gr-digital/grc/digital_ofdm_demod.xml +++ /dev/null @@ -1,144 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Demod -################################################### - --> -<block> - <name>OFDM Demod</name> - <key>digital_ofdm_demod</key> - <category>[Core]/Deprecated</category> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <import>from gnuradio import digital</import> - <make>grc_blks2.packet_demod_$(type.fcn)(digital.ofdm_demod( - options=grc_blks2.options( - modulation="$modulation", - fft_length=$fft_length, - occupied_tones=$occupied_tones, - cp_length=$cp_length, - snr=$snr, - log=None, - verbose=None, - ), - callback=lambda ok, payload: self.$(id).recv_pkt(ok, payload), - ), -)</make> - <param> - <name>Output Type</name> - <key>type</key> - <value>float</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:f</opt> - </option> - <option> - <name>Int</name> - <key>int</key> - <opt>fcn:i</opt> - </option> - <option> - <name>Short</name> - <key>short</key> - <opt>fcn:s</opt> - </option> - <option> - <name>Byte</name> - <key>byte</key> - <opt>fcn:b</opt> - </option> - </param> - <param> - <name>Modulation</name> - <key>modulation</key> - <type>enum</type> - <option> - <name>BPSK</name> - <key>bpsk</key> - </option> - <option> - <name>QPSK</name> - <key>qpsk</key> - </option> - <option> - <name>8PSK</name> - <key>8psk</key> - </option> - <option> - <name>QAM8</name> - <key>qam8</key> - </option> - <option> - <name>QAM16</name> - <key>qam16</key> - </option> - <option> - <name>QAM64</name> - <key>qam64</key> - </option> - <option> - <name>QAM256</name> - <key>qam256</key> - </option> - </param> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <value>512</value> - <type>int</type> - </param> - <param> - <name>Occupied Tones</name> - <key>occupied_tones</key> - <value>200</value> - <type>int</type> - </param> - <param> - <name>Cyclic Prefix Length</name> - <key>cp_length</key> - <value>128</value> - <type>int</type> - </param> - <param> - <name>SNR</name> - <key>snr</key> - <value>10</value> - <type>real</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - </sink> - <source> - <name>out</name> - <type>$type</type> - </source> - <doc>Payload Length: 0 for automatic.</doc> -</block> diff --git a/gr-digital/grc/digital_ofdm_frame_acquisition.xml b/gr-digital/grc/digital_ofdm_frame_acquisition.xml deleted file mode 100644 index f3fb8d63e4..0000000000 --- a/gr-digital/grc/digital_ofdm_frame_acquisition.xml +++ /dev/null @@ -1,78 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Frame Acquisition -################################################### - --> -<block> - <name>OFDM Frame Acquisition</name> - <key>digital_ofdm_frame_acquisition</key> - <category>[Core]/Deprecated</category> - <import>from gnuradio import digital</import> - <make>digital.ofdm_frame_acquisition($occupied_carriers, $fft_length, $cplen, $known_symbol, $max_fft_shift_len)</make> - <param> - <name>Occupied Carriers</name> - <key>occupied_carriers</key> - <type>int</type> - </param> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <type>int</type> - </param> - <param> - <name>CP Length</name> - <key>cplen</key> - <type>int</type> - </param> - <param> - <name>Preamble</name> - <key>known_symbol</key> - <type>complex_vector</type> - </param> - <param> - <name>Max FFT Shift</name> - <key>max_fft_shift_len</key> - <type>int</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - <vlen>$fft_length</vlen> - </sink> - <sink> - <name>flag</name> - <type>byte</type> - <vlen>$fft_length</vlen> - </sink> - <source> - <name>out</name> - <type>complex</type> - <vlen>$occupied_carriers</vlen> - </source> - <source> - <name>flag</name> - <type>byte</type> - </source> -</block> diff --git a/gr-digital/grc/digital_ofdm_frame_sink.xml b/gr-digital/grc/digital_ofdm_frame_sink.xml deleted file mode 100644 index b7cc47b97f..0000000000 --- a/gr-digital/grc/digital_ofdm_frame_sink.xml +++ /dev/null @@ -1,80 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2012 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Frame Sink -################################################### - --> -<block> - <name>OFDM Frame Sink</name> - <key>digital_ofdm_frame_sink</key> - <category>[Core]/Deprecated</category> - <import>from gnuradio import digital</import> - <make>digital.ofdm_frame_sink($syms, $vals, $queue, $occ_tones, $ph_gain, $frq_gain)</make> - <param> - <name>Symbol Points</name> - <key>syms</key> - <type>complex_vector</type> - </param> - <param> - <name>Symbol Values</name> - <key>vals</key> - <type>int_vector</type> - </param> - <param> - <name>Message Queue</name> - <key>queue</key> - <type>raw</type> - </param> - <param> - <name>Occupied Tones</name> - <key>occ_tones</key> - <type>int</type> - </param> - <param> - <name>Phase Gain</name> - <key>ph_gain</key> - <value>0.25</value> - <type>real</type> - </param> - <param> - <name>Freq. Gain</name> - <key>frq_gain</key> - <value>0.015625</value> - <type>real</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - <vlen>$occ_tones</vlen> - </sink> - <sink> - <name>flag</name> - <type>byte</type> - </sink> - <source> - <name>out</name> - <type>complex</type> - <vlen>$occ_tones</vlen> - </source> -</block> diff --git a/gr-digital/grc/digital_ofdm_insert_preamble.xml b/gr-digital/grc/digital_ofdm_insert_preamble.xml deleted file mode 100644 index 593fdbd9b4..0000000000 --- a/gr-digital/grc/digital_ofdm_insert_preamble.xml +++ /dev/null @@ -1,64 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Insert Preamble -################################################### - --> -<block> - <name>OFDM Insert Preamble</name> - <key>digital_ofdm_insert_preamble</key> - <category>[Core]/Deprecated</category> - <import>from gnuradio import digital</import> - <make>digital.ofdm_insert_preamble($fft_length, $preamble)</make> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <type>int</type> - </param> - <param> - <name>Preamble</name> - <key>preamble</key> - <type>raw</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - <vlen>$fft_length</vlen> - </sink> - <sink> - <name>flag</name> - <type>byte</type> - <optional>1</optional> - </sink> - <source> - <name>out</name> - <type>complex</type> - <vlen>$fft_length</vlen> - </source> - <source> - <name>flag</name> - <type>byte</type> - <optional>1</optional> - </source> -</block> diff --git a/gr-digital/grc/digital_ofdm_mod.xml b/gr-digital/grc/digital_ofdm_mod.xml deleted file mode 100644 index 066f52f2a9..0000000000 --- a/gr-digital/grc/digital_ofdm_mod.xml +++ /dev/null @@ -1,157 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Mod -################################################### - --> -<block> - <name>OFDM Mod</name> - <key>digital_ofdm_mod</key> - <category>[Core]/Deprecated</category> - <import>from grc_gnuradio import blks2 as grc_blks2</import> - <import>from gnuradio import digital</import> - <make>grc_blks2.packet_mod_$(type.fcn)(digital.ofdm_mod( - options=grc_blks2.options( - modulation="$modulation", - fft_length=$fft_length, - occupied_tones=$occupied_tones, - cp_length=$cp_length, - pad_for_usrp=$pad_for_usrp, - log=None, - verbose=None, - ), - ), - payload_length=$payload_length, -)</make> - <param> - <name>Input Type</name> - <key>type</key> - <value>float</value> - <type>enum</type> - <option> - <name>Complex</name> - <key>complex</key> - <opt>fcn:c</opt> - </option> - <option> - <name>Float</name> - <key>float</key> - <opt>fcn:f</opt> - </option> - <option> - <name>Int</name> - <key>int</key> - <opt>fcn:i</opt> - </option> - <option> - <name>Short</name> - <key>short</key> - <opt>fcn:s</opt> - </option> - <option> - <name>Byte</name> - <key>byte</key> - <opt>fcn:b</opt> - </option> - </param> - <param> - <name>Modulation</name> - <key>modulation</key> - <type>enum</type> - <option> - <name>BPSK</name> - <key>bpsk</key> - </option> - <option> - <name>QPSK</name> - <key>qpsk</key> - </option> - <option> - <name>8PSK</name> - <key>8psk</key> - </option> - <option> - <name>QAM8</name> - <key>qam8</key> - </option> - <option> - <name>QAM16</name> - <key>qam16</key> - </option> - <option> - <name>QAM64</name> - <key>qam64</key> - </option> - <option> - <name>QAM256</name> - <key>qam256</key> - </option> - </param> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <value>512</value> - <type>int</type> - </param> - <param> - <name>Occupied Tones</name> - <key>occupied_tones</key> - <value>200</value> - <type>int</type> - </param> - <param> - <name>Cyclic Prefix Length</name> - <key>cp_length</key> - <value>128</value> - <type>int</type> - </param> - <param> - <name>Pad for USRP</name> - <key>pad_for_usrp</key> - <type>enum</type> - <option> - <name>Yes</name> - <key>True</key> - </option> - <option> - <name>No</name> - <key>False</key> - </option> - </param> - <param> - <name>Payload Length</name> - <key>payload_length</key> - <value>0</value> - <type>int</type> - </param> - <sink> - <name>in</name> - <type>$type</type> - </sink> - <source> - <name>out</name> - <type>complex</type> - </source> - <doc>Payload Length: 0 for automatic.</doc> -</block> diff --git a/gr-digital/grc/digital_ofdm_sampler.xml b/gr-digital/grc/digital_ofdm_sampler.xml deleted file mode 100644 index 09a070562b..0000000000 --- a/gr-digital/grc/digital_ofdm_sampler.xml +++ /dev/null @@ -1,68 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Sampler -################################################### - --> -<block> - <name>OFDM Sampler</name> - <key>digital_ofdm_sampler</key> - <category>[Core]/Deprecated</category> - <import>from gnuradio import digital</import> - <make>digital.ofdm_sampler($fft_length, $symbol_length, $timeout)</make> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <type>int</type> - </param> - <param> - <name>Symbol Length</name> - <key>symbol_length</key> - <type>int</type> - </param> - <param> - <name>Timeout</name> - <key>timeout</key> - <value>1000</value> - <type>int</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - </sink> - <sink> - <name>flag</name> - <type>byte</type> - </sink> - <source> - <name>out</name> - <type>complex</type> - <vlen>$fft_length</vlen> - </source> - <source> - <name>flag</name> - <type>byte</type> - <vlen>$fft_length</vlen> - </source> -</block> diff --git a/gr-digital/grc/digital_ofdm_sync_pn.xml b/gr-digital/grc/digital_ofdm_sync_pn.xml deleted file mode 100644 index 819996cd07..0000000000 --- a/gr-digital/grc/digital_ofdm_sync_pn.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0"?> -<!-- - Copyright 2011 Free Software Foundation, Inc. - - This file is part of GNU Radio - - GNU Radio is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3, or (at your option) - any later version. - - GNU Radio is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNU Radio; see the file COPYING. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, - Boston, MA 02110-1301, USA. ---> - -<!-- -################################################### -##OFDM Synchronizer - PN based -################################################### - --> -<block> - <name>OFDM Sync PN</name> - <key>digital_ofdm_sync_pn</key> - <category>[Core]/Deprecated</category> - <import>from gnuradio import digital</import> - <make>digital.ofdm_sync_pn($fft_length, $cp_length, $logging)</make> - <param> - <name>FFT Length</name> - <key>fft_length</key> - <type>int</type> - </param> - <param> - <name>CP Length</name> - <key>cp_length</key> - <type>int</type> - </param> - <param> - <name>Logging</name> - <key>logging</key> - <value>False</value> - <type>bool</type> - </param> - <sink> - <name>in</name> - <type>complex</type> - </sink> - <source> - <name>fine freq</name> - <type>float</type> - </source> - <source> - <name>timing sig</name> - <type>byte</type> - </source> -</block> diff --git a/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h b/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h deleted file mode 100644 index 164070e8ca..0000000000 --- a/gr-digital/include/gnuradio/digital/ofdm_frame_acquisition.h +++ /dev/null @@ -1,83 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_DIGITAL_OFDM_FRAME_ACQUISITION_H -#define INCLUDED_DIGITAL_OFDM_FRAME_ACQUISITION_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/block.h> -#include <vector> - -namespace gr { - namespace digital { - - /*! - * \brief take a vector of complex constellation points in from an - * FFT and performs a correlation and equalization. - * \ingroup ofdm_blk - * \ingroup deprecated_blk - * - * \details - * This block takes the output of an FFT of a received OFDM symbol - * and finds the start of a frame based on two known symbols. It - * also looks at the surrounding bins in the FFT output for the - * correlation in case there is a large frequency shift in the - * data. This block assumes that the fine frequency shift has - * already been corrected and that the samples fall in the middle - * of one FFT bin. - * - * It then uses one of those known symbols to estimate the channel - * response over all subcarriers and does a simple 1-tap - * equalization on all subcarriers. This corrects for the phase - * and amplitude distortion caused by the channel. - */ - class DIGITAL_API ofdm_frame_acquisition : virtual public block - { - public: - // gr::digital::ofdm_frame_acquisition::sptr - typedef boost::shared_ptr<ofdm_frame_acquisition> sptr; - - /*! - * Make an OFDM correlator and equalizer. - * - * \param occupied_carriers The number of subcarriers with data in the received symbol - * \param fft_length The size of the FFT vector (occupied_carriers + unused carriers) - * \param cplen The length of the cycle prefix - * \param known_symbol A vector of complex numbers representing a known symbol at the - * start of a frame (usually a BPSK PN sequence) - * \param max_fft_shift_len Set's the maximum distance you can look between bins for correlation - */ - static sptr make(unsigned int occupied_carriers, unsigned int fft_length, - unsigned int cplen, - const std::vector<gr_complex> &known_symbol, - unsigned int max_fft_shift_len=4); - - /*! - * \brief Return an estimate of the SNR of the channel - */ - virtual float snr() = 0; - }; - - } /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_OFDM_FRAME_ACQUISITION_H */ diff --git a/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h b/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h deleted file mode 100644 index 52839b2acc..0000000000 --- a/gr-digital/include/gnuradio/digital/ofdm_frame_sink.h +++ /dev/null @@ -1,72 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_DIGITAL_OFDM_FRAME_SINK_H -#define INCLUDED_DIGITAL_OFDM_FRAME_SINK_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/sync_block.h> -#include <gnuradio/msg_queue.h> - -namespace gr { - namespace digital { - - /*! - * \brief Takes an OFDM symbol in, demaps it into bits of 0's and - * 1's, packs them into packets, and sends to to a message queue - * sink. - * \ingroup ofdm_blk - * \ingroup deprecated_blk - * - * \details - * NOTE: The mod input parameter simply chooses a pre-defined - * demapper/slicer. Eventually, we want to be able to pass in a - * reference to an object to do the demapping and slicing for a - * given modulation type. - */ - class DIGITAL_API ofdm_frame_sink : virtual public sync_block - { - public: - // gr::digital::ofdm_frame_sink::sptr - typedef boost::shared_ptr<ofdm_frame_sink> sptr; - - /*! - * Make an OFDM frame sink block. - * - * \param sym_position vector of OFDM carrier symbols in complex space - * \param sym_value_out vector of bit mapped from the complex symbol space - * \param target_queue message queue for the packets to go into - * \param occupied_tones The number of subcarriers with data in the received symbol - * \param phase_gain gain of the phase tracking loop - * \param freq_gain gain of the frequency tracking loop - */ - static sptr make(const std::vector<gr_complex> &sym_position, - const std::vector<char> &sym_value_out, - msg_queue::sptr target_queue, - int occupied_tones, - float phase_gain=0.25, float freq_gain=0.25*0.25/4); - }; - - } /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_GR_OFDM_FRAME_SINK_H */ diff --git a/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h b/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h deleted file mode 100644 index c811c9c88a..0000000000 --- a/gr-digital/include/gnuradio/digital/ofdm_insert_preamble.h +++ /dev/null @@ -1,80 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H -#define INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/block.h> -#include <vector> - -namespace gr { - namespace digital { - - /*! - * \brief insert "pre-modulated" preamble symbols before each payload. - * \ingroup ofdm_blk - * \ingroup synchronizers_blk - * \ingroup deprecated_blk - * - * \details - * <pre> - * input 1: stream of vectors of gr_complex [fft_length] - * These are the modulated symbols of the payload. - * - * input 2: stream of char. The LSB indicates whether the corresponding - * symbol on input 1 is the first symbol of the payload or not. - * It's a 1 if the corresponding symbol is the first symbol, - * otherwise 0. - * - * N.B., this implies that there must be at least 1 symbol in the payload. - * - * output 1: stream of vectors of gr_complex [fft_length] - * These include the preamble symbols and the payload symbols. - * - * output 2: stream of char. The LSB indicates whether the corresponding - * symbol on input 1 is the first symbol of a packet (i.e., the - * first symbol of the preamble.) It's a 1 if the corresponding - * symbol is the first symbol, otherwise 0. - * </pre> - */ - class DIGITAL_API ofdm_insert_preamble : virtual public block - { - public: - // gr::digital::ofdm_insert_preamble::sptr - typedef boost::shared_ptr<ofdm_insert_preamble> sptr; - - /*! - * Make an OFDM preamble inserter block. - * - * \param fft_length length of each symbol in samples. - * \param preamble vector of symbols that represent the pre-modulated preamble. - */ - static sptr make(int fft_length, - const std::vector<std::vector<gr_complex> > &preamble); - - virtual void enter_preamble() = 0; - }; - - } /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_OFDM_INSERT_PREAMBLE_H */ diff --git a/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h b/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h deleted file mode 100644 index 392b7730a8..0000000000 --- a/gr-digital/include/gnuradio/digital/ofdm_mapper_bcv.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006,2007,2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_DIGITAL_OFDM_MAPPER_BCV_H -#define INCLUDED_DIGITAL_OFDM_MAPPER_BCV_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/sync_block.h> -#include <gnuradio/msg_queue.h> - -namespace gr { - namespace digital { - - /*! - * \brief take a stream of bytes in and map to a vector of complex - * constellation points suitable for IFFT input to be used in an - * ofdm modulator. - * \ingroup ofdm_blk - * \ingroup deprecated_blk - * - * \details - * Abstract class must be subclassed with specific mapping. - */ - class DIGITAL_API ofdm_mapper_bcv : virtual public sync_block - { - public: - // gr::digital::ofdm_mapper_bcv::sptr - typedef boost::shared_ptr<ofdm_mapper_bcv> sptr; - - /*! - * Make an OFDM mapper block. - * - * \param constellation vector of OFDM carrier symbols in complex space - * \param msgq_limit limit on number of messages the queue can store - * \param occupied_carriers The number of subcarriers with data in the received symbol - * \param fft_length The size of the FFT vector (occupied_carriers + unused carriers) - */ - static sptr make(const std::vector<gr_complex> &constellation, - unsigned msgq_limit, - unsigned occupied_carriers, - unsigned int fft_length); - - virtual msg_queue::sptr msgq() const = 0; - }; - - } /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_OFDM_MAPPER_BCV_H */ diff --git a/gr-digital/include/gnuradio/digital/ofdm_sampler.h b/gr-digital/include/gnuradio/digital/ofdm_sampler.h deleted file mode 100644 index da4410478b..0000000000 --- a/gr-digital/include/gnuradio/digital/ofdm_sampler.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2007,2011,2012 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3, or (at your option) - * any later version. - * - * GNU Radio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_DIGITAL_OFDM_SAMPLER_H -#define INCLUDED_DIGITAL_OFDM_SAMPLER_H - -#include <gnuradio/digital/api.h> -#include <gnuradio/sync_block.h> - -namespace gr { - namespace digital { - - /*! - * \brief does the rest of the OFDM stuff - * \ingroup ofdm_blk - * \ingroup deprecated_blk - */ - class DIGITAL_API ofdm_sampler : virtual public block - { - public: - // gr::digital::ofdm_sampler::sptr - typedef boost::shared_ptr<ofdm_sampler> sptr; - - /*! - * Make an OFDM sampler block. - * - * \param fft_length The size of the FFT vector (occupied_carriers + unused carriers) - * \param symbol_length Length of the full symbol (fft_length + CP length) - * \param timeout timeout in samples when we stop looking for a symbol after initial ack. - */ - static sptr make(unsigned int fft_length, - unsigned int symbol_length, - unsigned int timeout=1000); - }; - - } /* namespace digital */ -} /* namespace gr */ - -#endif /* INCLUDED_DIGITAL_OFDM_SAMPLER_H */ |