commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r5719 - gnuradio/branches/features/ofdm/sync/gnuradio-


From: trondeau
Subject: [Commit-gnuradio] r5719 - gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general
Date: Wed, 6 Jun 2007 16:55:57 -0600 (MDT)

Author: trondeau
Date: 2007-06-06 16:55:57 -0600 (Wed, 06 Jun 2007)
New Revision: 5719

Modified:
   
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
   
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
Log:
added QPSK demod to OFDM framer; working over the air

Modified: 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
===================================================================
--- 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
    2007-06-06 22:45:52 UTC (rev 5718)
+++ 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
    2007-06-06 22:55:57 UTC (rev 5719)
@@ -79,6 +79,14 @@
   return (unsigned char)(x.real() > 0 ? 1 : 0);
 }
 
+unsigned char gr_ofdm_frame_sink::qpsk_slicer(gr_complex x)
+{
+  unsigned char i = (x.real() > 0 ? 1 : 0);
+  unsigned char q = (x.imag() > 0 ? 1 : 0);
+
+  return (q << 1) | i;
+}
+
 unsigned int gr_ofdm_frame_sink::bpsk_demapper(const gr_complex *in,
                                               unsigned char *out)
 {
@@ -101,8 +109,29 @@
   return bytes_produced;
 }
 
+unsigned int gr_ofdm_frame_sink::qpsk_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 |= qpsk_slicer(in[i++]) << (d_byte_offset);
+      d_byte_offset += 2;
+    }
 
+    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)
 {
@@ -140,8 +169,9 @@
   if (VERBOSE)
     fprintf(stderr,">>> Entering state machine\n");
   
-  bytes = bpsk_demapper(&in[0], d_bytes_out);
-  
+  //bytes = bpsk_demapper(&in[0], d_bytes_out);
+  bytes = qpsk_demapper(&in[0], d_bytes_out);  
+
   switch(d_state) {
       
   case STATE_SYNC_SEARCH:    // Look for flag indicating beginning of pkt

Modified: 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
===================================================================
--- 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
     2007-06-06 22:45:52 UTC (rev 5718)
+++ 
gnuradio/branches/features/ofdm/sync/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
     2007-06-06 22:55:57 UTC (rev 5719)
@@ -94,6 +94,10 @@
   unsigned int bpsk_demapper(const gr_complex *in,
                             unsigned char *out);  
 
+  unsigned char qpsk_slicer(gr_complex x);
+  unsigned int qpsk_demapper(const gr_complex *in,
+                            unsigned char *out);  
+
  public:
   ~gr_ofdm_frame_sink();
 





reply via email to

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