GNU Radio 3.7.1 C++ API
gr::digital::mpsk_receiver_cc Class Reference

This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. More...

#include <mpsk_receiver_cc.h>

Inheritance diagram for gr::digital::mpsk_receiver_cc:

List of all members.

Public Types

typedef boost::shared_ptr
< mpsk_receiver_cc
sptr

Public Member Functions

virtual float modulation_order () const =0
 Returns the modulation order (M) currently set.
virtual float theta () const =0
 Returns current value of theta.
virtual float mu () const =0
 Returns current value of mu.
virtual float omega () const =0
 Returns current value of omega.
virtual float gain_mu () const =0
 Returns mu gain factor.
virtual float gain_omega () const =0
 Returns omega gain factor.
virtual float gain_omega_rel () const =0
 Returns the relative omega limit.
virtual void set_modulation_order (unsigned int M)=0
 Sets the modulation order (M) currently.
virtual void set_theta (float theta)=0
 Sets value of theta.
virtual void set_mu (float mu)=0
 Sets value of mu.
virtual void set_omega (float omega)=0
 Sets value of omega and its min and max values.
virtual void set_gain_mu (float gain_mu)=0
 Sets value for mu gain factor.
virtual void set_gain_omega (float gain_omega)=0
 Sets value for omega gain factor.
virtual void set_gain_omega_rel (float omega_rel)=0
 Sets the relative omega limit and resets omega min/max values.

Static Public Member Functions

static sptr make (unsigned int M, float theta, float loop_bw, float fmin, float fmax, float mu, float gain_mu, float omega, float gain_omega, float omega_rel)
 Make a M-PSK receiver block.

Detailed Description

This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization.

It performs carrier frequency and phase locking as well as symbol timing recovery. It works with (D)BPSK, (D)QPSK, and (D)8PSK as tested currently. It should also work for OQPSK and PI/4 DQPSK.

The phase and frequency synchronization are based on a Costas loop that finds the error of the incoming signal point compared to its nearest constellation point. The frequency and phase of the NCO are updated according to this error. There are optimized phase error detectors for BPSK and QPSK, but 8PSK is done using a brute-force computation of the constellation points to find the minimum.

The symbol synchronization is done using a modified Mueller and Muller circuit from the paper:

"G. R. Danesfahani, T. G. Jeans, "Optimisation of modified Mueller and Muller algorithm," Electronics Letters, Vol. 31, no. 13, 22 June 1995, pp. 1032 - 1033."

This circuit interpolates the downconverted sample (using the NCO developed by the Costas loop) every mu samples, then it finds the sampling error based on this and the past symbols and the decision made on the samples. Like the phase error detector, there are optimized decision algorithms for BPSK and QPKS, but 8PSK uses another brute force computation against all possible symbols. The modifications to the M&M used here reduce self-noise.


Member Typedef Documentation


Member Function Documentation

virtual float gr::digital::mpsk_receiver_cc::gain_mu ( ) const [pure virtual]

Returns mu gain factor.

virtual float gr::digital::mpsk_receiver_cc::gain_omega ( ) const [pure virtual]

Returns omega gain factor.

virtual float gr::digital::mpsk_receiver_cc::gain_omega_rel ( ) const [pure virtual]

Returns the relative omega limit.

static sptr gr::digital::mpsk_receiver_cc::make ( unsigned int  M,
float  theta,
float  loop_bw,
float  fmin,
float  fmax,
float  mu,
float  gain_mu,
float  omega,
float  gain_omega,
float  omega_rel 
) [static]

Make a M-PSK receiver block.

Parameters:
Mmodulation order of the M-PSK modulation
thetaany constant phase rotation from the real axis of the constellation
loop_bwLoop bandwidth to set gains of phase/freq tracking loop
fminminimum normalized frequency value the loop can achieve
fmaxmaximum normalized frequency value the loop can achieve
muinitial parameter for the interpolator [0,1]
gain_mugain parameter of the M&M error signal to adjust mu (~0.05)
omegainitial value for the number of symbols between samples (~number of samples/symbol)
gain_omegagain parameter to adjust omega based on the error (~omega^2/4)
omega_relsets the maximum (omega*(1+omega_rel)) and minimum (omega*(1+omega_rel)) omega (~0.005)

The constructor also chooses which phase detector and decision maker to use in the work loop based on the value of M.

virtual float gr::digital::mpsk_receiver_cc::modulation_order ( ) const [pure virtual]

Returns the modulation order (M) currently set.

virtual float gr::digital::mpsk_receiver_cc::mu ( ) const [pure virtual]

Returns current value of mu.

virtual float gr::digital::mpsk_receiver_cc::omega ( ) const [pure virtual]

Returns current value of omega.

virtual void gr::digital::mpsk_receiver_cc::set_gain_mu ( float  gain_mu) [pure virtual]

Sets value for mu gain factor.

virtual void gr::digital::mpsk_receiver_cc::set_gain_omega ( float  gain_omega) [pure virtual]

Sets value for omega gain factor.

virtual void gr::digital::mpsk_receiver_cc::set_gain_omega_rel ( float  omega_rel) [pure virtual]

Sets the relative omega limit and resets omega min/max values.

virtual void gr::digital::mpsk_receiver_cc::set_modulation_order ( unsigned int  M) [pure virtual]

Sets the modulation order (M) currently.

virtual void gr::digital::mpsk_receiver_cc::set_mu ( float  mu) [pure virtual]

Sets value of mu.

virtual void gr::digital::mpsk_receiver_cc::set_omega ( float  omega) [pure virtual]

Sets value of omega and its min and max values.

virtual void gr::digital::mpsk_receiver_cc::set_theta ( float  theta) [pure virtual]

Sets value of theta.

virtual float gr::digital::mpsk_receiver_cc::theta ( ) const [pure virtual]

Returns current value of theta.


The documentation for this class was generated from the following file: