commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5586 - gnuradio/branches/features/ofdm/receiver/gnura


From: trondeau
Subject: [Commit-gnuradio] r5586 - gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general
Date: Fri, 1 Jun 2007 10:24:21 -0600 (MDT)

Author: trondeau
Date: 2007-06-01 10:24:21 -0600 (Fri, 01 Jun 2007)
New Revision: 5586

Added:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
Removed:
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h
   
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i
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_bpsk_mapper.cc
   
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_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_sampler.cc
Log:
update to OFDM receiver structure including update to use multiple input types 
to some triggering functions

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-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/Makefile.am
  2007-06-01 16:24:21 UTC (rev 5586)
@@ -63,7 +63,7 @@
        gr_diff_decoder_bb.cc           \
        gr_diff_encoder_bb.cc           \
        gr_diff_phasor_cc.cc            \
-       gr_dpll_ff.cc                   \
+       gr_dpll_bb.cc                   \
        gr_fake_channel_coder_pp.cc     \
        gr_fast_atan2f.cc               \
        gr_feedforward_agc_cc.cc        \
@@ -198,7 +198,7 @@
        gr_deinterleave.h               \
        gr_delay.h                      \
        gr_diff_phasor_cc.h             \
-       gr_dpll_ff.h                    \
+       gr_dpll_bb.h                    \
        gr_expj.h                       \
        gr_fake_channel_coder_pp.h      \
        gr_feedforward_agc_cc.h         \
@@ -344,7 +344,7 @@
        gr_diff_decoder_bb.i            \
        gr_diff_encoder_bb.i            \
        gr_diff_phasor_cc.i             \
-       gr_dpll_ff.i                    \
+       gr_dpll_bb.i                    \
        gr_deinterleave.i               \
        gr_delay.i                      \
        gr_fake_channel_coder_pp.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-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/general.i
    2007-06-01 16:24:21 UTC (rev 5586)
@@ -84,7 +84,7 @@
 #include <gr_packet_sink.h>
 #include <gr_lms_dfe_cc.h>
 #include <gr_lms_dfe_ff.h>
-#include <gr_dpll_ff.h>
+#include <gr_dpll_bb.h>
 #include <gr_pll_freqdet_cf.h>
 #include <gr_pll_refout_cc.h>
 #include <gr_pll_carriertracking_cc.h>
@@ -187,7 +187,7 @@
 %include "gr_packet_sink.i"
 %include "gr_lms_dfe_cc.i"
 %include "gr_lms_dfe_ff.i"
-%include "gr_dpll_ff.i"
+%include "gr_dpll_bb.i"
 %include "gr_pll_freqdet_cf.i"
 %include "gr_pll_refout_cc.i"
 %include "gr_pll_carriertracking_cc.i"

