commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r7105 - in gnuradio/branches/developers/trondeau/ofdm2


From: trondeau
Subject: [Commit-gnuradio] r7105 - in gnuradio/branches/developers/trondeau/ofdm2: gnuradio-core/src/lib/general gnuradio-core/src/lib/gengen gnuradio-core/src/python/gnuradio/blks2impl gnuradio-examples/python/ofdm
Date: Tue, 11 Dec 2007 13:49:42 -0700 (MST)

Author: trondeau
Date: 2007-12-11 13:49:38 -0700 (Tue, 11 Dec 2007)
New Revision: 7105

Modified:
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.cc.t
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.h.t
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.i.t
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py
   
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/plot_ofdm.m
Log:
I think this finishes the conversion to heir_block2 structures, though the tx 
and rx scripts need testing with a USRP. Should complete ticket:188.  Also adds 
an output from the ofdm frame sink of the derotated symbols.

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
     2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.cc
     2007-12-11 20:49:38 UTC (rev 7105)
@@ -116,6 +116,16 @@
     while((d_byte_offset < 8) && (i < d_occupied_carriers)) {
       gr_complex sigrot = in[i]*carrier*d_dfe[i];
       
+      if(d_derotated_output != NULL){
+       *d_derotated_output = sigrot;
+
+       if (VERBOSE)
+         fprintf(stderr, "Sigrot: %.4f + j%.4f  => output: %.4f + j%.4f\n",
+              sigrot.real(), sigrot.imag(), (*d_derotated_output).real(), 
(*d_derotated_output).imag());
+
+       d_derotated_output++;
+      }
+      
       //fprintf(stderr, "%f+j%f  = %d\n", sigrot.real(), sigrot.imag(), 
slicer(in[i])); 
       //unsigned char bits = slicer(in[i++]);
       unsigned char bits = slicer(sigrot);
@@ -161,7 +171,9 @@
   if (d_phase >= 2*M_PI) d_phase -= 2*M_PI;
   if (d_phase <0) d_phase += 2*M_PI;
     
-  std::cerr << angle << "\t" << d_freq << "\t" << d_phase << "\t" << std::endl;
+  if(VERBOSE)
+    std::cerr << angle << "\t" << d_freq << "\t" << d_phase << "\t" << 
std::endl;
+  
   return bytes_produced;
 }
 
@@ -184,7 +196,7 @@
                                       float phase_gain, float freq_gain)
   : gr_sync_block ("ofdm_frame_sink",
                   gr_make_io_signature2 (2, 2, 
sizeof(gr_complex)*occupied_carriers, sizeof(char)),
-                  gr_make_io_signature (0, 0, 0)),
+                  gr_make_io_signature (1, 1, sizeof(gr_complex))),
     d_target_queue(target_queue), d_occupied_carriers(occupied_carriers), 
     d_byte_offset(0), d_partial_byte(0),
     d_resid(0), 
d_nresid(0),d_phase(0),d_freq(0),d_phase_gain(phase_gain),d_freq_gain(freq_gain),
@@ -216,7 +228,7 @@
 
   d_sym_position  = sym_position;
   d_sym_value_out = sym_value_out;
-  d_nbits = (unsigned long)ceil(log10(d_sym_value_out.size()) / log10(2));
+  d_nbits = (unsigned long)ceil(log10(d_sym_value_out.size()) / log10(2.0));
 
   return true;
 }
@@ -231,6 +243,12 @@
   const char *sig = (const char *) input_items[1];
   unsigned int j = 0;
   unsigned int bytes=0;
+
+  // If the output is connected, send it the derotated symbols
+  if(output_items.size() >= 1)
+    d_derotated_output = (gr_complex *)output_items[0];
+  else
+    d_derotated_output = NULL;
   
   if (VERBOSE)
     fprintf(stderr,">>> Entering state machine\n");

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
      2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/general/gr_ofdm_frame_sink.h
      2007-12-11 20:49:38 UTC (rev 7105)
@@ -73,6 +73,8 @@
   int                d_packet_whitener_offset;  // offset into whitener string 
to use
   int               d_packetlen_cnt;           // how many so far
 
+  gr_complex * d_derotated_output;  // Pointer to output stream to send 
deroated symbols out
+
   std::vector<gr_complex>    d_sym_position;
   std::vector<unsigned char> d_sym_value_out;
   std::vector<gr_complex>    d_dfe;

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.cc.t
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.cc.t
      2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.cc.t
      2007-12-11 20:49:38 UTC (rev 7105)
