discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] benchmark_* not working correctly


From: Tim Meehan
Subject: Re: [Discuss-gnuradio] benchmark_* not working correctly
Date: Fri, 28 Sep 2007 15:46:43 -0400


Dev,  Johnathan, and all

After spending some time looking through gr_mpsk_receiver_cc.cc I am not sure how this
ever worked.  Below is a patch that works for me.  There are two minor changes

1) I did not understand how the delay line for the interpolator could work as coded so I changed it to what made sense to me.

2) I changed the sign of the return value on the phase_error_detector.

Let me know if this patch works for you. 

Q: Is this code "gr_mpsk_receiver_cc.cc" going to remain in the baseline?  If so I will clean it up a bit, write
some QA code, and submit on the patch list.

Tim


Index: gr_mpsk_receiver_cc.cc
===================================================================
--- gr_mpsk_receiver_cc.cc  (revision 6559)
+++ gr_mpsk_receiver_cc.cc  (working copy)
@@ -142,7 +142,7 @@
 float gr_mpsk_receiver_cc::phase_error_detector_generic(gr_complex sample) const
 {
   //return gr_fast_atan2f(sample*conj(d_constellation[d_current_const_point]));
-  return -arg(sample*conj(d_constellation[d_current_const_point]));
+  return  arg(sample*conj(d_constellation[d_current_const_point]));
 }

 // FIXME add these back in an test difference in performance
@@ -220,9 +220,10 @@
   sample = nco*symbol;      // get the downconverted symbol

   // Fill up the delay line for the interpolator
-  d_dl[d_dl_idx] = sample;
-  d_dl[(d_dl_idx + DLLEN)] = sample;  // put this in the second half of the buffer for overflows
-  d_dl_idx = (d_dl_idx+1) % DLLEN;    // Keep the delay line index in bounds
+   for(int ii=0;ii<(DLLEN-1);ii++){
+     d_dl[ii] = d_dl[ii+1];
+   }
+   d_dl[DLLEN-1] = sample;
 }

 void
@@ -326,7 +327,7 @@
     }

     if(i < ninput_items[0]) {
-      gr_complex interp_sample = d_interp->interpolate(&d_dl[d_dl_idx], d_mu);
+      gr_complex interp_sample = d_interp->interpolate(&d_dl[0], d_mu);

       mm_error_tracking(interp_sample);     // corrects M&M sample time
       phase_error_tracking(interp_sample);  // corrects phase and frequency offsets



On 9/27/07, Dev Ramudit <address@hidden> wrote:
Running benchmark_loopback.py with gmsk (-m gmsk) seems to work
correctly for all my systems. Unfortunately, the same doesn't seem to be
true of the benchmark_rx and benchmark_tx, which use gmsk by default.
Changing them to any of the other modulation options didn't yield any
results either.

Good luck. I'll continue to try to figure out what's going wrong as well.

Tim Meehan wrote:
> I have some additional hints.
>
> When I run with 2 samples per symbol (the default)
> ./benchmark_loopback.py  -s 20 -M 0.004 -S 2
> ok = False  pktno =   19  n_rcvd =    1  n_right =    0
> ok = False  pktno =    7  n_rcvd =    2  n_right =    0
> ok = False  pktno =  180  n_rcvd =    3  n_right =    0
> ......
>
> Consistent with Dev
>
> When I run with 4 samples per symbol
> ./benchmark_loopback.py  -s 20 -M 0.004 -S 4
> ok = False  pktno =    2  n_rcvd =    1  n_right =    0
> ok =  True  pktno =    3  n_rcvd =    2  n_right =    1
> ok = False  pktno =    6  n_rcvd =    3  n_right =    1
> .....
>
> So it is still broken but seems to perform "better" with 4 samples per
> symbol.  I have spent some time looking through all of the blocks and
> looking through the .dat files with logging turned on.  The data data looks
> OK up until gr_mpsk_receiver_cc.  I spent a good amount of time looking
> through this file but I suspect the problem lies elsewhere because this file
> does not seem to have changed other than comments since rev 5873
>
> I will keep looking
>
> Tim
>



reply via email to

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