commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4168 - gnuradio/branches/developers/n4hy/ofdm/gnuradi


From: trondeau
Subject: [Commit-gnuradio] r4168 - gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general
Date: Wed, 20 Dec 2006 18:13:34 -0700 (MST)

Author: trondeau
Date: 2006-12-20 18:13:34 -0700 (Wed, 20 Dec 2006)
New Revision: 4168

Modified:
   
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.cc
   
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
   
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.i
Log:
udpated demapper to work with fftshift and new modulator

Modified: 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.cc
===================================================================
--- 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.cc
       2006-12-20 23:39:15 UTC (rev 4167)
+++ 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.cc
       2006-12-21 01:13:34 UTC (rev 4168)
@@ -29,18 +29,18 @@
 #include <vector>
 
 gr_ofdm_bpsk_demapper_sptr
-gr_make_ofdm_bpsk_demapper (unsigned int bits_per_symbol, unsigned int vlen)
+gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers, unsigned int vlen)
 {
-  return gr_ofdm_bpsk_demapper_sptr (new gr_ofdm_bpsk_demapper 
(bits_per_symbol, vlen));
+  return gr_ofdm_bpsk_demapper_sptr (new gr_ofdm_bpsk_demapper 
(occupied_carriers, vlen));
 }
 
-gr_ofdm_bpsk_demapper::gr_ofdm_bpsk_demapper (unsigned 
bits_per_symbol,unsigned int vlen)
-  : gr_sync_interpolator ("ofdm_bpsk_demapper",
-                         gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen),
-                         gr_make_io_signature (1, 1, sizeof(unsigned char)),
-                         bits_per_symbol),
-    d_bits_per_symbol(bits_per_symbol),
-    d_vlen(vlen)
+gr_ofdm_bpsk_demapper::gr_ofdm_bpsk_demapper (unsigned occupied_carriers, 
unsigned int vlen)
+  : gr_block ("ofdm_bpsk_demapper",
+             gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen),
+             gr_make_io_signature (1, 1, sizeof(unsigned char))),
+    d_occupied_carriers(occupied_carriers),
+    d_vlen(vlen),
+    d_byte_offset(0)
 {
 }
 
@@ -53,32 +53,51 @@
   return (unsigned char)(x.real() > 0 ? 1 : 0);
 }
 
+void
+gr_ofdm_bpsk_demapper::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
+{
+  unsigned ninputs = ninput_items_required.size ();
+  for (unsigned i = 0; i < ninputs; i++)
+    ninput_items_required[i] = 1;
+}
+
 int
