GNU Radio 3.7.1 C++ API
|
This block takes care of receiving M-PSK modulated signals through phase, frequency, and symbol synchronization. More...
#include <mpsk_receiver_cc.h>
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. |
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.
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.
M | modulation order of the M-PSK modulation |
theta | any constant phase rotation from the real axis of the constellation |
loop_bw | Loop bandwidth to set gains of phase/freq tracking loop |
fmin | minimum normalized frequency value the loop can achieve |
fmax | maximum normalized frequency value the loop can achieve |
mu | initial parameter for the interpolator [0,1] |
gain_mu | gain parameter of the M&M error signal to adjust mu (~0.05) |
omega | initial value for the number of symbols between samples (~number of samples/symbol) |
gain_omega | gain parameter to adjust omega based on the error (~omega^2/4) |
omega_rel | sets 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.