Copied: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
 (from rev 5581, 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc)
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
                                (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.cc
        2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,84 @@
+/* -*- c++ -*- */
+/*
+ * 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 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_dpll_bb.h>
+#include <gr_io_signature.h>
+
+gr_dpll_bb_sptr
+gr_make_dpll_bb (float period, float gain)
+{
+  return gr_dpll_bb_sptr (new gr_dpll_bb (period, gain));
+}
+
+gr_dpll_bb::gr_dpll_bb (float period, float gain)
+  : gr_sync_block ("dpll_bb",
+                  gr_make_io_signature (1, 1, sizeof (char)),
+                  gr_make_io_signature (1, 1, sizeof (char))),
+    d_restart(0),d_pulse_phase(0)
+{
+  d_pulse_frequency = 1.0/period;
+  d_gain = gain;
+  d_decision_threshold = 1.0 - 0.5*d_pulse_frequency;
+#if 1
+  fprintf(stderr,"frequency = %f period = %f gain = %f threshold = %f\n",
+         d_pulse_frequency,
+         period,
+         d_gain,
+         d_decision_threshold);
+#endif
+  set_history(1); // so we can look behind us
+}
+
+int
+gr_dpll_bb::work (int noutput_items,
+             gr_vector_const_void_star &input_items,
+             gr_vector_void_star &output_items)
+{
+  const char *iptr = (const char *) input_items[0];
+  char *optr = (char *) output_items[0];
+
+  for (int i = 0; i < noutput_items; i++){
+    optr[i]= 0;
+    if(iptr[i] == 1) {
+      if (d_restart == 0) {
+       d_pulse_phase = 1;
+      } else {
+       if (d_pulse_phase > 0.5) d_pulse_phase += d_gain*(1.0-d_pulse_phase);
+       else d_pulse_phase -= d_gain*d_pulse_phase;
+      }
+      d_restart = 3;
+    }
+    if (d_pulse_phase > d_decision_threshold) {
+      d_pulse_phase -= 1.0;
+      if (d_restart > 0) {
+       d_restart -= 1;
+       optr[i] = 1;
+      }
+    }
+    d_pulse_phase += d_pulse_frequency;
+  }
+  return noutput_items;
+}

Copied: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
 (from rev 5581, 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h)
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
                         (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.h
 2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,57 @@
+/* -*- c++ -*- */
+/*
+ * 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 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_DPLL_BB_H
+#define INCLUDED_GR_DPLL_BB_H
+
+#include <gr_sync_block.h>
+
+class gr_dpll_bb;
+typedef boost::shared_ptr<gr_dpll_bb> gr_dpll_bb_sptr;
+
+gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+/*!
+ * \brief Detect the peak of a signal
+ * \ingroup block
+ *
+ * If a peak is detected, this block outputs a 1, 
+ * or it outputs 0's.
+ */
+class gr_dpll_bb : public gr_sync_block
+{
+  friend gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+  gr_dpll_bb (float period, float gain);
+
+ private:
+  unsigned char d_restart;
+  float d_pulse_phase, d_pulse_frequency,d_gain,d_decision_threshold;
+
+ public:
+
+  int work (int noutput_items,
+           gr_vector_const_void_star &input_items,
+           gr_vector_void_star &output_items);
+};
+
+#endif

Copied: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
 (from rev 5581, 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i)
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
                         (rev 0)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_bb.i
 2007-06-01 16:24:21 UTC (rev 5586)
@@ -0,0 +1,31 @@
+/* -*- c++ -*- */
+/*
+ * 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 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,dpll_bb)
+
+  gr_dpll_bb_sptr gr_make_dpll_bb (float period, float gain);
+
+class gr_dpll_bb : public gr_sync_block
+{
+ private:
+  gr_dpll_bb (float period, float gain);
+};

Deleted: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.cc

Deleted: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.h

Deleted: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_dpll_ff.i

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
       2007-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
       2007-06-01 16:24:21 UTC (rev 5586)
@@ -52,7 +52,7 @@
     d_known_symbol2(known_symbol2)
 
 {
-  assert(d_occupied_carriers < d_vlen);
+  assert(d_occupied_carriers <= d_vlen);
   assert(d_occupied_carriers == d_known_symbol1.size());
   assert(d_occupied_carriers == d_known_symbol2.size());
 }
@@ -69,6 +69,12 @@
     ninput_items_required[i] = 1;
 }
 
+float randombit()
+{
+  int r = rand()&1;
+  return (float)(-1 + 2*r);
+}
+
 int
 gr_ofdm_bpsk_mapper::general_work(int noutput_items,
                                  gr_vector_int &ninput_items,
@@ -138,7 +144,7 @@
     // Ran out of data to put in symbols
     if(d_packet_offset == pkt_length) {
       while(i < d_vlen-zeros_on_right) {
-       out[i++] = gr_complex(0,0);
+       out[i++] = gr_complex(randombit(),0);
       }
 
       d_packet_offset = 0;

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-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_correlator.cc
        2007-06-01 16:24:21 UTC (rev 5586)
@@ -46,7 +46,7 @@
                                        std::vector<gr_complex> known_symbol2)
   : gr_block ("ofdm_correlator",
              gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen),
-             gr_make_io_signature (1, 1, 
sizeof(gr_complex)*occupied_carriers)),
+             gr_make_io_signature2 (2, 2, 
sizeof(gr_complex)*occupied_carriers, sizeof(char))),
     d_occupied_carriers(occupied_carriers),
     d_vlen(vlen),
     d_cplen(cplen),
@@ -115,7 +115,7 @@
             search_delta, h_sqrd.real(), h_sqrd.imag(), power, 
h_sqrd.real()/power, arg(h_sqrd)); 
 #endif
 
-    if((h_sqrd.real() > 0.75*power)  && (h_sqrd.real() < 1.1 * power)) {
+    if((h_sqrd.real() > 0.82*power)  && (h_sqrd.real() < 1.1 * power)) {
       found = true;
       d_coarse_freq = search_delta;
       d_phase_count = 1;
@@ -172,6 +172,7 @@
   const gr_complex *current = &in[d_vlen];
 
   gr_complex *out = (gr_complex *) output_items[0];
+  char *sig = (char *) output_items[1];
   
   unsigned int i=0;
 
@@ -181,11 +182,19 @@
   bool corr = correlate(previous, current, zeros_on_left);
   if(corr) {
     calculate_equalizer(previous, current, zeros_on_left);
+    sig[0] = 1;
   }
+  else {
+    sig[0] = 0;
+  }
 
   for(i = 0; i < d_occupied_carriers; i++) {
     out[i] = 
d_hestimate[i]*coarse_freq_comp(d_coarse_freq,d_phase_count)*current[i+zeros_on_left+d_coarse_freq];
+    //out[i] = 
coarse_freq_comp(d_coarse_freq,d_phase_count)*current[i+zeros_on_left+d_coarse_freq];
+    //out[i] = current[i+zeros_on_left+d_coarse_freq];
   }
+  
+
   d_phase_count++;
   consume_each(1);
   return 1;

Modified: 
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
        2007-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
        2007-06-01 16:24:21 UTC (rev 5586)
@@ -29,7 +29,7 @@
 #include <cstdio>
 #include <stdexcept>
 
-#define VERBOSE 1
+#define VERBOSE 0
 
 inline void
 gr_ofdm_frame_sink::enter_search()
@@ -38,6 +38,10 @@
     fprintf(stderr, "@ enter_search\n");
 
   d_state = STATE_SYNC_SEARCH;
+
+  // clear state of demapper
+  d_byte_offset = 0;
+  d_partial_byte = 0;
 }
     
 inline void
@@ -48,18 +52,23 @@
 
   d_state = STATE_HAVE_SYNC;
   d_header = 0;
-  d_headerbitlen_cnt = 0;
+  d_headerbytelen_cnt = 0;
 }
 
 inline void
-gr_ofdm_frame_sink::enter_have_header(int payload_len, int whitener_offset)
+gr_ofdm_frame_sink::enter_have_header()
 {
   if (VERBOSE)
-    fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", 
payload_len, whitener_offset);
+    fprintf(stderr, "@ enter_have_header (payload_len = %d) (offset = %d)\n", 
+           d_packetlen, d_packet_whitener_offset);
 
   d_state = STATE_HAVE_HEADER;
-  d_packetlen = payload_len;
-  d_packet_whitener_offset = whitener_offset;
+
+  // header consists of two 16-bit shorts in network byte order
+  // payload length is lower 12 bits
+  // whitener offset is upper 4 bits
+  d_packetlen = (d_header >> 16) & 0x0fff;
+  d_packet_whitener_offset = (d_header >> 28) & 0x000f;
   d_packetlen_cnt = 0;
 }
 
@@ -101,7 +110,7 @@
 
 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_signature2 (2, 2, 
sizeof(gr_complex)*occupied_carriers, sizeof(char)),
                   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)
@@ -119,110 +128,106 @@
                          gr_vector_void_star &output_items)
 {
   const gr_complex *in = (const gr_complex *) input_items[0];
-  int count=0;
+  const char *sig = (const char *) input_items[1];
+  int count_tones=0, count_items=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) {
+  
+  bytes = bpsk_demapper(&in[0], bytes_out);
+  
+  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);
+  case STATE_SYNC_SEARCH:    // Look for flag indicating beginning of pkt
+    if (VERBOSE)
+      fprintf(stderr,"SYNC Search, noutput=%d\n", noutput_items);
+    
+    if (sig[0]) {  // Found it, set up for header decode
+      enter_have_sync();
+    }
+    break;
 
-      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(sig[0])
+      printf("ERROR -- Found SYNC in HAVE_SYNC\n");
+    if (VERBOSE)
+      fprintf(stderr,"Header Search bitcnt=%d, header=0x%08x\n",
+             d_headerbytelen_cnt, d_header);
 
-    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] & 0xFF);
+      j++;
        
-       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
+      if (++d_headerbytelen_cnt == HEADERBYTELEN) {
+        
+       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()){
+         enter_have_header();
+         printf("\nPacket Length: %d\n", d_packetlen);
+         for(int k=0; k < d_packetlen; k++)
+           printf("%02x", d_packet[k]);
+         printf("\n");
+         
+         assert(d_packetlen < 500);
+         
+         while((j < bytes) && (d_packetlen_cnt < d_packetlen)) {
+           d_packet[d_packetlen_cnt++] = bytes_out[j++];
          }
-         break;                                        // we're in a new state
+         
+         if(d_packetlen_cnt == d_packetlen) {
+           gr_message_sptr msg =
+             gr_make_message(0, d_packet_whitener_offset, 0, d_packetlen);
+           memcpy(msg->msg(), d_packet, d_packetlen_cnt);
+           d_target_queue->insert_tail(msg);           // send it
+           msg.reset();                                // free it up
+           
+           enter_search();                             
+         }
        }
+       else {
+         enter_search();                               // bad header
+       }
       }
-      break;
+    }
+    break;
       
     case STATE_HAVE_HEADER:
+      if(sig[0])
+       printf("ERROR -- Found SYNC in HAVE_HEADER at %d, length of %d\n", 
d_packetlen_cnt, d_packetlen);
       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++];
        
-       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;
-         }
+       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);
+  default:
+    assert(0);
 
-    } // switch
+  } // switch
 
-  }   // while
-
-  return noutput_items;
+  return 1;
 }

Modified: 
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
 2007-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
 2007-06-01 16:24:21 UTC (rev 5586)
@@ -59,12 +59,12 @@
   enum state_t {STATE_SYNC_SEARCH, STATE_HAVE_SYNC, STATE_HAVE_HEADER};
 
   static const int MAX_PKT_LEN    = 4096;
-  static const int HEADERBITLEN   = 32;
+  static const int HEADERBYTELEN   = 4;
 
   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
+  int               d_headerbytelen_cnt;       // how many so far
 
   unsigned int       d_occupied_carriers;
   unsigned int       d_byte_offset;
@@ -80,7 +80,7 @@
 
   void enter_search();
   void enter_have_sync();
-  void enter_have_header(int payload_len, int whitener_offset);
+  void enter_have_header();
   
   bool header_ok()
   {
@@ -88,15 +88,6 @@
     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);  

Modified: 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
   2007-06-01 16:23:40 UTC (rev 5585)
+++ 
gnuradio/branches/features/ofdm/receiver/gnuradio-core/src/lib/general/gr_ofdm_sampler.cc
   2007-06-01 16:24:21 UTC (rev 5586)
@@ -38,7 +38,7 @@
 gr_ofdm_sampler::gr_ofdm_sampler (unsigned int fft_length, 
                                  unsigned int symbol_length)
   : gr_block ("ofdm_sampler",
-             gr_make_io_signature (2, 2, sizeof (gr_complex)),
+             gr_make_io_signature2 (2, 2, sizeof (gr_complex), sizeof(char)),
              gr_make_io_signature (1, 1, sizeof (gr_complex)*fft_length)),
     d_fft_length(fft_length), d_symbol_length(symbol_length)
 {
@@ -61,7 +61,7 @@
                               gr_vector_void_star &output_items)
 {
   gr_complex *iptr = (gr_complex *) input_items[0];
-  gr_complex *trigger = (gr_complex *) input_items[1];
+  char *trigger = (char *) input_items[1];
 
   gr_complex *optr = (gr_complex *) output_items[0];
 
@@ -70,7 +70,7 @@
   unsigned int i=d_fft_length-1;
 
   while(!found && i<std::min(ninput_items[0],ninput_items[1]) )
-    if(trigger[i].real() > 0.5)
+    if(trigger[i])
       found = 1;
     else
       i++;





reply via email to

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