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