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 <[EMAIL PROTECTED]> 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
> >
>
>
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to