commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r5581 - in gnuradio/branches/features/ofdm/receiver: g


From: trondeau
Subject: [Commit-gnuradio] r5581 - in gnuradio/branches/features/ofdm/receiver: gnuradio-core/src/lib/general gnuradio-core/src/python/gnuradio gnuradio-core/src/python/gnuradio/blksimpl gnuradio-examples/python/ofdm
Date: Thu, 31 May 2007 07:19:21 -0600 (MDT)

Author: trondeau
Date: 2007-05-31 07:19:20 -0600 (Thu, 31 May 2007)
New Revision: 5581

Added:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_receiver.py
Modified:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_pkt.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/benchmark_ofdm.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm_receiver.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/receive_path.py
   
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/transmit_path.py
Log:
work in progress: reformatting ofdm receiver

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
  2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
  2007-05-31 13:19:20 UTC (rev 5581)
@@ -102,6 +102,7 @@
         gr_ofdm_mapper_bcv.cc           \
         gr_ofdm_bpsk_demapper.cc        \
         gr_ofdm_bpsk_mapper.cc          \
+       gr_ofdm_frame_sink.cc           \
         gr_ofdm_sampler.cc              \
        gr_pa_2x2_phase_combiner.cc     \
        gr_packet_sink.cc               \
@@ -240,7 +241,8 @@
         gr_ofdm_mapper_bcv.h            \
         gr_ofdm_bpsk_mapper.h           \
         gr_ofdm_bpsk_demapper.h         \
-        gr_ofdm_sampler.h               \
+        gr_ofdm_frame_sink.h           \
+       gr_ofdm_sampler.h               \
        gr_pa_2x2_phase_combiner.h      \
        gr_packet_sink.h                \
        gr_phase_modulator_fc.h         \
@@ -379,7 +381,8 @@
         gr_ofdm_mapper_bcv.i            \
         gr_ofdm_bpsk_demapper.i         \
         gr_ofdm_bpsk_mapper.i           \
-        gr_ofdm_sampler.i               \
+        gr_ofdm_frame_sink.i           \
+       gr_ofdm_sampler.i               \
        gr_pa_2x2_phase_combiner.i      \
        gr_packet_sink.i                \
        gr_phase_modulator_fc.i         \

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
    2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
    2007-05-31 13:19:20 UTC (rev 5581)
@@ -97,6 +97,7 @@
 #include <gr_ofdm_cyclic_prefixer.h>
 #include <gr_ofdm_bpsk_demapper.h>
 #include <gr_ofdm_bpsk_mapper.h>
+#include <gr_ofdm_frame_sink.h>
 #include <gr_ofdm_sampler.h>
 #include <gr_costas_loop_cc.h>
 #include <gr_pa_2x2_phase_combiner.h>
@@ -199,6 +200,7 @@
 %include "gr_ofdm_cyclic_prefixer.i"
 %include "gr_ofdm_bpsk_demapper.i"
 %include "gr_ofdm_bpsk_mapper.i"
+%include "gr_ofdm_frame_sink.i"
 %include "gr_ofdm_sampler.i"
 %include "gr_costas_loop_cc.i"
 %include "gr_pa_2x2_phase_combiner.i"

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
        2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
        2007-05-31 13:19:20 UTC (rev 5581)
@@ -115,11 +115,12 @@
             search_delta, h_sqrd.real(), h_sqrd.imag(), power, 
h_sqrd.real()/power, arg(h_sqrd)); 
 #endif
 
