commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: trondeau
Subject: [Commit-gnuradio] r4157 - gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general
Date: Wed, 20 Dec 2006 00:37:19 -0700 (MST)

Author: trondeau
Date: 2006-12-20 00:37:19 -0700 (Wed, 20 Dec 2006)
New Revision: 4157

Modified:
   
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
   
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i
Log:
OFDM modulator now working with new ifftshift and with added OFDM symbol prefix

Modified: 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
===================================================================
--- 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
 2006-12-20 07:36:24 UTC (rev 4156)
+++ 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.cc
 2006-12-20 07:37:19 UTC (rev 4157)
@@ -29,49 +29,115 @@
 #include <vector>
 
 gr_ofdm_bpsk_mapper_sptr
-gr_make_ofdm_bpsk_mapper (unsigned int bits_per_symbol, unsigned int vlen)
+gr_make_ofdm_bpsk_mapper (unsigned mtu, unsigned int occupied_carriers, 
unsigned int vlen)
 {
-  return gr_ofdm_bpsk_mapper_sptr (new gr_ofdm_bpsk_mapper (bits_per_symbol, 
vlen));
+  return gr_ofdm_bpsk_mapper_sptr (new gr_ofdm_bpsk_mapper (mtu, 
occupied_carriers, vlen));
 }
 
-gr_ofdm_bpsk_mapper::gr_ofdm_bpsk_mapper (unsigned bits_per_symbol,unsigned 
int vlen)
-  : gr_sync_decimator ("ofdm_bpsk_mapper",
-                      gr_make_io_signature (1, 1, sizeof(unsigned char)),
-                      gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen),
-                      bits_per_symbol),
-    d_bits_per_symbol(bits_per_symbol),
-    d_vlen(vlen)
+gr_ofdm_bpsk_mapper::gr_ofdm_bpsk_mapper (unsigned mtu, unsigned 
occupied_carriers, unsigned int vlen)
+  : gr_block ("ofdm_bpsk_mapper",
+             gr_make_io_signature (1, 1, 2*sizeof(int) + sizeof(unsigned 
char)*mtu),
+             gr_make_io_signature (1, 1, sizeof(gr_complex)*vlen)),
+    d_mtu(mtu),
+    d_occupied_carriers(occupied_carriers),
+    d_vlen(vlen),
+    d_packet_offset(0),
+    d_bit_offset(0)
 {
+  assert(d_occupied_carriers < d_vlen);
 }
 
 gr_ofdm_bpsk_mapper::~gr_ofdm_bpsk_mapper(void)
 {
 }
 
+void
+gr_ofdm_bpsk_mapper::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_mapper::work(int noutput_items,
-                         gr_vector_const_void_star &input_items,
-                         gr_vector_void_star &output_items)
+gr_ofdm_bpsk_mapper::general_work(int noutput_items,
+                                 gr_vector_int &ninput_items,
+                                 gr_vector_const_void_star &input_items,
+                                 gr_vector_void_star &output_items)
 {
-
-  const unsigned char *in = (const unsigned char *) input_items[0];
-  
+  const gr_frame *in = (const gr_frame *) input_items[0];
   gr_complex *out = (gr_complex *)output_items[0];
   
-  unsigned int left = (d_vlen - d_bits_per_symbol)/2;
-  unsigned int right = d_vlen - d_bits_per_symbol-left;
-  unsigned int i;
+  unsigned int i=0;
+  unsigned int num_symbols = 0, pkt_length=0;
+  
+  if(d_packet_offset == 0) {
+    //  Add training symbols here
+    for(i=0; i < (ceil((d_vlen - d_occupied_carriers)/2.0)); i++) {
+      out[i] = gr_complex(0,0);
+    }
+    for(;i<d_vlen - ceil((d_vlen-d_occupied_carriers)/2.0);i++) {
+      out[i] = gr_complex(1,0);
+    }
+    for(; i < d_vlen; i++) {
+      out[i] = gr_complex(0,0);
+    }
 
-  for(i=0;i<ceil(d_bits_per_symbol/2.0);i++) {
-    unsigned int k=ceil(d_bits_per_symbol/2.0);
+    num_symbols = 1;
+    pkt_length = in[0].length;
+    out += d_vlen;
+  }
+
+  int unoccupied_carriers = d_vlen - d_occupied_carriers;
+  int zeros_on_left = ceil(unoccupied_carriers/2.0);
+  int zeros_on_right = unoccupied_carriers - zeros_on_left;
+
+  while(num_symbols < noutput_items) {
+    // stick in unused carriers
+    for(i = d_vlen-zeros_on_right; i < d_vlen; i++) {
+      out[i] = gr_complex(0,0);
+    }
+
+    for(i=0; i < zeros_on_left; i++) {
+      out[i] = gr_complex(0,0);
+    }
+
+    while((d_packet_offset < pkt_length) && (i < d_vlen-zeros_on_right)) {
+      unsigned char bit = (in[0].data[d_packet_offset] >> (d_bit_offset++)) & 
0x01;
+      out[i++] = gr_complex(-1+2*(bit));
+      if(d_bit_offset == 8) {
+       d_bit_offset = 0;
+       d_packet_offset++;
+      }
+    }
+
+
+    // Ran out of data to put in symbols
+    while(i < d_occupied_carriers) {
+      out[i++] = gr_complex(0,0);
+      num_symbols++;
+      consume_each(1);
+      return num_symbols;
+    }
+    
+    // Ran out of space in symbol
+    out += d_vlen;
+    num_symbols++;
+  }
+  consume_each(0);
+  return num_symbols;
+}
+
+/*
+  for(i=0; i < ceil(d_occupied_carriers/2.0); i++) {
+    unsigned int k=ceil(d_occupied_carriers/2.0);
     out[i] = gr_complex(-1+2*in[i+k],0);
   }
-  for(;i<d_vlen - ceil(d_bits_per_symbol/2.0);i++) {
+  for(; i < d_vlen - ceil(d_occupied_carriers/2.0); i++) {
     out[i]=gr_complex(0,0);
   }
   for(unsigned int j=0;i<d_vlen;i++,j++) {
     out[i]= gr_complex((-1+2*in[j]),0);
   }
+*/
 
-  return 1;
-}

Modified: 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i
===================================================================
--- 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i
  2006-12-20 07:36:24 UTC (rev 4156)
+++ 
gnuradio/branches/developers/n4hy/ofdm/gnuradio-core/src/lib/general/gr_ofdm_bpsk_mapper.i
  2006-12-20 07:37:19 UTC (rev 4157)
@@ -23,18 +23,20 @@
 GR_SWIG_BLOCK_MAGIC(gr,ofdm_bpsk_mapper)
 
 gr_ofdm_bpsk_mapper_sptr 
-gr_make_ofdm_bpsk_mapper (unsigned int bits_per_symbol, 
+gr_make_ofdm_bpsk_mapper (unsigned int mtu,
+                         unsigned int bits_per_symbol, 
                          unsigned int vlen);
 
-class gr_ofdm_bpsk_mapper : public gr_sync_decimator
+class gr_ofdm_bpsk_mapper : public gr_block
 {
  protected:
-  gr_ofdm_bpsk_mapper (unsigned int bits_per_symbol,
+  gr_ofdm_bpsk_mapper (unsigned int mtu,
+                      unsigned int bits_per_symbol,
                       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]