commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r7843 - gnuradio/branches/developers/trondeau/ofdmtimi


From: trondeau
Subject: [Commit-gnuradio] r7843 - gnuradio/branches/developers/trondeau/ofdmtiming/gnuradio-core/src/lib/general
Date: Tue, 26 Feb 2008 12:54:10 -0700 (MST)

Author: trondeau
Date: 2008-02-26 12:54:09 -0700 (Tue, 26 Feb 2008)
New Revision: 7843

Modified:
   
gnuradio/branches/developers/trondeau/ofdmtiming/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc
Log:
Changed signal output to a vector to better handle item sizes when signalling 
the next block. Correlates only when the sync signal has been received. This 
checkin gets the OFDM system working pretty solidly over the air with BPSK and 
QPSK with one stray signal corrupting a packet every now and then.

Modified: 
gnuradio/branches/developers/trondeau/ofdmtiming/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc
===================================================================
--- 
gnuradio/branches/developers/trondeau/ofdmtiming/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc
 2008-02-26 19:51:38 UTC (rev 7842)
+++ 
gnuradio/branches/developers/trondeau/ofdmtiming/gnuradio-core/src/lib/general/gr_ofdm_frame_acquisition.cc
 2008-02-26 19:54:09 UTC (rev 7843)
@@ -48,7 +48,7 @@
                                                      const 
std::vector<gr_complex> &known_symbol,
                                                      unsigned int 
max_fft_shift_len)
   : gr_block ("ofdm_frame_acquisition",
-             gr_make_io_signature  (1, 1, sizeof(gr_complex)*fft_length),
+             gr_make_io_signature2 (2, 2, sizeof(gr_complex)*fft_length, 
sizeof(char)*fft_length),
              gr_make_io_signature2 (2, 2, 
sizeof(gr_complex)*occupied_carriers, sizeof(char))),
     d_occupied_carriers(occupied_carriers),
     d_fft_length(fft_length),
@@ -132,9 +132,8 @@
             search_delta, h_sqrd.real(), h_sqrd.imag(), power, 
h_sqrd.real()/power, arg(h_sqrd));
     }
 
-    //FIXME: these threshold values are arbitrary, although the decision 
metric is very good
-    // even at very low SNR
-    if((h_sqrd.real() > 0.95*power) && (h_sqrd.real() < 1.1*power)) {
+    //FIXME: these threshold values are arbitrary
+    if((h_sqrd.real() > 0.80*power) && (h_sqrd.real() < 1.2*power)) {
       found = true;
       d_coarse_freq = search_delta;
       d_phase_count = 1;
@@ -204,22 +203,22 @@
                                        gr_vector_void_star &output_items)
 {
   const gr_complex *symbol = (const gr_complex *)input_items[0];
+  const char *signal_in = (const char *)input_items[1];
 
   gr_complex *out = (gr_complex *) output_items[0];
-  char *sig = (char *) output_items[1];
+  char *signal_out = (char *) output_items[1];
   
   int unoccupied_carriers = d_fft_length - d_occupied_carriers;
   int zeros_on_left = (int)ceil(unoccupied_carriers/2.0);
 
-  int found = 0;
-  found = correlate(symbol, zeros_on_left);
-  if(found) {
+  if(signal_in[0]) {
     d_phase_count = 1;
+    correlate(symbol, zeros_on_left);
     calculate_equalizer(symbol, zeros_on_left);
-    sig[0] = 1;
+    signal_out[0] = 1;
   }
   else {
-    sig[0] = 0;
+    signal_out[0] = 0;
   } 
 
   for(unsigned int i = 0; i < d_occupied_carriers; i++) {





reply via email to

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