On Mon, Jun 8, 2009 at 2:11 PM, Ben Green <[email protected]> wrote:
> In gr_mpsk_receiver_cc.cc, the qpsk-optimized function for calculating
> phase error makes guesses about the constellation point based on
> constellation ( 1 + 1j), (-1 + 1j), (-1 -1j), and (1 - 1j). However, the
> rest of the receiver assumes a constellation of (1 + 0j), (0 + 1j), (-1 +
> 0j), and (0 - 1j). Currently the BER is terrible for qpsk demod, and with
> much noise at all it fails completely. This patch fixes the function so that
> it is consistent with the rest of the block, and works much better now.
>
>
>
I apologize for file type issues, here is the patch in plaintext:
--- gr_mpsk_receiver_cc.cc 2009-05-29 11:15:17.000000000 -0500
+++ gr_mpsk_receiver_cc.cc 2009-06-08 13:18:37.478473275 -0500
@@ -124,8 +124,21 @@
float
gr_mpsk_receiver_cc::phase_error_detector_qpsk(gr_complex sample) const
{
- float phase_error = -((sample.real()>0 ? 1.0 : -1.0) * sample.imag() -
- (sample.imag()>0 ? 1.0 : -1.0) * sample.real());
+
+ float phase_error = 0;
+ if(fabsf(sample.real()) > fabsf(sample.imag())) {
+ if(sample.real() > 0)
+ phase_error = sample.imag();
+ else
+ phase_error = -sample.imag();
+ }
+ else {
+ if(sample.imag() > 0)
+ phase_error = -sample.real();
+ else
+ phase_error = sample.real();
+ }
+
return -phase_error;
}
_______________________________________________
Patch-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/patch-gnuradio