-gr_ofdm_bpsk_demapper::work(int noutput_items,
-                           gr_vector_const_void_star &input_items,
-                           gr_vector_void_star &output_items)
+gr_ofdm_bpsk_demapper::general_work(int noutput_items,
+                                   gr_vector_int &ninput_items,
+                                   gr_vector_const_void_star &input_items,
+                                   gr_vector_void_star &output_items)
 {
-
   const gr_complex *in = (const gr_complex *)input_items[0];
   unsigned char *out = (unsigned char *) output_items[0];
   
-  unsigned int i=0, j=0;
+  unsigned int i=0, bytes_produced=0;
 
-  for(i=0;i<ceil(d_bits_per_symbol/2.0);i++) {
-    unsigned int k=ceil(d_bits_per_symbol/2.0);
-    out[i+k] = slicer(in[i]);
+  int unoccupied_carriers = d_vlen - d_occupied_carriers;
+  int zeros_on_left = (int)ceil(unoccupied_carriers/2.0);
+  //  int zeros_on_right = (int)unoccupied_carriers - zeros_on_left;
+
+  i = zeros_on_left;
+  while(i < zeros_on_left+d_occupied_carriers) {
+
+    while((d_byte_offset < 8) && (i < zeros_on_left+d_occupied_carriers)) {
+      d_partial_byte |= 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;
+    }
   }
-  for(i+=(d_vlen-d_bits_per_symbol);i<d_vlen;i++,j++) {
-    out[j]= slicer(in[i]);
-  }
 
 #if 0
 printf("demod out: ");
-  for(i = 0; i < d_bits_per_symbol; i++) {
-    printf("%d", out[i]);
+  for(i = 0; i < bytes_produced; i++) {
+    printf("%4x", out[i]);
   }
-  printf(" %d\n", i);
+  printf(" \tlen: %d\n", i);
 #endif
 
-  return d_bits_per_symbol;
+  consume_each(1);
+  return bytes_produced;
 }

Modified: 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
===================================================================
--- 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
        2006-12-20 23:39:15 UTC (rev 4167)
+++ 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.h
        2006-12-21 01:13:34 UTC (rev 4168)
@@ -24,13 +24,13 @@
 #define INCLUDED_GR_OFDM_BPSK_DEMAPPER_H
 
 
-#include <gr_sync_interpolator.h>
+#include <gr_block.h>
 
 class gr_ofdm_bpsk_demapper;
 typedef boost::shared_ptr<gr_ofdm_bpsk_demapper> gr_ofdm_bpsk_demapper_sptr;
 
 gr_ofdm_bpsk_demapper_sptr 
-gr_make_ofdm_bpsk_demapper (unsigned int bits_per_symbol, unsigned int vlen);
+gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers, unsigned int vlen);
 
 
 /*!
@@ -38,25 +38,30 @@
  * and demodulate to a stream of bits. Simple BPSK version.
  */
 
-class gr_ofdm_bpsk_demapper : public gr_sync_interpolator
+class gr_ofdm_bpsk_demapper : public gr_block
 {
   friend gr_ofdm_bpsk_demapper_sptr
-    gr_make_ofdm_bpsk_demapper (unsigned int bits_per_symbol, unsigned int 
vlen);
+    gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers, unsigned int 
vlen);
   
  protected:
-  gr_ofdm_bpsk_demapper (unsigned int bits_per_symbol, unsigned int vlen);
+  gr_ofdm_bpsk_demapper (unsigned int occupied_carriers, unsigned int vlen);
   
  private:
   unsigned char slicer(gr_complex x);
 
-  unsigned int d_bits_per_symbol;
+  unsigned int d_occupied_carriers;
   unsigned int d_vlen;
+  unsigned int d_byte_offset;
+  unsigned char d_partial_byte;
+  
+  void forecast(int noutput_items, gr_vector_int &ninput_items_required);
 
  public:
   ~gr_ofdm_bpsk_demapper(void);
-  int work(int noutput_items,
-          gr_vector_const_void_star &input_times,
-          gr_vector_void_star &output_items);
+  int general_work(int noutput_items,
+                  gr_vector_int &ninput_items,
+                  gr_vector_const_void_star &input_items,
+                  gr_vector_void_star &output_items);
 };
 
 

Modified: 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.i
===================================================================
--- 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.i
        2006-12-20 23:39:15 UTC (rev 4167)
+++ 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_demapper.i
        2006-12-21 01:13:34 UTC (rev 4168)
@@ -23,18 +23,18 @@
 GR_SWIG_BLOCK_MAGIC(gr,ofdm_bpsk_demapper)
 
 gr_ofdm_bpsk_demapper_sptr 
-gr_make_ofdm_bpsk_demapper (unsigned int bits_per_symbol, 
+gr_make_ofdm_bpsk_demapper (unsigned int occupied_carriers, 
                            unsigned int vlen);
 
 class gr_ofdm_bpsk_demapper : public gr_sync_decimator
 {
  protected:
-  gr_ofdm_bpsk_demapper (unsigned int bits_per_symbol,
+  gr_ofdm_bpsk_demapper (unsigned int occupied_carriers,
                         unsigned int vlen);
 
  public:
-  int work (int noutput_items,
-           gr_vector_const_void_star &input_items,
-           gr_vector_void_star &output_items);
-
+  int general_work(int noutput_items,
+                  gr_vector_int &ninput_items,
+                  gr_vector_const_void_star &input_items,
+                  gr_vector_void_star &output_items);
 };





reply via email to

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