-    if(h_sqrd.real() > 0.75*power) {
+    if((h_sqrd.real() > 0.75*power)  && (h_sqrd.real() < 1.1 * power)) {
       found = true;
       d_coarse_freq = search_delta;
       d_phase_count = 1;
-      d_snr_est = 10*log10(power/(power-h_sqrd.real()));
+      //d_snr_est = 10*log10(power/(power-h_sqrd.real()));
+      d_snr_est = 10*log10(fabs(h_sqrd.real()/h_sqrd.imag()));
 
       printf("CORR: Found, bin %d\tSNR Est %f dB\tcorr power fraction %f\n", 
              search_delta, d_snr_est, h_sqrd.real()/power);

Added: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
                                (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
        2007-05-31 13:19:20 UTC (rev 5581)
@@ -0,0 +1,228 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2006 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_ofdm_frame_sink.h>
+#include <gr_io_signature.h>
+#include <cstdio>
+#include <stdexcept>
+
+#define VERBOSE 1
+
+inline void
+gr_ofdm_frame_sink::enter_search()
+{
+  if (VERBOSE)
+    fprintf(stderr, "@ enter_search\n");
+
+  d_state = STATE_SYNC_SEARCH;
+}
+    
+inline void
+gr_ofdm_frame_sink::enter_have_sync()
+{
+  if (VERBOSE)
+    fprintf(stderr, "@ enter_have_sync\n");
+
+  d_state = STATE_HAVE_SYNC;
+  d_header = 0;
+  d_headerbitlen_cnt = 0;
+}
+
+inline void
+gr_ofdm_frame_sink::enter_have_header(int payload_len, int whitener_offset)
+{
+  if (VERBOSE)
+    fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", 
payload_len, whitener_offset);
+
+  d_state = STATE_HAVE_HEADER;
+  d_packetlen = payload_len;
+  d_packet_whitener_offset = whitener_offset;
+  d_packetlen_cnt = 0;
+}
+
+unsigned char gr_ofdm_frame_sink::bpsk_slicer(gr_complex x)
+{
+  return (unsigned char)(x.real() > 0 ? 1 : 0);
+}
+
+unsigned int gr_ofdm_frame_sink::bpsk_demapper(const gr_complex *in,
+                                              unsigned char *out)
+{
+  unsigned int i=0, bytes_produced=0;
+
+  while(i < d_occupied_carriers) {
+
+    while((d_byte_offset < 8) && (i < d_occupied_carriers)) {
+      //fprintf(stderr, "%f+j%f\n", in[i].real(), in[i].imag()); 
+      d_partial_byte |= bpsk_slicer(in[i++]) << (d_byte_offset++);
+    }
+
+    if(d_byte_offset == 8) {
+      out[bytes_produced++] = d_partial_byte;
+      d_byte_offset = 0;
+      d_partial_byte = 0;
+    }
+  }
+
+  return bytes_produced;
+}
+
+
+
+gr_ofdm_frame_sink_sptr
+gr_make_ofdm_frame_sink(gr_msg_queue_sptr target_queue, unsigned int 
occupied_carriers)
+{
+  return gr_ofdm_frame_sink_sptr(new gr_ofdm_frame_sink(target_queue, 
occupied_carriers));
+}
+
+
+gr_ofdm_frame_sink::gr_ofdm_frame_sink(gr_msg_queue_sptr target_queue, 
unsigned int occupied_carriers)
+  : gr_sync_block ("ofdm_frame_sink",
+                  gr_make_io_signature (1, 1, 
sizeof(gr_complex)*occupied_carriers),
+                  gr_make_io_signature (0, 0, 0)),
+    d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), 
+    d_byte_offset(0), d_partial_byte(0)
+{
+  enter_search();
+}
+
+gr_ofdm_frame_sink::~gr_ofdm_frame_sink ()
+{
+}
+
+int
+gr_ofdm_frame_sink::work (int noutput_items,
+                         gr_vector_const_void_star &input_items,
+                         gr_vector_void_star &output_items)
+{
+  const gr_complex *in = (const gr_complex *) input_items[0];
+  int count=0;
+  unsigned int j = 0;
+  unsigned int bytes=0;
+  unsigned char *bytes_out = new unsigned 
char[(int)floor(d_occupied_carriers/8.0)];
+  
+  if (VERBOSE)
+    fprintf(stderr,">>> Entering state machine\n");
+
+  while (count < noutput_items){
+    switch(d_state) {
+      
+    case STATE_SYNC_SEARCH:    // Look for flag indicating beginning of pkt
+      if (VERBOSE)
+       fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items);
+
+      while (count < noutput_items) {
+       //if (in[count] & 0x2){  // Found it, set up for header decode
+       //  enter_have_sync();
+       //  break;
+       //}
+       count++;
+      }
+      break;
+
+    case STATE_HAVE_SYNC:
+      if (VERBOSE)
+       fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n",
+               d_headerbitlen_cnt, d_header);
+
+      while (count < noutput_items) {  // Shift bits one at a time into header
+       bytes = bpsk_demapper(&in[count], bytes_out);
+       count += d_occupied_carriers;
+       
+       j = 0;
+       while(j < bytes) {
+         d_header = (d_header << 8) | (bytes_out[j++] & 0x08);
+         if (++d_headerbitlen_cnt == HEADERBITLEN) {
+
+           if (VERBOSE)
+             fprintf(stderr, "got header: 0x%08x\n", d_header);
+
+           // we have a full header, check to see if it has been received 
properly
+           if (header_ok()){
+             int payload_len;
+             int whitener_offset;
+             header_payload(&payload_len, &whitener_offset);
+             enter_have_header(payload_len, whitener_offset);
+             
+             if (d_packetlen == 0){        // check for zero-length payload
+               // build a zero-length message
+               // NOTE: passing header field as arg1 is not scalable
+               gr_message_sptr msg =
+                 gr_make_message(0, d_packet_whitener_offset, 0, 0);
+               
+               d_target_queue->insert_tail(msg);               // send it
+               msg.reset();                            // free it up
+               
+               enter_search();                         
+             }
+           }
+           else
+             enter_search();                           // bad header
+         }
+         break;                                        // we're in a new state
+       }
+      }
+      break;
+      
+    case STATE_HAVE_HEADER:
+      if (VERBOSE)
+       fprintf(stderr,"Packet Build\n");
+
+      while (count < noutput_items) {   // shift bits into bytes of packet one 
at a time
+       bytes = bpsk_demapper(&in[count], bytes_out);
+       count += d_occupied_carriers;
+       
+       j = 0;
+       while(j < bytes) {
+         d_packet[d_packetlen_cnt++] = bytes_out[j++];
+           
+         if (d_packetlen_cnt == d_packetlen){          // packet is filled
+           
+           // build a message
+           // NOTE: passing header field as arg1 is not scalable
+           gr_message_sptr msg =
+             gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen_cnt);
+           memcpy(msg->msg(), d_packet, d_packetlen_cnt);
+           
+           d_target_queue->insert_tail(msg);           // send it
+           msg.reset();                                // free it up
+           
+           enter_search();
+           break;
+         }
+       }
+      }
+      break;
+
+    default:
+      assert(0);
+
+    } // switch
+
+  }   // while
+
+  return noutput_items;
+}

Added: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
                         (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
 2007-05-31 13:19:20 UTC (rev 5581)
@@ -0,0 +1,112 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2005,2006 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.
+ */
+
+#ifndef INCLUDED_GR_OFDM_FRAME_SINK_H
+#define INCLUDED_GR_OFDM_FRAME_SINK_H
+
+#include <gr_sync_block.h>
+#include <gr_msg_queue.h>
+
+class gr_ofdm_frame_sink;
+typedef boost::shared_ptr<gr_ofdm_frame_sink> gr_ofdm_frame_sink_sptr;
+
+gr_ofdm_frame_sink_sptr 
+gr_make_ofdm_frame_sink (gr_msg_queue_sptr target_queue, unsigned int 
occupied_tones);
+
+/*!
+ * \brief Given a stream of bits and access_code flags, assemble packets.
+ * \ingroup sink
+ *
+ * input: stream of bytes from gr_correlate_access_code_bb
+ * output: none.  Pushes assembled packet into target queue
+ *
+ * The framer expects a fixed length header of 2 16-bit shorts
+ * containing the payload length, followed by the payload.  If the 
+ * 2 16-bit shorts are not identical, this packet is ignored.  Better
+ * algs are welcome.
+ *
+ * The input data consists of bytes that have two bits used.
+ * Bit 0, the LSB, contains the data bit.
+ * Bit 1 if set, indicates that the corresponding bit is the
+ * the first bit of the packet.  That is, this bit is the first
+ * one after the access code.
+ */
+class gr_ofdm_frame_sink : public gr_sync_block
+{
+  friend gr_ofdm_frame_sink_sptr 
+  gr_make_ofdm_frame_sink (gr_msg_queue_sptr target_queue, unsigned int 
occupied_tones);
+
+ private:
+  enum state_t {STATE_SYNC_SEARCH, STATE_HAVE_SYNC, STATE_HAVE_HEADER};
+
+  static const int MAX_PKT_LEN    = 4096;
+  static const int HEADERBITLEN   = 32;
+
+  gr_msg_queue_sptr  d_target_queue;           // where to send the packet 
when received
+  state_t            d_state;
+  unsigned int       d_header;                 // header bits
+  int               d_headerbitlen_cnt;        // how many so far
+
+  unsigned int       d_occupied_carriers;
+  unsigned int       d_byte_offset;
+  unsigned int       d_partial_byte;
+
+  unsigned char      d_packet[MAX_PKT_LEN];    // assembled payload
+  int               d_packetlen;               // length of packet
+  int                d_packet_whitener_offset;  // offset into whitener string 
to use
+  int               d_packetlen_cnt;           // how many so far
+
+ protected:
+  gr_ofdm_frame_sink(gr_msg_queue_sptr target_queue, unsigned int 
occupied_tones);
+
+  void enter_search();
+  void enter_have_sync();
+  void enter_have_header(int payload_len, int whitener_offset);
+  
+  bool header_ok()
+  {
+    // confirm that two copies of header info are identical
+    return ((d_header >> 16) ^ (d_header & 0xffff)) == 0;
+  }
+
+  void header_payload(int *len, int *offset)
+  {
+    // header consists of two 16-bit shorts in network byte order
+    // payload length is lower 12 bits
+    // whitener offset is upper 4 bits
+    *len = (d_header >> 16) & 0x0fff;
+    *offset = (d_header >> 28) & 0x000f;
+  }
+  
+  unsigned char bpsk_slicer(gr_complex x);
+  unsigned int bpsk_demapper(const gr_complex *in,
+                            unsigned char *out);  
+
+ public:
+  ~gr_ofdm_frame_sink();
+
+  int work(int noutput_items,
+          gr_vector_const_void_star &input_items,
+          gr_vector_void_star &output_items);
+};
+
+#endif /* INCLUDED_GR_OFDM_FRAME_SINK_H */

Added: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i
                         (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.i
 2007-05-31 13:19:20 UTC (rev 5581)
@@ -0,0 +1,35 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2006 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.
+ */
+
+GR_SWIG_BLOCK_MAGIC(gr,ofdm_frame_sink);
+
+gr_ofdm_frame_sink_sptr 
+gr_make_ofdm_frame_sink(gr_msg_queue_sptr target_queue, unsigned int 
occupied_tones);
+
+class gr_ofdm_frame_sink : public gr_sync_block
+{
+ protected:
+  gr_ofdm_frame_sink(gr_msg_queue_sptr target_queue, unsigned int 
occupied_tones);
+
+ public:
+  ~gr_ofdm_frame_sink();
+};

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_pkt.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_pkt.py
     2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_pkt.py
     2007-05-31 13:19:20 UTC (rev 5581)
@@ -1,3 +1,4 @@
+
 #
 # Copyright 2005,2006,2007 Free Software Foundation, Inc.
 # 
@@ -23,7 +24,9 @@
 from gnuradio import gr, ofdm_packet_utils
 import gnuradio.gr.gr_threading as _threading
 
+from ofdm_receiver import ofdm_receiver
 
+
 # /////////////////////////////////////////////////////////////////////////////
 #                   mod/demod with packets as i/o
 # /////////////////////////////////////////////////////////////////////////////
@@ -34,7 +37,7 @@
 
     Send packets by calling send_pkt
     """
-    def __init__(self, fg, modulator, access_code=None, msgq_limit=2, 
pad_for_usrp=True):
+    def __init__(self, fg, modulator, msgq_limit=2, pad_for_usrp=True):
         """
        Hierarchical block for sending packets
 
@@ -45,8 +48,6 @@
        @type fg: flow graph
         @param modulator: instance of modulator class (gr_block or hier_block)
         @type modulator: complex baseband out
-        @param access_code: AKA sync vector
-        @type access_code: string of 1's and 0's between 1 and 64 long
         @param msgq_limit: maximum number of messages in message queue
         @type msgq_limit: int
         @param pad_for_usrp: If true, packets are padded such that they end up 
a multiple of 128 samples
@@ -56,12 +57,6 @@
         self._modulator = modulator
         self._pad_for_usrp = pad_for_usrp
 
-        if access_code is None:
-            access_code = ofdm_packet_utils.default_access_code
-        if not ofdm_packet_utils.is_1_0_string(access_code):
-            raise ValueError, "Invalid access_code %r. Must be string of 1's 
and 0's" % (access_code,)
-        self._access_code = access_code
-
         # accepts messages from the outside world
         self._pkt_input = gr.message_vector_source(self._modulator.mtu(), 
msgq_limit)
         fg.connect(self._pkt_input, self._modulator)
@@ -81,7 +76,6 @@
             pkt = ofdm_packet_utils.make_packet(payload,
                                                 
self._modulator.samples_per_symbol(),
                                                 
self._modulator.bits_per_symbol(),
-                                                self._access_code,
                                                 self._pad_for_usrp)
             #print "pkt =", string_to_hex_list(pkt)
             msg = gr.message_from_string(pkt)
@@ -97,7 +91,7 @@
     app via the callback.
     """
 
-    def __init__(self, fg, demodulator, access_code=None, callback=None, 
threshold=-1):
+    def __init__(self, fg, options, callback=None):
         """
        Hierarchical block for demodulating and deframing packets.
 
@@ -108,35 +102,22 @@
        @type fg: flow graph
         @param demodulator: instance of demodulator class (gr_block or 
hier_block)
         @type demodulator: complex baseband in
-        @param access_code: AKA sync vector
-        @type access_code: string of 1's and 0's
         @param callback:  function of two args: ok, payload
         @type callback: ok: bool; payload: string
-        @param threshold: detect access_code with up to threshold bits wrong 
(-1 -> use default)
-        @type threshold: int
        """
-
-        self._demodulator = demodulator
-        if access_code is None:
-            access_code = ofdm_packet_utils.default_access_code
-        if not ofdm_packet_utils.is_1_0_string(access_code):
-            raise ValueError, "Invalid access_code %r. Must be string of 1's 
and 0's" % (access_code,)
-        self._access_code = access_code
-
-        if threshold == -1:
-            threshold = 12              # FIXME raise exception
-
         self._rcvd_pktq = gr.msg_queue()          # holds packets from the PHY
-        self.bytes_to_bits = gr.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST)
-        self.correlator = gr.correlate_access_code_bb(access_code, threshold)
 
-        self.framer_sink = gr.framer_sink_1(self._rcvd_pktq)
-        fg.connect(self._demodulator, self.bytes_to_bits, self.correlator, 
self.framer_sink)
-
-        if 0:
-            fg.connect(self.bytes_to_bits, gr.file_sink(gr.sizeof_char, 
"received_bits.out"))
+        ks1 = known_symbols_200_1
+        ks2 = known_symbols_200_2
+        symbol_length = options.fft_length + options.cp_length
+        self.ofdm_recv = ofdm_receiver(fg, options.fft_length, 
options.cp_length,
+                                       options.occupied_tones, options.snr, 
ks1, ks2)
+        self.ofdm_demod = gr.ofdm_frame_sink(self._rcvd_pktq,
+                                             options.occupied_tones)
         
-        gr.hier_block.__init__(self, fg, self._demodulator, None)
+        fg.connect(self.ofdm_recv, self.ofdm_demod)
+
+        gr.hier_block.__init__(self, fg, self.ofdm_recv, None)
         self._watcher = _queue_watcher_thread(self._rcvd_pktq, callback)
 
 
@@ -156,3 +137,7 @@
             ok, payload = ofdm_packet_utils.unmake_packet(msg.to_string())
             if self.callback:
                 self.callback(ok, payload)
+
+known_symbols_200_1 = [1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 
-1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 
-1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 
1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 
1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 
-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 
-1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 
-1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 
-1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 
1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 
-1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, 
1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 
-1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 
-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 
-1.0, 1.0, 1.0, -1.0]
+        
+known_symbols_200_2 = [-1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 
1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 
1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 
-1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 
-1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 
-1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 
-1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 
1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 
-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, -1.0, 
-1.0, 1.0, -1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 
1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 
1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 
1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, -1.0, 1.0, 
1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, 
1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0]

Added: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_receiver.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_receiver.py
                                (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/blksimpl/ofdm_receiver.py
        2007-05-31 13:19:20 UTC (rev 5581)
@@ -0,0 +1,155 @@
+#!/usr/bin/env python
+#
+# Copyright 2004,2005,2006 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.
+# 
+
+import math
+from gnuradio import gr
+from gnuradio import audio
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+
+class ofdm_receiver(gr.hier_block):
+    def __init__(self, fg, fft_length, cp_length, occupied_tones, snr, ks1, 
ks2):
+        self.input = gr.add_const_cc(0) # Kluge that goes away with hier_block2
+
+        self.fg = fg
+        
+        symbol_length = cp_length +  fft_length;
+
+        SNR = 10.0**(snr/10.0)
+        rho = SNR / (SNR + 1.0)
+
+        # ML Sync
+
+        # Energy Detection from ML Sync
+
+        # Create a delay line
+        delayline = [0.0 for i in range(fft_length+1)]
+        delayline[fft_length] = 1.0
+        self.delay = gr.fir_filter_ccf(1,delayline)
+        self.fg.connect(self.input, self.delay)
+
+        # magnitude squared blocks
+        self.magsqrd1 = gr.complex_to_mag_squared()
+        self.magsqrd2 = gr.complex_to_mag_squared()
+        self.adder = gr.add_ff()
+
+        moving_sum_taps = [rho/2 for i in range(cp_length)]
+        self.moving_sum_filter = gr.fir_filter_fff(1,moving_sum_taps)
+        
+        self.fg.connect(self.input,self.magsqrd1)
+        self.fg.connect(self.delay,self.magsqrd2)
+        self.fg.connect(self.magsqrd1,(self.adder,0))
+        self.fg.connect(self.magsqrd2,(self.adder,1))
+        self.fg.connect(self.adder,self.moving_sum_filter)
+        
+
+        # Correlation from ML Sync
+        self.conjg = gr.conjugate_cc();
+        self.mixer = gr.multiply_cc();
+
+        movingsum2_taps = [1.0 for i in range(cp_length)]
+        self.movingsum2 = gr.fir_filter_ccf(1,movingsum2_taps)
+        
+
+        # Correlator data handler
+        self.c2mag = gr.complex_to_mag()
+        self.angle = gr.complex_to_arg()
+        self.fg.connect(self.input,(self.mixer,1))
+        self.fg.connect(self.delay,self.conjg,(self.mixer,0))
+        self.fg.connect(self.mixer,self.movingsum2,self.c2mag)
+        self.fg.connect(self.movingsum2,self.angle)
+             
+        # ML Sync output arg, need to find maximum point of this
+        self.diff = gr.sub_ff()
+        self.fg.connect(self.c2mag,(self.diff,0))
+        self.fg.connect(self.moving_sum_filter,(self.diff,1))
+
+        #ML measurements input to sampler block and detect
+        nco_sensitivity = 1.0/fft_length
+        self.f2c = gr.float_to_complex()
+        self.sampler = gr.ofdm_sampler(fft_length,symbol_length)
+        self.pkt_detect = gr.peak_detector_ff(0.2, 0.25, 30, 0.0001)
+        self.dpll = gr.dpll_ff(float(symbol_length),0.01)
+        self.sample_and_hold = gr.sample_and_hold_ff()
+        self.nco = gr.frequency_modulator_fc(nco_sensitivity)
+        self.inv = gr.multiply_const_ff(-1)
+        self.sigmix = gr.multiply_cc()
+
+        # Mix the signal with an NCO controlled by the sync loop
+        self.fg.connect(self.input, (self.sigmix,0))
+        self.fg.connect(self.nco, (self.sigmix,1))
+        self.fg.connect(self.sigmix, (self.sampler,0))
+
+        sample_trigger = 0
+        if sample_trigger:
+            # for testing
+            peak_null = gr.null_sink(gr.sizeof_float)
+            data = 640*[0,]
+            data[639] = 1
+            peak_trigger = gr.vector_source_f(data, True)
+
+            self.fg.connect(self.pkt_detect, peak_null)
+            self.fg.connect(peak_trigger, self.f2c, (self.sampler,1))
+            self.fg.connect(peak_trigger, (self.sample_and_hold,1))
+            
+        # use the sync loop values to set the sampler and the NCO
+        # self.diff = theta
+        # self.angle = epsilon
+                          
+        self.fg.connect(self.diff, self.pkt_detect)
+        use_dpll = 1
+        if not sample_trigger:
+            if use_dpll:
+                self.fg.connect(self.pkt_detect, self.dpll,self.f2c, 
(self.sampler,1))
+                self.fg.connect(self.dpll, (self.sample_and_hold,1))
+            if not use_dpll:
+                self.fg.connect(self.pkt_detect, self.f2c, (self.sampler,1))
+                self.fg.connect(self.pkt_detect, (self.sample_and_hold,1))
+            
+        self.fg.connect(self.angle, (self.sample_and_hold,0))
+        self.fg.connect(self.sample_and_hold, self.inv, self.nco)
+        
+
+        if 1:
+            self.fg.connect(self.diff, gr.file_sink(gr.sizeof_float, 
"theta_f.dat"))
+            self.fg.connect(self.angle, gr.file_sink(gr.sizeof_float, 
"epsilon_f.dat"))
+            if use_dpll:
+                self.fg.connect(self.dpll, gr.file_sink(gr.sizeof_float, 
"dpll_pulses.dat"))
+            if sample_trigger:
+                self.fg.connect(peak_trigger, gr.file_sink(gr.sizeof_float, 
"peaks_f.dat"))
+            else:
+                self.fg.connect(self.pkt_detect, gr.file_sink(gr.sizeof_float, 
"peaks_f.dat"))
+                
+            self.fg.connect(self.sample_and_hold, 
gr.file_sink(gr.sizeof_float, "sample_and_hold_f.dat"))
+            self.fg.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex, 
"nco_c.dat"))
+            self.fg.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, 
"input_c.dat"))
+            self.fg.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex, 
"output_c.dat"))
+
+
+        win = [1 for i in range(fft_length)]
+
+        self.fft_demod = gr.fft_vcc(fft_length, True, win, True)
+        self.ofdm_corr  = gr.ofdm_correlator(occupied_tones, fft_length,
+                                             cp_length, ks1, ks2)
+
+        self.fg.connect(self.sampler, self.fft_demod, self.ofdm_corr)
+        gr.hier_block.__init__(self, fg, self.input, self.ofdm_corr)

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py
     2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/python/gnuradio/ofdm_packet_utils.py
     2007-05-31 13:19:20 UTC (rev 5581)
@@ -68,9 +68,6 @@
     return (''.join(r), padded)
         
 
-default_access_code = \
-  conv_packed_binary_string_to_1_0_string('\xAC\xDD\xA4\xE2\xF2\x8C\x20\xFC')
-
 def is_1_0_string(s):
     if not isinstance(s, str):
         return False
@@ -99,8 +96,7 @@
     return struct.pack('!HH', val, val)
 
 def make_packet(payload, samples_per_symbol, bits_per_symbol,
-                access_code=default_access_code, pad_for_usrp=True,
-                whitener_offset=0):
+                pad_for_usrp=True, whitener_offset=0):
     """
     Build a packet, given access code, payload, and whitener offset
 
@@ -109,20 +105,14 @@
     @type  samples_per_symbol:    int
     @param bits_per_symbol:       (needed for padding calculation)
     @type bits_per_symbol:        int
-    @param access_code:           string of ascii 0's and 1's
     @param whitener_offset        offset into whitener string to use [0-16)
     
     Packet will have access code at the beginning, followed by length, payload
     and finally CRC-32.
     """
-    if not is_1_0_string(access_code):
-        raise ValueError, "access_code must be a string containing only 0's 
and 1's (%r)" % (access_code,)
-
     if not whitener_offset >=0 and whitener_offset < 16:
         raise ValueError, "whitener_offset must be between 0 and 15, inclusive 
(%i)" % (whitener_offset,)
 
-    (packed_access_code, padded) = 
conv_1_0_string_to_packed_binary_string(access_code)
-    
     payload_with_crc = gru.gen_and_append_crc32(payload)
     #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])
 
@@ -131,9 +121,7 @@
     if L > MAXLEN:
         raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)
 
-    #pkt = ''.join((packed_access_code, make_header(L, whitener_offset)),
-    #               whiten(payload_with_crc, whitener_offset), '\x55'))
-    pkt_hd = ''.join((packed_access_code, make_header(L, whitener_offset)))
+    pkt_hd = make_header(L, whitener_offset)
     pkt_dt = ''.join((payload_with_crc, '\x55'))
     packet_length = len(pkt_hd) + len(pkt_dt)
 

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/benchmark_ofdm.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/benchmark_ofdm.py
    2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/benchmark_ofdm.py
    2007-05-31 13:19:20 UTC (rev 5581)
@@ -83,8 +83,9 @@
             if options.discontinuous:
                 z = 20000*[0,]
                 self.zeros = gr.vector_source_c(z, True)
-                packet_size = 15*((4+8+4+1500+4) * 8)
-                self.mux = gr.stream_mux(gr.sizeof_gr_complex, [packet_size-0, 
int(10e5)])
+                packet_size = math.ceil(((4+8+4+options.size+4) * 8) / 
options.occupied_tones)
+                sample_size = (packet_size+2) * 
(options.fft_length+options.cp_length)
+                self.mux = gr.stream_mux(gr.sizeof_gr_complex, 
[int(2*sample_size), int(10e4)])
 
                 # Connect components
                 self.connect(self.txpath, (self.mux,0))

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm.py  
    2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm.py  
    2007-05-31 13:19:20 UTC (rev 5581)
@@ -103,7 +103,6 @@
 
         symbol_length = self._fft_length + self._cp_length
 
-        win = [1 for i in range(self._fft_length)]
 
         # hard-coded known symbol
         ks1 = known_symbols_200_1
@@ -113,9 +112,6 @@
         self.ofdm_sync = ofdm_receiver(self.fg, self._fft_length, 
symbol_length, self._snr)
 
         # OFDM Demod
-        self.fft_demod = gr.fft_vcc(self._fft_length, True, win, True)
-        self.ofdm_corr  = gr.ofdm_correlator(self._occupied_tones, 
self._fft_length,
-                                             self._cp_length, ks1, ks2)
         self.ofdm_demod = gr.ofdm_bpsk_demapper(self._occupied_tones)
 
 

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm_receiver.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm_receiver.py
     2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/ofdm_receiver.py
     2007-05-31 13:19:20 UTC (rev 5581)
@@ -27,12 +27,12 @@
 from optparse import OptionParser
 
 class ofdm_receiver(gr.hier_block):
-    def __init__(self, fg, fft_length, symbol_length, snr):
+    def __init__(self, fg, fft_length, cp_length, occupied_tones, snr, ks1, 
ks2):
         self.input = gr.add_const_cc(0) # Kluge that goes away with hier_block2
 
         self.fg = fg
         
-        cpsize = symbol_length - fft_length;
+        symbol_length = cp_length +  fft_length;
 
         SNR = 10.0**(snr/10.0)
         rho = SNR / (SNR + 1.0)
@@ -52,7 +52,7 @@
         self.magsqrd2 = gr.complex_to_mag_squared()
         self.adder = gr.add_ff()
 
-        moving_sum_taps = [rho/2 for i in range(cpsize)]
+        moving_sum_taps = [rho/2 for i in range(cp_length)]
         self.moving_sum_filter = gr.fir_filter_fff(1,moving_sum_taps)
         
         self.fg.connect(self.input,self.magsqrd1)
@@ -66,7 +66,7 @@
         self.conjg = gr.conjugate_cc();
         self.mixer = gr.multiply_cc();
 
-        movingsum2_taps = [1.0 for i in range(cpsize)]
+        movingsum2_taps = [1.0 for i in range(cp_length)]
         self.movingsum2 = gr.fir_filter_ccf(1,movingsum2_taps)
         
 
@@ -129,7 +129,7 @@
         self.fg.connect(self.sample_and_hold, self.inv, self.nco)
         
 
-        if 0:
+        if 1:
             self.fg.connect(self.diff, gr.file_sink(gr.sizeof_float, 
"theta_f.dat"))
             self.fg.connect(self.angle, gr.file_sink(gr.sizeof_float, 
"epsilon_f.dat"))
             if use_dpll:
@@ -143,5 +143,13 @@
             self.fg.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex, 
"nco_c.dat"))
             self.fg.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, 
"input_c.dat"))
             self.fg.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex, 
"output_c.dat"))
-        
-        gr.hier_block.__init__(self, fg, self.input, self.sampler)
+
+
+        win = [1 for i in range(fft_length)]
+
+        self.fft_demod = gr.fft_vcc(fft_length, True, win, True)
+        self.ofdm_corr  = gr.ofdm_correlator(occupied_tones, fft_length,
+                                             cp_length, ks1, ks2)
+
+        self.fg.connect(self.sampler, self.fft_demod, self.ofdm_corr)
+        gr.hier_block.__init__(self, fg, self.input, self.ofdm_corr)

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/receive_path.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/receive_path.py
      2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/receive_path.py
      2007-05-31 13:19:20 UTC (rev 5581)
@@ -54,15 +54,10 @@
             chan_coeffs = [ 1.0, 0.0, 0 ] 
         self.chan_filt = gr.fft_filter_ccc(1, chan_coeffs)
 
-        self.ofdm_demod = ofdm.ofdm_demod(fg, options)
-        
         # receiver
         self.packet_receiver = \
-            blks.demod_ofdm_pkts(fg,
-                                 self.ofdm_demod,
-                                 access_code=None,
-                                 callback=self._rx_callback,
-                                 threshold=-1)
+            blks.demod_ofdm_pkts(fg, options,
+                                 callback=self._rx_callback)
 
         # Carrier Sensing Blocks
         alpha = 0.001

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/transmit_path.py
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/transmit_path.py
     2007-05-31 04:25:05 UTC (rev 5580)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-examples/python/ofdm/transmit_path.py
     2007-05-31 13:19:20 UTC (rev 5581)
@@ -48,7 +48,6 @@
         self.packet_transmitter = \
             blks.mod_ofdm_pkts(fg,
                                self.ofdm_mod,
-                               access_code=None,
                                msgq_limit=4,
                                pad_for_usrp=True)
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]