@@ -30,17 +30,18 @@
 #include <gr_io_signature.h>
 
 @SPTR_NAME@
address@hidden@ (float threshold)
address@hidden@ (float threshold, bool rising_edge)
 {
-  return @SPTR_NAME@ (new @NAME@ (threshold));
+  return @SPTR_NAME@ (new @NAME@ (threshold, rising_edge));
 }
 
address@hidden@::@NAME@ (float threshold)
address@hidden@::@NAME@ (float threshold, bool rising_edge)
   : gr_sync_block ("@BASE_NAME@",
                   gr_make_io_signature (1, 1, sizeof (@I_TYPE@)),
                   gr_make_io_signature (1, 1, sizeof (char))),
-    d_threshold(threshold), d_found(0)
+    d_threshold(threshold), d_rising_edge(rising_edge), d_found(0)
 {
+  set_history(2);
 }
 
 int
@@ -55,9 +56,17 @@
   memset(optr, 0, noutput_items*sizeof(char));
 
   while(i < noutput_items) {
-    if(iptr[i] > d_threshold) {
-      optr[i];
+    if(d_rising_edge) {
+      if((iptr[i-1] < d_threshold) && (iptr[i] >= d_threshold)) {
+       optr[i] = 1;
+      }
     }
+    else {
+      if((iptr[i-1] > d_threshold) && (iptr[i] <= d_threshold)) {
+       optr[i] = 1;
+      }
+    }
+
     i++;
   }
   return noutput_items;

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.h.t
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.h.t
       2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.h.t
       2007-12-11 20:49:38 UTC (rev 7105)
@@ -30,7 +30,7 @@
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
address@hidden@ address@hidden@ (float threshold = 0.25);
address@hidden@ address@hidden@ (float threshold=0.25, bool rising_edge=true);
 
 /*!
  * \brief Detect the peak of a signal
@@ -40,16 +40,19 @@
  * or it outputs 0's.
  *
  * \param threshold threshold above which the detector is signaled
+ * \param rising_edge sets detector to output a 1 when the rising edge is see 
if True
+ *                    or when the falling edge is seen when false.
  */
 class @NAME@ : public gr_sync_block
 {
-  friend @SPTR_NAME@ address@hidden@ (float threshold);
+  friend @SPTR_NAME@ address@hidden@ (float threshold, bool rising_edge);
 
-  @NAME@ (float threshold);
+  @NAME@ (float threshold, bool rising_edge);
 
  private:
   float d_threshold;
-  unsigned char d_found;
+  bool d_rising_edge;
+  bool d_found;
 
  public:
 
@@ -58,11 +61,21 @@
    */
   void set_threshold(float thr) { d_threshold = thr; }
 
+  /*! \brief Set which edge to trigger off of
+   *  \param edge Bool value; True=rising edge, False=falling edge
+   */
+  void set_rising_edge(bool edge) { d_rising_edge = edge; }
+
   /*! \brief Get the threshold value
    *  \return threshold factor
    */
   float threshold() { return d_threshold; }
 
+  /*! \brief Get which edge is being used to trigger
+   *  \return True=rising edge, False=falling edge
+   */
+  bool rising_edge() { return d_threshold; }
+
   int work (int noutput_items,
            gr_vector_const_void_star &input_items,
            gr_vector_void_star &output_items);

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.i.t
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.i.t
       2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/lib/gengen/gr_threshold_detector_XX.i.t
       2007-12-11 20:49:38 UTC (rev 7105)
@@ -24,14 +24,16 @@
 
 GR_SWIG_BLOCK_MAGIC(gr,@BASE_NAME@)
 
address@hidden@ address@hidden@ (float threshold = 0.25);
address@hidden@ address@hidden@ (float threshold=0.25, bool rising_edge=true);
 
 class @NAME@ : public gr_sync_block
 {
  private:
-  @NAME@ (float threshold);
+  @NAME@ (float threshold, bool rising_edge);
 
  public:
   void set_threshold(float thr) { d_threshold = thr; }
+  void set_rising_edge(float edge) { d_rising_edge = edge; }
   float threshold() { return d_threshold; } 
+  bool rising_edge() { return d_rising_edge; } 
 };

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
 2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/Makefile.am
 2007-12-11 20:49:38 UTC (rev 7105)
@@ -43,6 +43,8 @@
        ofdm.py                 \
        ofdm_receiver.py        \
        ofdm_sync_pn.py         \
+       ofdm_sync_pnac.py       \
+       ofdm_sync_ml.py         \
        pkt.py                  \
        psk.py                  \
        qam.py                  \

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py
     2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm.py
     2007-12-11 20:49:38 UTC (rev 7105)
@@ -76,7 +76,7 @@
         preambles = (ksfreq,
                      known_symbols_4512_1[0:self._occupied_tones],
                      known_symbols_4512_2[0:self._occupied_tones])
-        
+                
         padded_preambles = list()
         for pre in preambles:
             padded = self._fft_length*[0,]
@@ -142,7 +142,7 @@
         Adds OFDM-specific options to the Options Parser
         """
         normal.add_option("-m", "--modulation", type="string", default="bpsk",
-                          help="set modulation type (bpsk or qpsk) 
[default=%default]")
+                          help="set modulation type (bpsk, qpsk, 8psk, 
qam{16,64}) [default=%default]")
         expert.add_option("", "--fft-length", type="intx", default=512,
                           help="set the number of FFT bins [default=%default]")
         expert.add_option("", "--occupied-tones", type="intx", default=200,
@@ -248,6 +248,11 @@
         # thing to export, anyway
         self.connect(self.ofdm_recv.chan_filt, self)
 
+        if options.log:
+            self.connect(self.ofdm_demod, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_frame_sink_c.dat"))
+        else:
+            self.connect(self.ofdm_demod, gr.null_sink(gr.sizeof_gr_complex))
+
         if options.verbose:
             self._print_verbage()
             

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py
    2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_receiver.py
    2007-12-11 20:49:38 UTC (rev 7105)
@@ -22,9 +22,9 @@
 
 import math
 from gnuradio import gr
-#from gnuradio.blks2impl.ofdm_sync_ml import ofdm_sync_ml
+from gnuradio.blks2impl.ofdm_sync_ml import ofdm_sync_ml
 from gnuradio.blks2impl.ofdm_sync_pn import ofdm_sync_pn
-#from gnuradio.blks2impl.ofdm_sync_pnac import ofdm_sync_pnac
+from gnuradio.blks2impl.ofdm_sync_pnac import ofdm_sync_pnac
 
 class ofdm_receiver(gr.hier_block2):
     """
@@ -72,15 +72,14 @@
         
         win = [1 for i in range(fft_length)]
 
-        SYNC = "pn"
-        #if SYNC == "ml":
-        #    self.ofdm_sync = ofdm_sync_ml(fg, fft_length, cp_length, snr, 
logging)
-        #elif SYNC == "pn":
-        #    self.ofdm_sync = ofdm_sync_pn(fg, fft_length, cp_length, logging)
-        #elif SYNC == "pnac":
-        #    self.ofdm_sync = ofdm_sync_pnac(fg, fft_length, cp_length, ks[0])
-        self.ofdm_sync = ofdm_sync_pn(fft_length, cp_length, logging)
-
+        SYNC = "ml"
+        if SYNC == "ml":
+            self.ofdm_sync = ofdm_sync_ml(fft_length, cp_length, snr, logging)
+        elif SYNC == "pn":
+            self.ofdm_sync = ofdm_sync_pn(fft_length, cp_length, logging)
+        elif SYNC == "pnac":
+            self.ofdm_sync = ofdm_sync_pnac(fft_length, cp_length, ks[0])
+                        
         self.fft_demod = gr.fft_vcc(fft_length, True, win, True)
         self.ofdm_corr = gr.ofdm_correlator(occupied_tones, fft_length,
                                             cp_length, ks[1], ks[2])

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py
     2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_ml.py
     2007-12-11 20:49:38 UTC (rev 7105)
@@ -23,20 +23,23 @@
 import math
 from gnuradio import gr
 
-class ofdm_sync_ml(gr.hier_block):
-    def __init__(self, fg, fft_length, cp_length, snr, logging):
+class ofdm_sync_ml(gr.hier_block2):
+    def __init__(self, fft_length, cp_length, snr, logging):
         ''' Maximum Likelihood OFDM synchronizer:
         J. van de Beek, M. Sandell, and P. O. Borjesson, "ML Estimation
         of Time and Frequency Offset in OFDM Systems," IEEE Trans.
         Signal Processing, vol. 45, no. 7, pp. 1800-1805, 1997.
         '''
 
-        self.fg = fg
-
-        # FIXME: when converting to hier_block2's, the output signature
+        # FIXME: change the output signature
         # should be the output of the divider (the normalized peaks) and
         # the angle value out of the sample and hold block
+        # move sampler out of this block
 
+       gr.hier_block2.__init__(self, "ofdm_sync_ml",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # 
Input signature
+                               gr.io_signature(1, 1, 
gr.sizeof_gr_complex*fft_length)) # Output signature
+
         self.input = gr.add_const_cc(0)
 
         SNR = 10.0**(snr/10.0)
@@ -47,9 +50,11 @@
 
         # Energy Detection from ML Sync
 
+        self.connect(self, self.input)
+
         # Create a delay line
         self.delay = gr.delay(gr.sizeof_gr_complex, fft_length)
-        self.fg.connect(self.input, self.delay)
+        self.connect(self.input, self.delay)
 
         # magnitude squared blocks
         self.magsqrd1 = gr.complex_to_mag_squared()
@@ -59,11 +64,11 @@
         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)
+        self.connect(self.input,self.magsqrd1)
+        self.connect(self.delay,self.magsqrd2)
+        self.connect(self.magsqrd1,(self.adder,0))
+        self.connect(self.magsqrd2,(self.adder,1))
+        self.connect(self.adder,self.moving_sum_filter)
         
 
         # Correlation from ML Sync
@@ -76,15 +81,15 @@
         # 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)
+        self.connect(self.input,(self.mixer,1))
+        self.connect(self.delay,self.conjg,(self.mixer,0))
+        self.connect(self.mixer,self.movingsum2,self.c2mag)
+        self.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))
+        self.connect(self.c2mag,(self.diff,0))
+        self.connect(self.moving_sum_filter,(self.diff,1))
 
         #ML measurements input to sampler block and detect
         nco_sensitivity = -1.0/fft_length
@@ -96,40 +101,41 @@
         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))
+        self.connect(self.input, (self.sigmix,0))
+        self.connect(self.nco, (self.sigmix,1))
+        self.connect(self.sigmix, (self.sampler,0))
 
         # use the sync loop values to set the sampler and the NCO
         #     self.diff = theta
         #     self.angle = epsilon
                           
-        self.fg.connect(self.diff, self.pk_detect)
+        self.connect(self.diff, self.pk_detect)
 
         use_dpll = 1
         if use_dpll:
             self.dpll = gr.dpll_bb(float(symbol_length),0.01)
-            self.fg.connect(self.pk_detect, self.dpll)
-            self.fg.connect(self.dpll, (self.sampler,1))
-            self.fg.connect(self.dpll, (self.sample_and_hold,1))
+            self.connect(self.pk_detect, self.dpll)
+            self.connect(self.dpll, (self.sampler,1))
+            self.connect(self.dpll, (self.sample_and_hold,1))
         else:
-            self.fg.connect(self.pk_detect, (self.sampler,1))
-            self.fg.connect(self.pk_detect, (self.sample_and_hold,1))
+            self.connect(self.pk_detect, (self.sampler,1))
+            self.connect(self.pk_detect, (self.sample_and_hold,1))
             
-        self.fg.connect(self.angle, (self.sample_and_hold,0))
-        self.fg.connect(self.sample_and_hold, self.nco)
+        self.connect(self.angle, (self.sample_and_hold,0))
+        self.connect(self.sample_and_hold, self.nco)
 
+        self.connect(self.sampler, self)
+
         if logging:
-            self.fg.connect(self.diff, gr.file_sink(gr.sizeof_float, 
"ofdm_sync_ml-theta_f.dat"))
-            self.fg.connect(self.angle, gr.file_sink(gr.sizeof_float, 
"ofdm_sync_ml-epsilon_f.dat"))
-            self.fg.connect(self.pk_detect, gr.file_sink(gr.sizeof_char, 
"ofdm_sync_ml-peaks_b.dat"))
+            self.connect(self.diff, gr.file_sink(gr.sizeof_float, 
"ofdm_sync_ml-theta_f.dat"))
+            self.connect(self.angle, gr.file_sink(gr.sizeof_float, 
"ofdm_sync_ml-epsilon_f.dat"))
+            self.connect(self.pk_detect, gr.file_sink(gr.sizeof_char, 
"ofdm_sync_ml-peaks_b.dat"))
             if use_dpll:
-                self.fg.connect(self.dpll, gr.file_sink(gr.sizeof_char, 
"ofdm_sync_ml-dpll_b.dat"))
+                self.connect(self.dpll, gr.file_sink(gr.sizeof_char, 
"ofdm_sync_ml-dpll_b.dat"))
 
-            self.fg.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-sigmix_c.dat"))
-            self.fg.connect(self.sampler, 
gr.file_sink(gr.sizeof_gr_complex*fft_length, "ofdm_sync_ml-sampler_c.dat"))
-            self.fg.connect(self.sample_and_hold, 
gr.file_sink(gr.sizeof_float, "ofdm_sync_ml-sample_and_hold_f.dat"))
-            self.fg.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-nco_c.dat"))
-            self.fg.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-input_c.dat"))
+            self.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-sigmix_c.dat"))
+            self.connect(self.sampler, 
gr.file_sink(gr.sizeof_gr_complex*fft_length, "ofdm_sync_ml-sampler_c.dat"))
+            self.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float, 
"ofdm_sync_ml-sample_and_hold_f.dat"))
+            self.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-nco_c.dat"))
+            self.connect(self.input, gr.file_sink(gr.sizeof_gr_complex, 
"ofdm_sync_ml-input_c.dat"))
 
-        gr.hier_block.__init__(self, fg, self.input, self.sampler)

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py
   2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-core/src/python/gnuradio/blks2impl/ofdm_sync_pnac.py
   2007-12-11 20:49:38 UTC (rev 7105)
@@ -24,13 +24,18 @@
 from numpy import fft
 from gnuradio import gr
 
-class ofdm_sync_pnac(gr.hier_block):
-    def __init__(self, fg, fft_length, cp_length, ks):
-        self.fg = fg
-
-        # FIXME: when converting to hier_block2's, the output signature
+class ofdm_sync_pnac(gr.hier_block2):
+    def __init__(self, fft_length, cp_length, ks):
+        
+        # FIXME: change the output signature
         # should be the output of the divider (the normalized peaks) and
         # the angle value out of the sample and hold block
+        # move sampler out of this block
+
+       gr.hier_block2.__init__(self, "ofdm_sync_pnac",
+                               gr.io_signature(1, 1, gr.sizeof_gr_complex), # 
Input signature
+                               gr.io_signature(1, 1, 
gr.sizeof_gr_complex*fft_length)) # Output signature
+
             
         self.input = gr.add_const_cc(0)
 
@@ -42,7 +47,7 @@
         ks = ks[0:fft_length//2]
         ks.reverse()
         self.crosscorr_filter = gr.fir_filter_ccc(1, ks)
-        self.fg.connect(self.crosscorr_filter, 
gr.file_sink(gr.sizeof_gr_complex, "crosscorr.dat"))
+        self.connect(self.crosscorr_filter, gr.file_sink(gr.sizeof_gr_complex, 
"crosscorr.dat"))
         
         # Create a delay line
         self.delay = gr.delay(gr.sizeof_gr_complex, fft_length/2)
@@ -78,49 +83,49 @@
         self.pk_detect = gr.peak_detector_fb(0.2, 0.25, 30, 0.0005)
 
         self.sampler = gr.ofdm_sampler(fft_length,symbol_length)
-        
-        self.fg.connect(self.input, self.crosscorr_filter)
-        self.fg.connect(self.crosscorr_filter, self.delay)
-        self.fg.connect(self.crosscorr_filter, (self.corr,0))
-        self.fg.connect(self.delay, self.conjg)
-        self.fg.connect(self.conjg, (self.corr,1))
-        self.fg.connect(self.corr, self.moving_sum_filter)
-        self.fg.connect(self.moving_sum_filter, self.c2mag)
-        self.fg.connect(self.moving_sum_filter, self.angle)
-        self.fg.connect(self.angle, (self.sample_and_hold,0))
-        self.fg.connect(self.sample_and_hold, self.nco)
 
-        self.fg.connect(self.input, (self.sigmix,0))
-        self.fg.connect(self.nco, (self.sigmix,1))
-        self.fg.connect(self.sigmix, (self.sampler,0))
+        self.connect(self, self.input)
+        self.connect(self.input, self.crosscorr_filter)
+        self.connect(self.crosscorr_filter, self.delay)
+        self.connect(self.crosscorr_filter, (self.corr,0))
+        self.connect(self.delay, self.conjg)
+        self.connect(self.conjg, (self.corr,1))
+        self.connect(self.corr, self.moving_sum_filter)
+        self.connect(self.moving_sum_filter, self.c2mag)
+        self.connect(self.moving_sum_filter, self.angle)
+        self.connect(self.angle, (self.sample_and_hold,0))
+        self.connect(self.sample_and_hold, self.nco)
 
-        self.fg.connect(self.input, self.inputmag2, self.inputmovingsum)
-        self.fg.connect(self.inputmovingsum, (self.square,0))
-        self.fg.connect(self.inputmovingsum, (self.square,1))
-        self.fg.connect(self.square, (self.normalize,1))
-        self.fg.connect(self.c2mag, (self.normalize,0))
-        self.fg.connect(self.normalize, self.sub1, self.pk_detect)
+        self.connect(self.input, (self.sigmix,0))
+        self.connect(self.nco, (self.sigmix,1))
+        self.connect(self.sigmix, (self.sampler,0))
 
-        self.fg.connect(self.pk_detect, (self.sampler,1))
-        self.fg.connect(self.pk_detect, (self.sample_and_hold,1))
+        self.connect(self.input, self.inputmag2, self.inputmovingsum)
+        self.connect(self.inputmovingsum, (self.square,0))
+        self.connect(self.inputmovingsum, (self.square,1))
+        self.connect(self.square, (self.normalize,1))
+        self.connect(self.c2mag, (self.normalize,0))
+        self.connect(self.normalize, self.sub1, self.pk_detect)
+
+        self.connect(self.pk_detect, (self.sampler,1))
+        self.connect(self.pk_detect, (self.sample_and_hold,1))
             
+        self.connect(self.sampler, self)
 
         if 1:
-            self.fg.connect(self.normalize, gr.file_sink(gr.sizeof_float,
-                                                         
"ofdm_sync_pnac-theta_f.dat"))
-            self.fg.connect(self.angle, gr.file_sink(gr.sizeof_float,
-                                                     
"ofdm_sync_pnac-epsilon_f.dat"))
-            self.fg.connect(self.pk_detect, gr.file_sink(gr.sizeof_char,
-                                                         
"ofdm_sync_pnac-peaks_b.dat"))
-            self.fg.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex,
-                                                      
"ofdm_sync_pnac-sigmix_c.dat"))
-            self.fg.connect(self.sampler, 
gr.file_sink(gr.sizeof_gr_complex*fft_length,
-                                                       
"ofdm_sync_pnac-sampler_c.dat"))
-            self.fg.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float,
-                                                               
"ofdm_sync_pnac-sample_and_hold_f.dat"))
-            self.fg.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex,
-                                                   "ofdm_sync_pnac-nco_c.dat"))
-            self.fg.connect(self.input, gr.file_sink(gr.sizeof_gr_complex,
-                                                     
"ofdm_sync_pnac-input_c.dat"))
-
-        gr.hier_block.__init__(self, fg, self.input, self.sampler)
+            self.connect(self.normalize, gr.file_sink(gr.sizeof_float,
+                                                      
"ofdm_sync_pnac-theta_f.dat"))
+            self.connect(self.angle, gr.file_sink(gr.sizeof_float,
+                                                  
"ofdm_sync_pnac-epsilon_f.dat"))
+            self.connect(self.pk_detect, gr.file_sink(gr.sizeof_char,
+                                                      
"ofdm_sync_pnac-peaks_b.dat"))
+            self.connect(self.sigmix, gr.file_sink(gr.sizeof_gr_complex,
+                                                   
"ofdm_sync_pnac-sigmix_c.dat"))
+            self.connect(self.sampler, 
gr.file_sink(gr.sizeof_gr_complex*fft_length,
+                                                    
"ofdm_sync_pnac-sampler_c.dat"))
+            self.connect(self.sample_and_hold, gr.file_sink(gr.sizeof_float,
+                                                            
"ofdm_sync_pnac-sample_and_hold_f.dat"))
+            self.connect(self.nco, gr.file_sink(gr.sizeof_gr_complex,
+                                                "ofdm_sync_pnac-nco_c.dat"))
+            self.connect(self.input, gr.file_sink(gr.sizeof_gr_complex,
+                                                  
"ofdm_sync_pnac-input_c.dat"))

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py
      2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_rx.py
      2007-12-11 20:49:38 UTC (rev 7105)
@@ -20,21 +20,21 @@
 # Boston, MA 02110-1301, USA.
 # 
 
-from gnuradio import gr, blks
+from gnuradio import gr, blks2
 from gnuradio import usrp
 from gnuradio import eng_notation
 from gnuradio.eng_option import eng_option
 from optparse import OptionParser
 
-import random, time, struct, sys
+import struct, sys
 
 # from current dir
 from receive_path import receive_path
 import fusb_options
 
-class usrp_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
     def __init__(self, callback, options):
-        gr.flow_graph.__init__(self)
+        gr.top_block.__init__(self)
 
         self._rx_freq            = options.rx_freq         # receiver's center 
frequency
         self._rx_gain            = options.rx_gain         # receiver's gain
@@ -61,10 +61,10 @@
         self.set_auto_tr(True)                 # enable Auto Transmit/Receive 
switching
 
         # Set up receive path
-        self.rxpath = receive_path(self, callback, options)
+        self.rxpath = receive_path(callback, options)
 
         self.connect(self.u, self.rxpath)
-
+        
     def _setup_usrp_source(self):
         self.u = usrp.source_c (fusb_block_size=self._fusb_block_size,
                                 fusb_nblocks=self._fusb_nblocks)
@@ -187,23 +187,23 @@
     parser.add_option("","--discontinuous", action="store_true", default=False,
                       help="enable discontinuous")
 
-    usrp_graph.add_options(parser, expert_grp)
+    my_top_block.add_options(parser, expert_grp)
     receive_path.add_options(parser, expert_grp)
-    blks.ofdm_mod.add_options(parser, expert_grp)
-    blks.ofdm_demod.add_options(parser, expert_grp)
+    blks2.ofdm_mod.add_options(parser, expert_grp)
+    blks2.ofdm_demod.add_options(parser, expert_grp)
     fusb_options.add_options(expert_grp)
 
     (options, args) = parser.parse_args ()
 
     # build the graph
-    fg = usrp_graph(rx_callback, options)
+    tb = my_top_block(rx_callback, options)
 
     r = gr.enable_realtime_scheduling()
     if r != gr.RT_OK:
         print "Warning: failed to enable realtime scheduling"
 
-    fg.start()                      # start flow graph
-    fg.wait()                       # wait for it to finish
+    tb.start()                      # start flow graph
+    tb.wait()                       # wait for it to finish
 
 if __name__ == '__main__':
     try:

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py
      2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/benchmark_ofdm_tx.py
      2007-12-11 20:49:38 UTC (rev 7105)
@@ -20,7 +20,7 @@
 # Boston, MA 02110-1301, USA.
 # 
 
-from gnuradio import gr, blks
+from gnuradio import gr, blks2
 from gnuradio import usrp
 from gnuradio import eng_notation
 from gnuradio.eng_option import eng_option
@@ -33,9 +33,9 @@
 from pick_bitrate import pick_tx_bitrate
 import fusb_options
 
-class usrp_graph(gr.flow_graph):
+class my_top_block(gr.top_block):
     def __init__(self, options):
-        gr.flow_graph.__init__(self)
+        gr.top_block.__init__(self)
 
         self._tx_freq            = options.tx_freq         # tranmitter's 
center frequency
         self._tx_subdev_spec     = options.tx_subdev_spec  # daughterboard to 
use
@@ -53,10 +53,10 @@
         # copy the final answers back into options for use by modulator
         #options.bitrate = self._bitrate
 
-        self.txpath = transmit_path(self, options)
+        self.txpath = transmit_path(options)
 
         self.connect(self.txpath, self.u)
-
+        
     def _setup_usrp_sink(self):
         """
         Creates a USRP sink, determines the settings for best bitrate,
@@ -167,7 +167,7 @@
 def main():
 
     def send_pkt(payload='', eof=False):
-        return fg.txpath.send_pkt(payload, eof)
+        return tb.txpath.send_pkt(payload, eof)
 
     parser = OptionParser(option_class=eng_option, conflict_handler="resolve")
     expert_grp = parser.add_option_group("Expert")
@@ -178,23 +178,23 @@
     parser.add_option("","--discontinuous", action="store_true", default=False,
                       help="enable discontinuous mode")
 
-    usrp_graph.add_options(parser, expert_grp)
+    my_top_block.add_options(parser, expert_grp)
     transmit_path.add_options(parser, expert_grp)
-    blks.ofdm_mod.add_options(parser, expert_grp)
-    blks.ofdm_demod.add_options(parser, expert_grp)
+    blks2.ofdm_mod.add_options(parser, expert_grp)
+    blks2.ofdm_demod.add_options(parser, expert_grp)
     fusb_options.add_options(expert_grp)
 
     (options, args) = parser.parse_args ()
 
     # build the graph
-    fg = usrp_graph(options)
-
+    tb = my_top_block(options)
+    
     r = gr.enable_realtime_scheduling()
     if r != gr.RT_OK:
         print "Warning: failed to enable realtime scheduling"
 
-    fg.start()                       # start flow graph
-
+    tb.start()                       # start flow graph
+    
     # generate and send packets
     nbytes = int(1e6 * options.megabytes)
     n = 0
@@ -210,7 +210,7 @@
         pktno += 1
         
     send_pkt(eof=True)
-    fg.wait()                       # wait for it to finish
+    tb.wait()                       # wait for it to finish
 
 if __name__ == '__main__':
     try:

Modified: 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/plot_ofdm.m
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/plot_ofdm.m
       2007-12-11 16:21:51 UTC (rev 7104)
+++ 
gnuradio/branches/developers/trondeau/ofdm2/gnuradio-examples/python/ofdm/plot_ofdm.m
       2007-12-11 20:49:38 UTC (rev 7105)
@@ -3,9 +3,18 @@
 ofdm = read_complex_binary('ofdm_corr_out_c.dat');
 ofdm_split = split_vect(ofdm, occ_tones);
 
+ofdm_derot = read_complex_binary('ofdm_frame_sink_c.dat');
+ofdm_derot_split = split_vect(ofdm_derot, occ_tones);
+
 fftc = read_complex_binary('fft_out_c.dat');
 fftc_split = split_vect(fftc, fft_size);
 
+size(ofdm_split)
+size(ofdm_derot_split)
+disp "DEROTATED SPLIT"
+ofdm_derot(1:100)
+
+
 figure(1)
 #set(gcf, 'Position', [50 50 1000 600]);
 
@@ -19,28 +28,28 @@
     maxcount = a(1);
 end
 
-for i = 1:20000
+for i = 1:size(ofdm_split)[0]
     x = ofdm_split(i,:);
     y = fftc_split(i+1,:);
     
-    subplot(2,2,1)
-    plot(real(x), imag(x), 'bo')
+    subplot(2,2,1);
+    plot(real(x), imag(x), 'bo');
     #set(gca, 'FontSize', 30, 'FontWeight', 'Bold');
     axis([-1.5, 1.5, -1.5, 1.5])
     #title('I&Q Constellation', 'FontSize', 36);
     #xlabel('Inphase', 'FontSize', 32);
     #ylabel('Quadrature', 'FontSize', 32);
     
-    subplot(2,2,3)
-    plot(angle(x*j), 'bo')
+    subplot(2,2,3);
+    plot(angle(x*j), 'bo');
     #set(gca, 'FontSize', 30, 'FontWeight', 'Bold');
     axis([0, occ_tones, -3.5, 3.5])
     #title('Equalized Symbol Angle', 'FontSize', 36);
     #xlabel('Bin Number (Occ. Tones)', 'FontSize', 32);
     #ylabel('Symbol Angle', 'FontSize', 32);
     
-    subplot(2,2,2)
-    plot(angle(y*j), 'bo')
+    subplot(2,2,2);
+    plot(angle(y*j), 'bo');
     #set(gca, 'FontSize', 30, 'FontWeight', 'Bold');
     axis([0, fft_size, -3.5, 3.5]) 
     #title('Unequalized Symbol Angle', 'FontSize', 36);
@@ -48,18 +57,18 @@
     #ylabel('Symbol Angle', 'FontSize', 32);
     
     Y = 20*log10(abs(y) ./ max(abs(y)));
-    subplot(2,2,4)
-    plot(Y, 'b-')
+    subplot(2,2,4);
+    plot(Y, 'b-');
     #set(gca, 'FontSize', 30, 'FontWeight', 'Bold');
     axis([0, fft_size, -50, 1]);
     #title('Frequency Domain of Unequalized Rx', 'FontSize', 36);
     #xlabel('Bin Number (FFT Size)', 'FontSize', 32);
     #ylabel('Power (dB)', 'FontSize', 32);
     
-    %     N = 20*log10(var(abs(x)-1))
+    #N = 20*log10(var(abs(x)-1));
     
     disp(sprintf('Symbol Number: %d\n', i))
-%     disp(sprintf('\tFreq Error: %f\n', anglesh_pn(1+(i-1)*fft_size)))
+    #disp(sprintf('\tFreq Error: %f\n', anglesh_pn(1+(i-1)*fft_size)))
     pause
 
 end





reply via email to

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